|
|
@@ -2542,7 +2542,8 @@ PRODUCTIONS
|
|
|
QbeGen.CopyOp("0", q)
|
|
|
END;
|
|
|
astCur := AST.MakeBin(AST.NkBinExpr, astOp, astA, astB); .) ]
|
|
|
- (. IF NOT astMade THEN astCur := astA END; .) .
|
|
|
+ (. IF NOT astMade THEN astCur := astA END; .)
|
|
|
+ (. IF astCur # AST.NoNode THEN AST.SetTy(astCur, t) END; .) .
|
|
|
Rel<VAR op: INTEGER>
|
|
|
= "=" (. op := SymTab.OpEq; .)
|
|
|
| "#" (. op := SymTab.OpNeq1; .)
|
|
|
@@ -2654,7 +2655,8 @@ PRODUCTIONS
|
|
|
END
|
|
|
ELSE QbeGen.CopyOp("0", q)
|
|
|
END
|
|
|
- END; .) } .
|
|
|
+ END; .) }
|
|
|
+ (. IF astCur # AST.NoNode THEN AST.SetTy(astCur, t) END; .) .
|
|
|
AddOp<VAR op: INTEGER>
|
|
|
= "+" (. op := SymTab.OpAdd; .)
|
|
|
| "-" (. op := SymTab.OpSub; .)
|
|
|
@@ -2723,7 +2725,8 @@ PRODUCTIONS
|
|
|
END
|
|
|
ELSE QbeGen.CopyOp("0", q)
|
|
|
END
|
|
|
- END; .) } .
|
|
|
+ END; .) }
|
|
|
+ (. IF astCur # AST.NoNode THEN AST.SetTy(astCur, t) END; .) .
|
|
|
MulOp<VAR op: INTEGER>
|
|
|
= "*" (. op := SymTab.OpTimes; .)
|
|
|
| "/" (. op := SymTab.OpSlash; .)
|
|
|
@@ -3229,7 +3232,8 @@ PRODUCTIONS
|
|
|
astCur := AST.MakeUn(
|
|
|
AST.NkUnary, AST.OpNot, astNot); .)
|
|
|
)
|
|
|
- (. IF NOT astIsLit THEN astCur := AST.NoNode END; .) .
|
|
|
+ (. IF NOT astIsLit THEN astCur := AST.NoNode END; .)
|
|
|
+ (. IF astCur # AST.NoNode THEN AST.SetTy(astCur, t) END; .) .
|
|
|
(* Set literals are SET OF [0..255] (8 words); elements validated
|
|
|
0..255 statically when foldable (222 otherwise), runtime trap
|
|
|
for computed elements. Ranges always lower via SetRange. *)
|