|
|
@@ -1010,7 +1010,7 @@ PRODUCTIONS
|
|
|
(* bind the receiver: bare
|
|
|
field names resolve
|
|
|
against THIS *)
|
|
|
- QbeGen.ThisBase(thisQ);
|
|
|
+ QbeGen.CopyOp("@", thisQ);
|
|
|
QbeGen.PushWith(thisQ); .)
|
|
|
Block<pn> (. AST.SetChild(astMethod, 1, astStmt);
|
|
|
QbeGen.PopWith;
|
|
|
@@ -1960,10 +1960,8 @@ PRODUCTIONS
|
|
|
k := SymTab.KindVar;
|
|
|
r := SymTab.FwdVarRef(n, k,
|
|
|
fref, t);
|
|
|
- slot := QbeGen.FwdDesignator();
|
|
|
- FwdVarNote(fref, slot);
|
|
|
- fid := slot;
|
|
|
- QbeGen.FwdAddrOper(fid, q);
|
|
|
+ FwdVarNote(fref, 0);
|
|
|
+ QbeGen.CopyOp("@", q);
|
|
|
sfx := TRUE; fwd := TRUE
|
|
|
ELSE
|
|
|
SemError(201);
|
|
|
@@ -2369,10 +2367,8 @@ PRODUCTIONS
|
|
|
AST.NkUnary, AST.OpSub, astA);
|
|
|
astA := astCur
|
|
|
END; .)
|
|
|
- { AddOp<op> (. IF op = SymTab.OpOr THEN
|
|
|
- QbeGen.DelayBegin END; .)
|
|
|
- Term<t2, q2> (. astB := astCur; IF op = SymTab.OpOr THEN
|
|
|
- QbeGen.DelayEnd END; .)
|
|
|
+ { AddOp<op>
|
|
|
+ Term<t2, q2> (. astB := astCur; .)
|
|
|
(. astOp := AST.OpAdd;
|
|
|
IF op = SymTab.OpSub THEN astOp := AST.OpSub
|
|
|
ELSIF op = SymTab.OpOr THEN astOp := AST.OpOr END;
|
|
|
@@ -2666,7 +2662,6 @@ PRODUCTIONS
|
|
|
ELSE
|
|
|
dt := SymTab.NewStr();
|
|
|
QbeGen.DeclStr(s, qd);
|
|
|
- QbeGen.NoteAddr(qd, qd)
|
|
|
END;
|
|
|
dk := -1;
|
|
|
qn[0] := CHR(0); .)
|
|
|
@@ -2684,7 +2679,6 @@ PRODUCTIONS
|
|
|
QbeGen.IntStr(ucp, qd)
|
|
|
ELSE
|
|
|
dt := SymTab.NewUStr();
|
|
|
- QbeGen.NoteAddr(qd, qd)
|
|
|
END;
|
|
|
dk := -1;
|
|
|
qn[0] := CHR(0); .) )
|
|
|
@@ -2700,14 +2694,8 @@ PRODUCTIONS
|
|
|
AND (SymTab.ClassOf(dt) = SymTab.ClUStr) THEN
|
|
|
(* UString: the count is
|
|
|
the descriptor header *)
|
|
|
- IF isHigh THEN
|
|
|
- QbeGen.UStrLen(qd, qr);
|
|
|
- QbeGen.DecQ(qr)
|
|
|
- ELSE
|
|
|
- QbeGen.UStrLen(qd, qr)
|
|
|
- END;
|
|
|
- t := SymTab.IntType();
|
|
|
- QbeGen.CopyOp(qr, q)
|
|
|
+ t := SymTab.IntType();
|
|
|
+ QbeGen.CopyOp("@", q)
|
|
|
ELSIF (dt # SymTab.InvalidType)
|
|
|
AND (SymTab.ClassOf(dt) = SymTab.ClUChar) THEN
|
|
|
(* single UCHAR codepoint *)
|
|
|
@@ -2885,8 +2873,7 @@ PRODUCTIONS
|
|
|
AST.SetChild(astNode, 0, AST.MakeLeaf(AST.NkIdent, "CAP"));
|
|
|
IF astCur # AST.NoNode THEN AST.SetChild(astNode, 1, astCur) END;
|
|
|
astCur := astNode; astIsLit := TRUE; .)
|
|
|
- (. QbeGen.CapQ(q, qa);
|
|
|
- QbeGen.CopyOp(qa, q);
|
|
|
+ (. QbeGen.CopyOp("@", q);
|
|
|
t := SymTab.CharType(); .)
|
|
|
| "UCHR" "(" Expr<et, q> ")"
|
|
|
(. astNode := AST.MakeNode(AST.NkCall);
|
|
|
@@ -2933,10 +2920,7 @@ PRODUCTIONS
|
|
|
AND (SymTab.ClassOf(et) #
|
|
|
SymTab.ClReal) THEN
|
|
|
SemError(211)
|
|
|
- ELSE QbeGen.AbsQ(q, qa,
|
|
|
- SymTab.ClassOf(et) =
|
|
|
- SymTab.ClReal);
|
|
|
- QbeGen.CopyOp(qa, q)
|
|
|
+ ELSE QbeGen.CopyOp("@", q)
|
|
|
END;
|
|
|
t := et; .)
|
|
|
| "VAL" "(" GetIdent<vn> (. astArg2 := AST.MakeLeaf(AST.NkIdent, vn); .) "," Expr<et, q> ")"
|
|
|
@@ -3022,7 +3006,7 @@ PRODUCTIONS
|
|
|
ELSE SemError(212);
|
|
|
t := SymTab.InvalidType END;
|
|
|
IF t # SymTab.InvalidType THEN
|
|
|
- QbeGen.NotQ(q2, q)
|
|
|
+ QbeGen.CopyOp("@", q)
|
|
|
ELSE QbeGen.CopyOp("0", q)
|
|
|
END;
|
|
|
astIsLit := TRUE;
|