@@ -1257,47 +1257,57 @@ Function: smv_typecheckt::typecheck
12571257void smv_typecheckt::typecheck (
12581258 smv_parse_treet::modulet::itemt &item)
12591259{
1260- modet mode;
1261-
12621260 switch (item.item_type )
12631261 {
1264- case smv_parse_treet::modulet::itemt::ASSIGN_CURRENT:
1265- mode = OTHER;
1266- break ;
1267-
1268- case smv_parse_treet::modulet::itemt::ASSIGN_INIT:
1269- mode = INIT;
1270- break ;
1271-
1272- case smv_parse_treet::modulet::itemt::ASSIGN_NEXT:
1273- mode = TRANS;
1274- break ;
1275-
12761262 case smv_parse_treet::modulet::itemt::INIT:
1277- mode=INIT;
1278- break ;
1263+ typecheck (item.expr , INIT);
1264+ convert_expr_to (item.expr , bool_typet{});
1265+ return ;
12791266
12801267 case smv_parse_treet::modulet::itemt::TRANS:
1281- mode=TRANS;
1282- break ;
1268+ typecheck (item.expr , TRANS);
1269+ convert_expr_to (item.expr , bool_typet{});
1270+ return ;
12831271
12841272 case smv_parse_treet::modulet::itemt::CTLSPEC:
1285- mode = CTL;
1286- break ;
1273+ typecheck (item.expr , CTL);
1274+ convert_expr_to (item.expr , bool_typet{});
1275+ return ;
12871276
12881277 case smv_parse_treet::modulet::itemt::LTLSPEC:
1289- mode = LTL;
1290- break ;
1278+ typecheck (item.expr , LTL);
1279+ convert_expr_to (item.expr , bool_typet{});
1280+ return ;
12911281
1292- case smv_parse_treet::modulet::itemt::DEFINE:
12931282 case smv_parse_treet::modulet::itemt::INVAR:
12941283 case smv_parse_treet::modulet::itemt::FAIRNESS:
1295- default :
1296- mode=OTHER;
1297- }
1284+ typecheck (item.expr , OTHER);
1285+ convert_expr_to (item.expr , bool_typet{});
1286+ return ;
1287+
1288+ case smv_parse_treet::modulet::itemt::ASSIGN_CURRENT:
1289+ typecheck (item.equal_expr ().lhs (), OTHER);
1290+ typecheck (item.equal_expr ().rhs (), item.equal_expr ().lhs ().type (), OTHER);
1291+ item.equal_expr ().type () = bool_typet{};
1292+ return ;
1293+
1294+ case smv_parse_treet::modulet::itemt::ASSIGN_INIT:
1295+ typecheck (item.equal_expr ().lhs (), INIT);
1296+ typecheck (item.equal_expr ().rhs (), item.equal_expr ().lhs ().type (), INIT);
1297+ item.equal_expr ().type () = bool_typet{};
1298+ return ;
12981299
1299- typecheck (item.expr , mode);
1300- convert_expr_to (item.expr , bool_typet{});
1300+ case smv_parse_treet::modulet::itemt::ASSIGN_NEXT:
1301+ typecheck (item.equal_expr ().lhs (), TRANS);
1302+ typecheck (item.equal_expr ().rhs (), item.equal_expr ().lhs ().type (), TRANS);
1303+ item.equal_expr ().type () = bool_typet{};
1304+ return ;
1305+
1306+ case smv_parse_treet::modulet::itemt::DEFINE:
1307+ typecheck (item.expr , OTHER);
1308+ item.equal_expr ().type () = bool_typet{};
1309+ return ;
1310+ }
13011311}
13021312
13031313/* ******************************************************************\
0 commit comments