|
|
@@ -93,7 +93,7 @@ PRODUCTIONS
|
|
|
table; imports materialize exported names. *)
|
|
|
DefUnit (. VAR m1, m2, pn: SymTab.Name; .)
|
|
|
= "DEFINITION" "MODULE"
|
|
|
- GetIdent<m1> (. IF ~SymTab.BeginDef(m1) THEN
|
|
|
+ GetIdent<m1> (. IF NOT SymTab.BeginDef(m1) THEN
|
|
|
SemError(200) END;
|
|
|
QbeGen.SetModule(m1); .)
|
|
|
";"
|
|
|
@@ -102,12 +102,12 @@ PRODUCTIONS
|
|
|
| ProcHeading<pn> ";" (. SymTab.CloseProc;
|
|
|
QbeGen.AbortFunc; .) }
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(m1, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(m1, m2) THEN
|
|
|
SemError(202) END;
|
|
|
SymTab.EndUnit; .) .
|
|
|
ImplUnit (. VAR m1, m2: SymTab.Name; .)
|
|
|
= "IMPLEMENTATION" "MODULE"
|
|
|
- GetIdent<m1> (. IF ~SymTab.BeginImpl(m1) THEN
|
|
|
+ GetIdent<m1> (. IF NOT SymTab.BeginImpl(m1) THEN
|
|
|
SemError(201) END;
|
|
|
QbeGen.SetModule(m1); .)
|
|
|
";"
|
|
|
@@ -116,12 +116,12 @@ PRODUCTIONS
|
|
|
[ "BEGIN" (. QbeGen.BeginInit(m1); .)
|
|
|
[ StatSeq ] (. QbeGen.EndInit; .) ]
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(m1, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(m1, m2) THEN
|
|
|
SemError(202) END;
|
|
|
SymTab.EndUnit; .) .
|
|
|
ProgModule (. VAR m1, m2: SymTab.Name; .)
|
|
|
= "MODULE"
|
|
|
- GetIdent<m1> (. IF ~SymTab.BeginProg(m1) THEN
|
|
|
+ GetIdent<m1> (. IF NOT SymTab.BeginProg(m1) THEN
|
|
|
SemError(200) END;
|
|
|
QbeGen.SetModule(m1); .)
|
|
|
[ Priority ]
|
|
|
@@ -131,7 +131,7 @@ PRODUCTIONS
|
|
|
[ "BEGIN" (. QbeGen.BeginBody; .)
|
|
|
[ StatSeq ] ]
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(m1, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(m1, m2) THEN
|
|
|
SemError(202) END;
|
|
|
QbeGen.EndModule(m1);
|
|
|
SymTab.EndUnit; .) .
|
|
|
@@ -142,7 +142,7 @@ PRODUCTIONS
|
|
|
lowering waits for step 4, marked by one 230 at END. *)
|
|
|
NestedModule (. VAR m1, m2: SymTab.Name; .)
|
|
|
= "MODULE"
|
|
|
- GetIdent<m1> (. IF ~SymTab.Enter(m1,
|
|
|
+ GetIdent<m1> (. IF NOT SymTab.Enter(m1,
|
|
|
SymTab.KindModule) THEN
|
|
|
SemError(200) END;
|
|
|
SymTab.PushScope; .)
|
|
|
@@ -154,7 +154,7 @@ PRODUCTIONS
|
|
|
[ "BEGIN"
|
|
|
[ StatSeq ] ]
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(m1, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(m1, m2) THEN
|
|
|
SemError(202) END;
|
|
|
SymTab.PopScope;
|
|
|
SemError(230); .) .
|
|
|
@@ -180,13 +180,16 @@ PRODUCTIONS
|
|
|
| "IMPORT"
|
|
|
ImpModList ";" .
|
|
|
ImpList<mod: SymTab.Name> (. VAR n: SymTab.Name; .)
|
|
|
+ = ImpName<mod>
|
|
|
+ { "," ImpName<mod> } .
|
|
|
+ (* Pervasive built-ins imported from SYSTEM (e.g. TSIZE) are
|
|
|
+ accepted and ignored: the built-in applies regardless. *)
|
|
|
+ ImpName<mod: SymTab.Name> (. VAR n: SymTab.Name; .)
|
|
|
= GetIdent<n> (. IF SymTab.ModKnown(mod)
|
|
|
- & ~SymTab.ImportFrom(mod, n) THEN
|
|
|
+ AND NOT SymTab.ImportFrom(mod, n) THEN
|
|
|
SemError(201) END; .)
|
|
|
- { ","
|
|
|
- GetIdent<n> (. IF SymTab.ModKnown(mod)
|
|
|
- & ~SymTab.ImportFrom(mod, n) THEN
|
|
|
- SemError(201) END; .) } .
|
|
|
+ | ( "TSIZE" | "SIZE" | "ADR" | "HIGH" | "LEN"
|
|
|
+ | "CHR" | "ORD" | "VAL" | "ABS" | "INC" | "DEC" ) .
|
|
|
ImpModList (. VAR n: SymTab.Name; .)
|
|
|
= GetIdent<n>
|
|
|
{ "," GetIdent<n> } .
|
|
|
@@ -201,7 +204,7 @@ PRODUCTIONS
|
|
|
t, op: SymTab.TypeIndex; .)
|
|
|
= GetIdent<n> (. op := SymTab.OpaqueBase(n);
|
|
|
IF op = SymTab.InvalidType THEN
|
|
|
- IF ~SymTab.Enter(n,
|
|
|
+ IF NOT SymTab.Enter(n,
|
|
|
SymTab.KindType) THEN
|
|
|
SemError(200) END
|
|
|
END; .)
|
|
|
@@ -211,7 +214,7 @@ PRODUCTIONS
|
|
|
END; .)
|
|
|
| (. IF op # SymTab.InvalidType THEN
|
|
|
(* stays opaque *)
|
|
|
- ELSIF ~isDef THEN
|
|
|
+ ELSIF NOT isDef THEN
|
|
|
SemError(231)
|
|
|
ELSE SymTab.SetSymType(n,
|
|
|
SymTab.NewAlias()) END; .) ) .
|
|
|
@@ -233,7 +236,7 @@ PRODUCTIONS
|
|
|
(. VAR elem: SymTab.TypeIndex;
|
|
|
ok: BOOLEAN; .)
|
|
|
= "ARRAY"
|
|
|
- ( "OF" Type<elem, FALSE> (. IF ~allowOpen THEN
|
|
|
+ ( "OF" Type<elem, FALSE> (. IF NOT allowOpen THEN
|
|
|
SemError(230) END;
|
|
|
t := SymTab.NewOpenArray(elem); .)
|
|
|
| "[" (. SymTab.BoundBegin; ok := TRUE; .)
|
|
|
@@ -255,15 +258,15 @@ PRODUCTIONS
|
|
|
ELSE cl := SymTab.ClassOf(tlo);
|
|
|
cl2 := SymTab.ClassOf(thi);
|
|
|
IF ((cl # SymTab.ClInt)
|
|
|
- & (cl # SymTab.ClChar))
|
|
|
+ AND (cl # SymTab.ClChar))
|
|
|
OR ((cl2 # SymTab.ClInt)
|
|
|
- & (cl2 # SymTab.ClChar)) THEN
|
|
|
+ AND (cl2 # SymTab.ClChar)) THEN
|
|
|
SemError(230); ok := FALSE
|
|
|
- ELSIF ~SymTab.ConstInt(qlo, lo)
|
|
|
- OR ~SymTab.ConstInt(qhi, hi)
|
|
|
+ ELSIF NOT SymTab.ConstInt(qlo, lo)
|
|
|
+ OR NOT SymTab.ConstInt(qhi, hi)
|
|
|
OR (lo > hi) THEN
|
|
|
SemError(230); ok := FALSE
|
|
|
- ELSIF ~SymTab.BoundAdd(lo, hi) THEN
|
|
|
+ ELSIF NOT SymTab.BoundAdd(lo, hi) THEN
|
|
|
SemError(230); ok := FALSE
|
|
|
END;
|
|
|
END; .) .
|
|
|
@@ -306,15 +309,15 @@ PRODUCTIONS
|
|
|
t2: SymTab.TypeIndex; .)
|
|
|
= RecIdents<rec> ":" Type<t2, FALSE>(. SymTab.FixPendingF(rec, t2); .) .
|
|
|
RecIdents<rec: SymTab.TypeIndex> (. VAR n: SymTab.Name; .)
|
|
|
- = GetIdent<n> (. IF ~SymTab.FieldPending(rec,
|
|
|
+ = GetIdent<n> (. IF NOT SymTab.FieldPending(rec,
|
|
|
n) THEN
|
|
|
SemError(200) END; .)
|
|
|
- { "," GetIdent<n> (. IF ~SymTab.FieldPending(rec,
|
|
|
+ { "," GetIdent<n> (. IF NOT SymTab.FieldPending(rec,
|
|
|
n) THEN
|
|
|
SemError(200) END; .) } .
|
|
|
TypeIdent<VAR t: SymTab.TypeIndex> (. VAR n: SymTab.Name;
|
|
|
k: INTEGER; .)
|
|
|
- = GetIdent<n> (. IF ~SymTab.Lookup(n) THEN
|
|
|
+ = GetIdent<n> (. IF NOT SymTab.Lookup(n) THEN
|
|
|
SemError(201);
|
|
|
t := SymTab.InvalidType
|
|
|
ELSE k := SymTab.SymKind(n);
|
|
|
@@ -340,8 +343,8 @@ PRODUCTIONS
|
|
|
SymTab.ClInt) THEN
|
|
|
SemError(230);
|
|
|
t := SymTab.InvalidType
|
|
|
- ELSIF ~SymTab.ConstInt(qlo, lo)
|
|
|
- OR ~SymTab.ConstInt(qhi, hi)
|
|
|
+ ELSIF NOT SymTab.ConstInt(qlo, lo)
|
|
|
+ OR NOT SymTab.ConstInt(qhi, hi)
|
|
|
OR (lo > hi) THEN
|
|
|
SemError(230);
|
|
|
t := SymTab.InvalidType
|
|
|
@@ -350,11 +353,11 @@ PRODUCTIONS
|
|
|
"]" .
|
|
|
Enum<VAR t: SymTab.TypeIndex> (. VAR n: SymTab.Name; .)
|
|
|
= "(" (. t := SymTab.NewEnum(); .)
|
|
|
- GetIdent<n> (. IF ~SymTab.Enter(n,
|
|
|
+ GetIdent<n> (. IF NOT SymTab.Enter(n,
|
|
|
SymTab.KindConst) THEN
|
|
|
SemError(200) END;
|
|
|
SymTab.SetSymType(n, t); .)
|
|
|
- { "," GetIdent<n> (. IF ~SymTab.Enter(n,
|
|
|
+ { "," GetIdent<n> (. IF NOT SymTab.Enter(n,
|
|
|
SymTab.KindConst) THEN
|
|
|
SemError(200) END;
|
|
|
SymTab.SetSymType(n, t); .) }
|
|
|
@@ -374,7 +377,7 @@ PRODUCTIONS
|
|
|
= "CLASS" ( "IMPLEMENTATION" ClassImplRest | ClassRest ) .
|
|
|
ClassRest (. VAR cn, m2, pn: SymTab.Name;
|
|
|
ct: SymTab.TypeIndex; .)
|
|
|
- = GetIdent<cn> (. IF ~SymTab.Enter(cn,
|
|
|
+ = GetIdent<cn> (. IF NOT SymTab.Enter(cn,
|
|
|
SymTab.KindType) THEN
|
|
|
SemError(200) END;
|
|
|
ct := SymTab.NewClass();
|
|
|
@@ -386,7 +389,7 @@ PRODUCTIONS
|
|
|
{ MethodHeading<pn> ";" (. SymTab.CloseProc;
|
|
|
QbeGen.AbortFunc; .) }
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(cn, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(cn, m2) THEN
|
|
|
SemError(202) END;
|
|
|
SymTab.PopScope;
|
|
|
SemError(230); .) .
|
|
|
@@ -396,7 +399,7 @@ PRODUCTIONS
|
|
|
")" .
|
|
|
Parent1<ct: SymTab.TypeIndex> (. VAR p: SymTab.Name;
|
|
|
pt: SymTab.TypeIndex; .)
|
|
|
- = GetIdent<p> (. IF ~SymTab.Lookup(p) THEN
|
|
|
+ = GetIdent<p> (. IF NOT SymTab.Lookup(p) THEN
|
|
|
SemError(201)
|
|
|
ELSE pt := SymTab.SymType(p);
|
|
|
IF SymTab.ClassOf(pt) #
|
|
|
@@ -408,17 +411,17 @@ PRODUCTIONS
|
|
|
ClassField<ct: SymTab.TypeIndex> (. VAR n, rhs: SymTab.Name;
|
|
|
t: SymTab.TypeIndex; .)
|
|
|
= GetIdent<n>
|
|
|
- ( "=" GetIdent<rhs> (. IF ~SymTab.Enter(n,
|
|
|
+ ( "=" GetIdent<rhs> (. IF NOT SymTab.Enter(n,
|
|
|
SymTab.KindConst) THEN
|
|
|
SemError(200) END;
|
|
|
IF SymTab.Lookup(rhs) THEN
|
|
|
SymTab.SetSymType(n,
|
|
|
SymTab.SymType(rhs))
|
|
|
END; .)
|
|
|
- | (. IF ~SymTab.FieldPending(ct,
|
|
|
+ | (. IF NOT SymTab.FieldPending(ct,
|
|
|
n) THEN
|
|
|
SemError(200) END; .)
|
|
|
- { "," GetIdent<n> (. IF ~SymTab.FieldPending(ct,
|
|
|
+ { "," GetIdent<n> (. IF NOT SymTab.FieldPending(ct,
|
|
|
n) THEN
|
|
|
SemError(200) END; .) }
|
|
|
":" Type<t, FALSE> (. SymTab.FixPendingF(ct, t); .) ) .
|
|
|
@@ -429,7 +432,7 @@ PRODUCTIONS
|
|
|
SymTab.MarkVirtual END; .) .
|
|
|
ClassImplRest (. VAR cn, m2: SymTab.Name;
|
|
|
ct: SymTab.TypeIndex; .)
|
|
|
- = GetIdent<cn> (. IF ~SymTab.Lookup(cn) THEN
|
|
|
+ = GetIdent<cn> (. IF NOT SymTab.Lookup(cn) THEN
|
|
|
SemError(201);
|
|
|
ct := SymTab.InvalidType
|
|
|
ELSE ct := SymTab.SymType(cn);
|
|
|
@@ -441,7 +444,7 @@ PRODUCTIONS
|
|
|
END;
|
|
|
IF ct #
|
|
|
SymTab.InvalidType THEN
|
|
|
- IF ~SymTab.PushClassMembers(
|
|
|
+ IF NOT SymTab.PushClassMembers(
|
|
|
ct) THEN
|
|
|
SemError(230) END
|
|
|
END; .)
|
|
|
@@ -449,7 +452,7 @@ PRODUCTIONS
|
|
|
[ "BEGIN"
|
|
|
[ StatSeq ] ]
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(cn, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(cn, m2) THEN
|
|
|
SemError(202) END;
|
|
|
SymTab.PopScope;
|
|
|
SemError(230); .) .
|
|
|
@@ -458,7 +461,7 @@ PRODUCTIONS
|
|
|
MethodHeading<pn> ";"
|
|
|
(. IF (ct #
|
|
|
SymTab.InvalidType)
|
|
|
- & ~SymTab.MethodExists(ct,
|
|
|
+ AND NOT SymTab.MethodExists(ct,
|
|
|
pn) THEN
|
|
|
SemError(201) END; .)
|
|
|
( "FORWARD" (. SymTab.MarkFwd;
|
|
|
@@ -473,7 +476,7 @@ PRODUCTIONS
|
|
|
t: SymTab.TypeIndex;
|
|
|
qv: QbeGen.QVal;
|
|
|
cls: INTEGER; .)
|
|
|
- = GetIdent<n> (. IF ~SymTab.Enter(n,
|
|
|
+ = GetIdent<n> (. IF NOT SymTab.Enter(n,
|
|
|
SymTab.KindConst) THEN
|
|
|
SemError(200) END; .)
|
|
|
"="
|
|
|
@@ -481,7 +484,7 @@ PRODUCTIONS
|
|
|
cls := SymTab.ClassOf(t);
|
|
|
IF cls = SymTab.ClStr THEN
|
|
|
SemError(230)
|
|
|
- ELSIF ~QbeGen.IsImm(qv) THEN
|
|
|
+ ELSIF NOT QbeGen.IsImm(qv) THEN
|
|
|
SemError(230) END;
|
|
|
QbeGen.DeclConst(n, qv, t); .) .
|
|
|
VarBlock
|
|
|
@@ -493,15 +496,15 @@ PRODUCTIONS
|
|
|
= VarIdents ":"
|
|
|
Type<t, FALSE> (. cls := SymTab.ClassOf(t);
|
|
|
IF (t # SymTab.InvalidType)
|
|
|
- & (cls # SymTab.ClInt)
|
|
|
- & (cls # SymTab.ClBool)
|
|
|
- & (cls # SymTab.ClChar)
|
|
|
- & (cls # SymTab.ClReal)
|
|
|
- & (cls # SymTab.ClArray)
|
|
|
- & (cls # SymTab.ClSet)
|
|
|
- & (cls # SymTab.ClRecord)
|
|
|
- & (cls # SymTab.ClPtr)
|
|
|
- & (cls # SymTab.ClLong) THEN
|
|
|
+ AND (cls # SymTab.ClInt)
|
|
|
+ AND (cls # SymTab.ClBool)
|
|
|
+ AND (cls # SymTab.ClChar)
|
|
|
+ AND (cls # SymTab.ClReal)
|
|
|
+ AND (cls # SymTab.ClArray)
|
|
|
+ AND (cls # SymTab.ClSet)
|
|
|
+ AND (cls # SymTab.ClRecord)
|
|
|
+ AND (cls # SymTab.ClPtr)
|
|
|
+ AND (cls # SymTab.ClLong) THEN
|
|
|
SemError(230) END;
|
|
|
IF QbeGen.LocFull() THEN
|
|
|
SemError(233) END;
|
|
|
@@ -513,17 +516,17 @@ PRODUCTIONS
|
|
|
END;
|
|
|
SymTab.FixPending(t); .) .
|
|
|
VarIdents (. VAR n: SymTab.Name; .)
|
|
|
- = GetIdent<n> (. IF ~SymTab.EnterPending(n,
|
|
|
+ = GetIdent<n> (. IF NOT SymTab.EnterPending(n,
|
|
|
SymTab.KindVar) THEN
|
|
|
SemError(200) END; .)
|
|
|
{ ","
|
|
|
- GetIdent<n> (. IF ~SymTab.EnterPending(n,
|
|
|
+ GetIdent<n> (. IF NOT SymTab.EnterPending(n,
|
|
|
SymTab.KindVar) THEN
|
|
|
SemError(200) END; .) } .
|
|
|
ParIdents<isV: BOOLEAN> (. VAR n: SymTab.Name; .)
|
|
|
- = GetIdent<n> (. IF ~SymTab.EnterParam(n, isV) THEN
|
|
|
+ = GetIdent<n> (. IF NOT SymTab.EnterParam(n, isV) THEN
|
|
|
SemError(200) END; .)
|
|
|
- { "," GetIdent<n> (. IF ~SymTab.EnterParam(n, isV) THEN
|
|
|
+ { "," GetIdent<n> (. IF NOT SymTab.EnterParam(n, isV) THEN
|
|
|
SemError(200) END; .) } .
|
|
|
(* Procedure headings enter scopes/params/result and buffer the
|
|
|
QBE header; bodies lower to functions (4.1, module level only).
|
|
|
@@ -532,9 +535,9 @@ PRODUCTIONS
|
|
|
ProcHeading<VAR pn: SymTab.Name> (. VAR t: SymTab.TypeIndex;
|
|
|
mg: QbeGen.QVal; .)
|
|
|
= "PROCEDURE"
|
|
|
- GetIdent<pn> (. IF ~SymTab.EnterProc(pn) THEN
|
|
|
- IF ~SymTab.ReenterProc(pn) THEN
|
|
|
- IF ~SymTab.ResumeProc(pn) THEN
|
|
|
+ GetIdent<pn> (. IF NOT SymTab.EnterProc(pn) THEN
|
|
|
+ IF NOT SymTab.ReenterProc(pn) THEN
|
|
|
+ IF NOT SymTab.ResumeProc(pn) THEN
|
|
|
SemError(200) END
|
|
|
END
|
|
|
END;
|
|
|
@@ -546,7 +549,7 @@ PRODUCTIONS
|
|
|
QbeGen.SetFuncRes(t);
|
|
|
IF (t #
|
|
|
SymTab.InvalidType)
|
|
|
- & ((SymTab.ClassOf(t)
|
|
|
+ AND ((SymTab.ClassOf(t)
|
|
|
= SymTab.ClArray)
|
|
|
OR (SymTab.ClassOf(t)
|
|
|
= SymTab.ClRecord)
|
|
|
@@ -571,7 +574,7 @@ PRODUCTIONS
|
|
|
addresses (no copy):
|
|
|
same representation as
|
|
|
VAR formals *)
|
|
|
- IF ~QbeGen.FuncParam(nm,
|
|
|
+ IF NOT QbeGen.FuncParam(nm,
|
|
|
isV
|
|
|
OR SymTab.IsOpenArray(t),
|
|
|
t) THEN
|
|
|
@@ -599,7 +602,7 @@ PRODUCTIONS
|
|
|
[ "BEGIN"
|
|
|
[ StatSeq ] ]
|
|
|
"END"
|
|
|
- GetIdent<m2> (. IF ~SymTab.Equal(pn, m2) THEN
|
|
|
+ GetIdent<m2> (. IF NOT SymTab.Equal(pn, m2) THEN
|
|
|
SemError(202) END; .) .
|
|
|
StatSeq
|
|
|
= Statement { ";" Statement } .
|
|
|
@@ -635,10 +638,10 @@ PRODUCTIONS
|
|
|
[ "," Expr<et2, qstep> ]
|
|
|
")" (. IF dt = SymTab.InvalidType THEN
|
|
|
ELSIF (dk # SymTab.KindVar)
|
|
|
- & (dk # SymTab.KindParam)
|
|
|
- & (dk # SymTab.KindField) THEN
|
|
|
+ AND (dk # SymTab.KindParam)
|
|
|
+ AND (dk # SymTab.KindField) THEN
|
|
|
SemError(210)
|
|
|
- ELSIF ~SymTab.IsIntFamily(dt) THEN
|
|
|
+ ELSIF NOT SymTab.IsIntFamily(dt) THEN
|
|
|
SemError(211)
|
|
|
ELSE
|
|
|
IF sfx
|
|
|
@@ -674,8 +677,8 @@ PRODUCTIONS
|
|
|
= "NEW" "(" Design<dt, dk, qd, qn, sfx> ")"
|
|
|
(. IF dt = SymTab.InvalidType THEN
|
|
|
ELSIF (dk # SymTab.KindVar)
|
|
|
- & (dk # SymTab.KindParam)
|
|
|
- & (dk # SymTab.KindField) THEN
|
|
|
+ AND (dk # SymTab.KindParam)
|
|
|
+ AND (dk # SymTab.KindField) THEN
|
|
|
SemError(210)
|
|
|
ELSIF SymTab.ClassOf(dt) #
|
|
|
SymTab.ClPtr THEN
|
|
|
@@ -703,8 +706,8 @@ PRODUCTIONS
|
|
|
= "DISPOSE" "(" Design<dt, dk, qd, qn, sfx> ")"
|
|
|
(. IF dt = SymTab.InvalidType THEN
|
|
|
ELSIF (dk # SymTab.KindVar)
|
|
|
- & (dk # SymTab.KindParam)
|
|
|
- & (dk # SymTab.KindField) THEN
|
|
|
+ AND (dk # SymTab.KindParam)
|
|
|
+ AND (dk # SymTab.KindField) THEN
|
|
|
SemError(210)
|
|
|
ELSIF SymTab.ClassOf(dt) #
|
|
|
SymTab.ClPtr THEN
|
|
|
@@ -747,7 +750,7 @@ PRODUCTIONS
|
|
|
(. IF dt = SymTab.InvalidType THEN
|
|
|
ELSIF (SymTab.ClassOf(dt) #
|
|
|
SymTab.ClRecord)
|
|
|
- & (SymTab.ClassOf(dt) #
|
|
|
+ AND (SymTab.ClassOf(dt) #
|
|
|
SymTab.ClClass) THEN
|
|
|
SemError(215)
|
|
|
ELSIF SymTab.PushRecord(dt) THEN
|
|
|
@@ -767,33 +770,33 @@ PRODUCTIONS
|
|
|
= Design<dt, dk, qd, qn, sfx>
|
|
|
( ":="
|
|
|
Expr<et, qe> (. IF (dt # SymTab.InvalidType)
|
|
|
- & (dk # SymTab.KindVar)
|
|
|
- & (dk # SymTab.KindParam)
|
|
|
- & (dk # SymTab.KindField) THEN
|
|
|
+ AND (dk # SymTab.KindVar)
|
|
|
+ AND (dk # SymTab.KindParam)
|
|
|
+ AND (dk # SymTab.KindField) THEN
|
|
|
SemError(210)
|
|
|
- ELSIF ~SymTab.Assignable(et,
|
|
|
+ ELSIF NOT SymTab.Assignable(et,
|
|
|
dt) THEN
|
|
|
SemError(210)
|
|
|
ELSIF (dt # SymTab.InvalidType)
|
|
|
- & (SymTab.ClassOf(dt) =
|
|
|
+ AND (SymTab.ClassOf(dt) =
|
|
|
SymTab.ClClass) THEN
|
|
|
SemError(230) END;
|
|
|
isR := (dt #
|
|
|
SymTab.InvalidType)
|
|
|
- & (SymTab.ClassOf(dt)
|
|
|
+ AND (SymTab.ClassOf(dt)
|
|
|
= SymTab.ClReal);
|
|
|
conv := isR
|
|
|
- & SymTab.IsIntFamily(et);
|
|
|
+ AND SymTab.IsIntFamily(et);
|
|
|
wconv := (dt #
|
|
|
SymTab.InvalidType)
|
|
|
- & SymTab.IsLongFamily(dt)
|
|
|
- & SymTab.IsIntFamily(et);
|
|
|
+ AND SymTab.IsLongFamily(dt)
|
|
|
+ AND SymTab.IsIntFamily(et);
|
|
|
IF ((dk = SymTab.KindVar)
|
|
|
OR (dk = SymTab.KindParam)
|
|
|
OR (dk = SymTab.KindField))
|
|
|
- & (dt # SymTab.InvalidType)
|
|
|
- & (et # SymTab.InvalidType)
|
|
|
- & (SymTab.ClassOf(dt) #
|
|
|
+ AND (dt # SymTab.InvalidType)
|
|
|
+ AND (et # SymTab.InvalidType)
|
|
|
+ AND (SymTab.ClassOf(dt) #
|
|
|
SymTab.ClClass) THEN
|
|
|
IF sfx
|
|
|
OR (dk = SymTab.KindField) THEN
|
|
|
@@ -858,7 +861,7 @@ PRODUCTIONS
|
|
|
here is 233 (was a bare syntax
|
|
|
error before 4.2) *)
|
|
|
(. IF (dk = SymTab.KindProc)
|
|
|
- & ~sfx THEN
|
|
|
+ AND NOT sfx THEN
|
|
|
res0 := SymTab.ProcRes(qn);
|
|
|
IF res0 #
|
|
|
SymTab.InvalidType THEN
|
|
|
@@ -907,7 +910,7 @@ PRODUCTIONS
|
|
|
SemError(233); ok := FALSE
|
|
|
END
|
|
|
END;
|
|
|
- IF ~ok THEN
|
|
|
+ IF NOT ok THEN
|
|
|
t := SymTab.InvalidType;
|
|
|
QbeGen.CopyOp("0", q)
|
|
|
ELSIF want THEN
|
|
|
@@ -939,31 +942,31 @@ PRODUCTIONS
|
|
|
OR (ft =
|
|
|
SymTab.InvalidType) THEN
|
|
|
ELSIF isV THEN
|
|
|
- IF ~QbeGen.AddrOfVal(qe,
|
|
|
+ IF NOT QbeGen.AddrOfVal(qe,
|
|
|
qa) THEN
|
|
|
SemError(233)
|
|
|
- ELSIF ~SymTab.VarParamOk(at,
|
|
|
+ ELSIF NOT SymTab.VarParamOk(at,
|
|
|
ft) THEN
|
|
|
SemError(233)
|
|
|
- ELSIF ~QbeGen.CallArg(qa,
|
|
|
+ ELSIF NOT QbeGen.CallArg(qa,
|
|
|
"l") THEN
|
|
|
SemError(233)
|
|
|
END
|
|
|
ELSE
|
|
|
- IF ~SymTab.Assignable(at,
|
|
|
+ IF NOT SymTab.Assignable(at,
|
|
|
ft) THEN
|
|
|
SemError(233)
|
|
|
ELSE
|
|
|
conv := (SymTab.ClassOf(
|
|
|
ft) = SymTab.ClReal)
|
|
|
- & SymTab.IsIntFamily(at);
|
|
|
+ AND SymTab.IsIntFamily(at);
|
|
|
IF conv THEN
|
|
|
QbeGen.ConvIR(qe, qt);
|
|
|
- IF ~QbeGen.CallArg(qt,
|
|
|
+ IF NOT QbeGen.CallArg(qt,
|
|
|
"d") THEN
|
|
|
SemError(233)
|
|
|
END
|
|
|
- ELSIF ~QbeGen.CallArg(qe,
|
|
|
+ ELSIF NOT QbeGen.CallArg(qe,
|
|
|
QbeGen.ArgClass(ft)) THEN
|
|
|
SemError(233)
|
|
|
END
|
|
|
@@ -974,7 +977,7 @@ PRODUCTIONS
|
|
|
QbeGen.QVal;
|
|
|
hasElse: BOOLEAN; .)
|
|
|
= "IF" (. hasElse := FALSE; .)
|
|
|
- Expr<t, q> (. IF ~SymTab.BoolCheck(t) THEN
|
|
|
+ Expr<t, q> (. IF NOT SymTab.BoolCheck(t) THEN
|
|
|
SemError(214) END;
|
|
|
QbeGen.NewLabel(lThen);
|
|
|
QbeGen.NewLabel(lElse);
|
|
|
@@ -984,7 +987,7 @@ PRODUCTIONS
|
|
|
"THEN" StatSeq (. QbeGen.Jmp(lEnd); .)
|
|
|
{ "ELSIF" (. QbeGen.EmitLabel(lElse);
|
|
|
QbeGen.NewLabel(lElse); .)
|
|
|
- Expr<t, q> (. IF ~SymTab.BoolCheck(t) THEN
|
|
|
+ Expr<t, q> (. IF NOT SymTab.BoolCheck(t) THEN
|
|
|
SemError(214) END;
|
|
|
QbeGen.NewLabel(lThen);
|
|
|
QbeGen.Jnz(q, lThen, lElse);
|
|
|
@@ -1005,7 +1008,7 @@ PRODUCTIONS
|
|
|
QbeGen.NewLabel(lBody);
|
|
|
QbeGen.NewLabel(lEnd);
|
|
|
QbeGen.EmitLabel(lTop); .)
|
|
|
- Expr<t, q> (. IF ~SymTab.BoolCheck(t) THEN
|
|
|
+ Expr<t, q> (. IF NOT SymTab.BoolCheck(t) THEN
|
|
|
SemError(214) END;
|
|
|
QbeGen.Jnz(q, lBody, lEnd);
|
|
|
QbeGen.EmitLabel(lBody); .)
|
|
|
@@ -1017,7 +1020,7 @@ PRODUCTIONS
|
|
|
QbeGen.NewLabel(lEnd);
|
|
|
QbeGen.EmitLabel(lTop); .)
|
|
|
StatSeq
|
|
|
- "UNTIL" Expr<t, q> (. IF ~SymTab.BoolCheck(t) THEN
|
|
|
+ "UNTIL" Expr<t, q> (. IF NOT SymTab.BoolCheck(t) THEN
|
|
|
SemError(214) END;
|
|
|
QbeGen.Jnz(q, lEnd, lTop);
|
|
|
QbeGen.EmitLabel(lEnd); .) .
|
|
|
@@ -1044,29 +1047,29 @@ PRODUCTIONS
|
|
|
ok: BOOLEAN; .)
|
|
|
= "FOR" (. by := 1; .)
|
|
|
GetIdent<lv> (. ok := SymTab.Lookup(lv);
|
|
|
- IF ~ok THEN
|
|
|
+ IF NOT ok THEN
|
|
|
SemError(201)
|
|
|
ELSIF (SymTab.SymKind(lv) #
|
|
|
SymTab.KindVar)
|
|
|
- & (SymTab.SymKind(lv) #
|
|
|
+ AND (SymTab.SymKind(lv) #
|
|
|
SymTab.KindParam) THEN
|
|
|
SemError(220); ok := FALSE
|
|
|
- ELSIF ~SymTab.IsIntFamily(
|
|
|
+ ELSIF NOT SymTab.IsIntFamily(
|
|
|
SymTab.SymType(lv)) THEN
|
|
|
SemError(220); ok := FALSE
|
|
|
END; .)
|
|
|
- ":=" Expr<tlo, qlo> (. IF ~SymTab.IsIntFamily(tlo) THEN
|
|
|
+ ":=" Expr<tlo, qlo> (. IF NOT SymTab.IsIntFamily(tlo) THEN
|
|
|
SemError(220); ok := FALSE
|
|
|
END; .)
|
|
|
- "TO" Expr<thi, qhi> (. IF ~SymTab.IsIntFamily(thi) THEN
|
|
|
+ "TO" Expr<thi, qhi> (. IF NOT SymTab.IsIntFamily(thi) THEN
|
|
|
SemError(220); ok := FALSE
|
|
|
END; .)
|
|
|
[ "BY" Expr<tby, qby> (. IF (tby #
|
|
|
SymTab.InvalidType)
|
|
|
- & ~SymTab.IsIntFamily(tby) THEN
|
|
|
+ AND NOT SymTab.IsIntFamily(tby) THEN
|
|
|
SemError(220); ok := FALSE
|
|
|
END;
|
|
|
- IF ~SymTab.ConstInt(qby, by) THEN
|
|
|
+ IF NOT SymTab.ConstInt(qby, by) THEN
|
|
|
SemError(230); by := 1
|
|
|
ELSIF by = 0 THEN
|
|
|
SemError(220); by := 1
|
|
|
@@ -1128,21 +1131,21 @@ PRODUCTIONS
|
|
|
lNext: QbeGen.QVal; .)
|
|
|
= Expr<t2, q2> (. IF (t2 #
|
|
|
SymTab.InvalidType)
|
|
|
- & (tsel #
|
|
|
+ AND (tsel #
|
|
|
SymTab.InvalidType)
|
|
|
- & ((SymTab.ClassOf(t2) =
|
|
|
+ AND ((SymTab.ClassOf(t2) =
|
|
|
SymTab.ClSet)
|
|
|
OR (SymTab.ClassOf(tsel) =
|
|
|
SymTab.ClSet)) THEN
|
|
|
SemError(230)
|
|
|
ELSIF (t2 #
|
|
|
SymTab.InvalidType)
|
|
|
- & (tsel #
|
|
|
+ AND (tsel #
|
|
|
SymTab.InvalidType)
|
|
|
- & ~SymTab.EqCheck(t2,
|
|
|
+ AND NOT SymTab.EqCheck(t2,
|
|
|
tsel) THEN
|
|
|
SemError(213) END;
|
|
|
- IF ~QbeGen.IsImm(q2) THEN
|
|
|
+ IF NOT QbeGen.IsImm(q2) THEN
|
|
|
SemError(230);
|
|
|
QbeGen.CopyOp("0", q2)
|
|
|
END;
|
|
|
@@ -1153,12 +1156,12 @@ PRODUCTIONS
|
|
|
QbeGen.EmitLabel(lNext); .)
|
|
|
[ ".." Expr<t3, q3> (. IF (t3 #
|
|
|
SymTab.InvalidType)
|
|
|
- & (tsel #
|
|
|
+ AND (tsel #
|
|
|
SymTab.InvalidType)
|
|
|
- & ~SymTab.EqCheck(t3,
|
|
|
+ AND NOT SymTab.EqCheck(t3,
|
|
|
tsel) THEN
|
|
|
SemError(213) END;
|
|
|
- IF ~QbeGen.IsImm(q3) THEN
|
|
|
+ IF NOT QbeGen.IsImm(q3) THEN
|
|
|
SemError(230);
|
|
|
QbeGen.CopyOp("0", q3)
|
|
|
END;
|
|
|
@@ -1179,10 +1182,10 @@ PRODUCTIONS
|
|
|
= "RETURN" (. hadE := FALSE; .)
|
|
|
[ Expr<t, q> (. hadE := TRUE; .) ]
|
|
|
(. conv := FALSE;
|
|
|
- IF ~SymTab.InProc() THEN
|
|
|
+ IF NOT SymTab.InProc() THEN
|
|
|
SemError(232)
|
|
|
ELSE res := SymTab.CurRes();
|
|
|
- IF ~hadE THEN
|
|
|
+ IF NOT hadE THEN
|
|
|
IF res #
|
|
|
SymTab.InvalidType THEN
|
|
|
SemError(232)
|
|
|
@@ -1193,13 +1196,13 @@ PRODUCTIONS
|
|
|
SymTab.InvalidType)
|
|
|
OR (t #
|
|
|
SymTab.InvalidType)
|
|
|
- & ~SymTab.Assignable(t,
|
|
|
+ AND NOT SymTab.Assignable(t,
|
|
|
res) THEN
|
|
|
SemError(232)
|
|
|
ELSE
|
|
|
conv := (SymTab.ClassOf(
|
|
|
res) = SymTab.ClReal)
|
|
|
- & SymTab.IsIntFamily(t);
|
|
|
+ AND SymTab.IsIntFamily(t);
|
|
|
IF conv THEN
|
|
|
QbeGen.ConvIR(q, qt);
|
|
|
QbeGen.EmitRet(qt, TRUE)
|
|
|
@@ -1226,7 +1229,7 @@ PRODUCTIONS
|
|
|
qb: QbeGen.QVal; .)
|
|
|
= GetIdent<n> (. QbeGen.CopyOp(n, qn);
|
|
|
sfx := FALSE;
|
|
|
- IF ~SymTab.Lookup(n) THEN
|
|
|
+ IF NOT SymTab.Lookup(n) THEN
|
|
|
SemError(201);
|
|
|
t := SymTab.InvalidType;
|
|
|
k := -1;
|
|
|
@@ -1251,7 +1254,7 @@ PRODUCTIONS
|
|
|
SymTab.ClassOf(t);
|
|
|
IF (t #
|
|
|
SymTab.InvalidType)
|
|
|
- & ((cls = SymTab.ClInt)
|
|
|
+ AND ((cls = SymTab.ClInt)
|
|
|
OR (cls
|
|
|
= SymTab.ClChar)
|
|
|
OR (cls
|
|
|
@@ -1333,8 +1336,8 @@ PRODUCTIONS
|
|
|
SymTab.ClArray THEN
|
|
|
SemError(217);
|
|
|
t := SymTab.InvalidType
|
|
|
- ELSIF ~SymTab.IsIntFamily(it)
|
|
|
- & (SymTab.ClassOf(it) #
|
|
|
+ ELSIF NOT SymTab.IsIntFamily(it)
|
|
|
+ AND (SymTab.ClassOf(it) #
|
|
|
SymTab.ClChar) THEN
|
|
|
SemError(218);
|
|
|
t := SymTab.InvalidType
|
|
|
@@ -1369,8 +1372,8 @@ PRODUCTIONS
|
|
|
SymTab.ClArray THEN
|
|
|
SemError(217);
|
|
|
t := SymTab.InvalidType
|
|
|
- ELSIF ~SymTab.IsIntFamily(it)
|
|
|
- & (SymTab.ClassOf(it) #
|
|
|
+ ELSIF NOT SymTab.IsIntFamily(it)
|
|
|
+ AND (SymTab.ClassOf(it) #
|
|
|
SymTab.ClChar) THEN
|
|
|
SemError(218);
|
|
|
t := SymTab.InvalidType
|
|
|
@@ -1404,7 +1407,7 @@ PRODUCTIONS
|
|
|
(. IF k = SymTab.KindModule THEN
|
|
|
(* qualified L.x: materialize
|
|
|
the export, then load it *)
|
|
|
- IF ~SymTab.MaterializeAlias(n,
|
|
|
+ IF NOT SymTab.MaterializeAlias(n,
|
|
|
fn, mal) THEN
|
|
|
SemError(201);
|
|
|
t := SymTab.InvalidType;
|
|
|
@@ -1418,7 +1421,7 @@ PRODUCTIONS
|
|
|
(* call: ArgList supplies
|
|
|
the value *)
|
|
|
QbeGen.CopyOp("0", q)
|
|
|
- ELSIF ~QbeGen.LoadDesignator(
|
|
|
+ ELSIF NOT QbeGen.LoadDesignator(
|
|
|
mal, t, k, q) THEN
|
|
|
SemError(230);
|
|
|
QbeGen.CopyOp("0", q)
|
|
|
@@ -1427,11 +1430,11 @@ PRODUCTIONS
|
|
|
ELSIF t = SymTab.InvalidType THEN
|
|
|
ELSIF (SymTab.ClassOf(t) #
|
|
|
SymTab.ClRecord)
|
|
|
- & (SymTab.ClassOf(t) #
|
|
|
+ AND (SymTab.ClassOf(t) #
|
|
|
SymTab.ClClass) THEN
|
|
|
SemError(215);
|
|
|
t := SymTab.InvalidType
|
|
|
- ELSIF ~SymTab.FieldExists(t,
|
|
|
+ ELSIF NOT SymTab.FieldExists(t,
|
|
|
fn) THEN
|
|
|
SemError(216);
|
|
|
t := SymTab.InvalidType
|
|
|
@@ -1502,8 +1505,8 @@ PRODUCTIONS
|
|
|
t := SymTab.BoolType(); QbeGen.CopyOp("0", q)
|
|
|
ELSIF (SymTab.ClassOf(t) = SymTab.ClPtr)
|
|
|
OR (SymTab.ClassOf(t2) = SymTab.ClPtr) THEN
|
|
|
- IF (op # SymTab.OpEq) & (op # SymTab.OpNeq1)
|
|
|
- & (op # SymTab.OpNeq2) THEN
|
|
|
+ IF (op # SymTab.OpEq) AND (op # SymTab.OpNeq1)
|
|
|
+ AND (op # SymTab.OpNeq2) THEN
|
|
|
SemError(213); t := SymTab.InvalidType;
|
|
|
QbeGen.CopyOp("0", q)
|
|
|
ELSE
|
|
|
@@ -1563,7 +1566,7 @@ PRODUCTIONS
|
|
|
END; .)
|
|
|
{ AddOp<op> Term<t2, q2>
|
|
|
(. IF op = SymTab.OpOr THEN
|
|
|
- IF SymTab.BoolCheck(t) & SymTab.BoolCheck(t2) THEN
|
|
|
+ IF SymTab.BoolCheck(t) AND SymTab.BoolCheck(t2) THEN
|
|
|
t := SymTab.BoolType()
|
|
|
ELSE SemError(212); t := SymTab.InvalidType END;
|
|
|
IF t # SymTab.InvalidType THEN
|
|
|
@@ -1572,9 +1575,9 @@ PRODUCTIONS
|
|
|
QbeGen.CopyOp(qt, q)
|
|
|
ELSE QbeGen.CopyOp("0", q)
|
|
|
END
|
|
|
- ELSIF (t # SymTab.InvalidType) & (t2 # SymTab.InvalidType)
|
|
|
- & (SymTab.ClassOf(t) = SymTab.ClSet)
|
|
|
- & (SymTab.ClassOf(t2) = SymTab.ClSet) THEN
|
|
|
+ ELSIF (t # SymTab.InvalidType) AND (t2 # SymTab.InvalidType)
|
|
|
+ AND (SymTab.ClassOf(t) = SymTab.ClSet)
|
|
|
+ AND (SymTab.ClassOf(t2) = SymTab.ClSet) THEN
|
|
|
lw := SymTab.SetWords(t); rw := SymTab.SetWords(t2);
|
|
|
mw := lw;
|
|
|
IF rw > mw THEN mw := rw END;
|
|
|
@@ -1632,7 +1635,7 @@ PRODUCTIONS
|
|
|
lw, rw, mw: CARDINAL; .)
|
|
|
= Fact<t, q> { MulOp<op> Fact<t2, q2>
|
|
|
(. IF op = SymTab.OpAnd THEN
|
|
|
- IF SymTab.BoolCheck(t) & SymTab.BoolCheck(t2) THEN
|
|
|
+ IF SymTab.BoolCheck(t) AND SymTab.BoolCheck(t2) THEN
|
|
|
t := SymTab.BoolType()
|
|
|
ELSE SemError(212); t := SymTab.InvalidType END;
|
|
|
IF t # SymTab.InvalidType THEN
|
|
|
@@ -1641,9 +1644,9 @@ PRODUCTIONS
|
|
|
QbeGen.CopyOp(qt, q)
|
|
|
ELSE QbeGen.CopyOp("0", q)
|
|
|
END
|
|
|
- ELSIF (t # SymTab.InvalidType) & (t2 # SymTab.InvalidType)
|
|
|
- & (SymTab.ClassOf(t) = SymTab.ClSet)
|
|
|
- & (SymTab.ClassOf(t2) = SymTab.ClSet) THEN
|
|
|
+ ELSIF (t # SymTab.InvalidType) AND (t2 # SymTab.InvalidType)
|
|
|
+ AND (SymTab.ClassOf(t) = SymTab.ClSet)
|
|
|
+ AND (SymTab.ClassOf(t2) = SymTab.ClSet) THEN
|
|
|
lw := SymTab.SetWords(t); rw := SymTab.SetWords(t2);
|
|
|
mw := lw;
|
|
|
IF rw > mw THEN mw := rw END;
|
|
|
@@ -1760,9 +1763,9 @@ PRODUCTIONS
|
|
|
QbeGen.NoteAddr(q, qa)
|
|
|
END
|
|
|
ELSIF sfx
|
|
|
- & (dt #
|
|
|
+ AND (dt #
|
|
|
SymTab.InvalidType)
|
|
|
- & ((SymTab.ClassOf(dt) =
|
|
|
+ AND ((SymTab.ClassOf(dt) =
|
|
|
SymTab.ClArray)
|
|
|
OR (SymTab.ClassOf(dt) =
|
|
|
SymTab.ClSet)
|
|
|
@@ -1773,15 +1776,15 @@ PRODUCTIONS
|
|
|
[ ArgList<qn, TRUE, ct2, q2, called>
|
|
|
(. t := ct2;
|
|
|
QbeGen.CopyOp(q2, q); .) ]
|
|
|
- (. IF ~called
|
|
|
- & (dk = SymTab.KindProc) THEN
|
|
|
+ (. IF NOT called
|
|
|
+ AND (dk = SymTab.KindProc) THEN
|
|
|
(* bare zero-arg function
|
|
|
call (parentheses may be
|
|
|
omitted); a proper or
|
|
|
parameterised proc here
|
|
|
is 230 *)
|
|
|
IF (SymTab.ProcNPar(qn) = 0)
|
|
|
- & (SymTab.ProcRes(qn) #
|
|
|
+ AND (SymTab.ProcRes(qn) #
|
|
|
SymTab.InvalidType) THEN
|
|
|
QbeGen.Mangled(qn,
|
|
|
SymTab.ProcUid(qn), qm0);
|
|
|
@@ -1850,25 +1853,25 @@ PRODUCTIONS
|
|
|
END; .)
|
|
|
| "CHR" "(" Expr<et, q> ")"
|
|
|
(. IF (et # SymTab.InvalidType)
|
|
|
- & ~SymTab.IsIntFamily(et) THEN
|
|
|
+ AND NOT SymTab.IsIntFamily(et) THEN
|
|
|
SemError(211) END;
|
|
|
t := SymTab.CharType(); .)
|
|
|
| "ORD" "(" Expr<et, q> ")"
|
|
|
(. IF et # SymTab.InvalidType THEN
|
|
|
IF (SymTab.ClassOf(et) #
|
|
|
SymTab.ClChar)
|
|
|
- & (SymTab.ClassOf(et) #
|
|
|
+ AND (SymTab.ClassOf(et) #
|
|
|
SymTab.ClBool)
|
|
|
- & (SymTab.ClassOf(et) #
|
|
|
+ AND (SymTab.ClassOf(et) #
|
|
|
SymTab.ClEnum)
|
|
|
- & ~SymTab.IsIntFamily(et) THEN
|
|
|
+ AND NOT SymTab.IsIntFamily(et) THEN
|
|
|
SemError(211) END
|
|
|
END;
|
|
|
t := SymTab.IntType(); .)
|
|
|
| "ABS" "(" Expr<et, q> ")"
|
|
|
(. IF (et # SymTab.InvalidType)
|
|
|
- & ~SymTab.IsIntFamily(et)
|
|
|
- & (SymTab.ClassOf(et) #
|
|
|
+ AND NOT SymTab.IsIntFamily(et)
|
|
|
+ AND (SymTab.ClassOf(et) #
|
|
|
SymTab.ClReal) THEN
|
|
|
SemError(211)
|
|
|
ELSE QbeGen.AbsQ(q, qa,
|
|
|
@@ -1877,7 +1880,7 @@ PRODUCTIONS
|
|
|
END;
|
|
|
t := et; .)
|
|
|
| "VAL" "(" GetIdent<vn> "," Expr<et, q> ")"
|
|
|
- (. IF ~SymTab.Lookup(vn) THEN
|
|
|
+ (. IF NOT SymTab.Lookup(vn) THEN
|
|
|
SemError(201);
|
|
|
t := SymTab.InvalidType
|
|
|
ELSE vt := SymTab.SymType(vn);
|
|
|
@@ -1896,7 +1899,7 @@ PRODUCTIONS
|
|
|
SymTab.ClBool)
|
|
|
OR (c1 =
|
|
|
SymTab.ClEnum))
|
|
|
- & ((c2 = SymTab.ClInt)
|
|
|
+ AND ((c2 = SymTab.ClInt)
|
|
|
OR (c2 =
|
|
|
SymTab.ClChar)
|
|
|
OR (c2 =
|
|
|
@@ -1905,10 +1908,10 @@ PRODUCTIONS
|
|
|
SymTab.ClEnum)) THEN
|
|
|
t := vt
|
|
|
ELSIF (c1 = SymTab.ClPtr)
|
|
|
- & (c2 = SymTab.ClPtr) THEN
|
|
|
+ AND (c2 = SymTab.ClPtr) THEN
|
|
|
t := vt
|
|
|
ELSIF (c1 = SymTab.ClReal)
|
|
|
- & (c2 = SymTab.ClReal) THEN
|
|
|
+ AND (c2 = SymTab.ClReal) THEN
|
|
|
t := vt
|
|
|
ELSE SemError(230);
|
|
|
t := SymTab.InvalidType
|
|
|
@@ -1949,7 +1952,7 @@ PRODUCTIONS
|
|
|
(. lo := SymTab.SetBaseLo(st);
|
|
|
span := SymTab.SetCount(st);
|
|
|
IF (et = SymTab.InvalidType)
|
|
|
- OR (hasR & (et2 =
|
|
|
+ OR (hasR AND (et2 =
|
|
|
SymTab.InvalidType)) THEN
|
|
|
ELSE cl :=
|
|
|
SymTab.ClassOf(et);
|
|
|
@@ -1959,21 +1962,21 @@ PRODUCTIONS
|
|
|
ELSE cl2 := SymTab.ClInt
|
|
|
END;
|
|
|
IF ((cl # SymTab.ClInt)
|
|
|
- & (cl # SymTab.ClChar)
|
|
|
- & (cl # SymTab.ClBool))
|
|
|
- OR (hasR &
|
|
|
+ AND (cl # SymTab.ClChar)
|
|
|
+ AND (cl # SymTab.ClBool))
|
|
|
+ OR (hasR AND
|
|
|
((cl2
|
|
|
# SymTab.ClInt)
|
|
|
- & (cl2
|
|
|
+ AND (cl2
|
|
|
# SymTab.ClChar)
|
|
|
- & (cl2
|
|
|
+ AND (cl2
|
|
|
# SymTab.ClBool))) THEN
|
|
|
SemError(222)
|
|
|
ELSIF hasR
|
|
|
- & SymTab.ConstInt(qe, v)
|
|
|
- & SymTab.ConstInt(q2,
|
|
|
+ AND SymTab.ConstInt(qe, v)
|
|
|
+ AND SymTab.ConstInt(q2,
|
|
|
v2)
|
|
|
- & ((v < lo)
|
|
|
+ AND ((v < lo)
|
|
|
OR (v2 < lo)
|
|
|
OR (v >= lo +
|
|
|
VAL(INTEGER, span))
|
|
|
@@ -1986,7 +1989,7 @@ PRODUCTIONS
|
|
|
lo, span)
|
|
|
ELSIF SymTab.ConstInt(qe,
|
|
|
v)
|
|
|
- & ((v < lo)
|
|
|
+ AND ((v < lo)
|
|
|
OR (v >= lo +
|
|
|
VAL(INTEGER,
|
|
|
span))) THEN
|