|
@@ -11,13 +11,26 @@ DEFINITION MODULE Lower;
|
|
|
the tables below while the scope is open, so the walk can resolve names
|
|
the tables below while the scope is open, so the walk can resolve names
|
|
|
after SymTab has popped their scopes. *)
|
|
after SymTab has popped their scopes. *)
|
|
|
|
|
|
|
|
-IMPORT AST, SymTab;
|
|
|
|
|
|
|
+IMPORT AST, SymTab, QbeGen;
|
|
|
|
|
|
|
|
PROCEDURE CanLower (unit: AST.Node): BOOLEAN;
|
|
PROCEDURE CanLower (unit: AST.Node): BOOLEAN;
|
|
|
PROCEDURE LowerUnit (unit: AST.Node);
|
|
PROCEDURE LowerUnit (unit: AST.Node);
|
|
|
PROCEDURE LowerSession (units: ARRAY OF AST.Node; n: CARDINAL;
|
|
PROCEDURE LowerSession (units: ARRAY OF AST.Node; n: CARDINAL;
|
|
|
progName: ARRAY OF CHAR);
|
|
progName: ARRAY OF CHAR);
|
|
|
|
|
|
|
|
|
|
+(* The expression/statement/declaration walkers are mutually recursive.
|
|
|
|
|
+ gm2's link pass rejects FORWARD and V3 has no whole-module pass, so
|
|
|
|
|
+ they are declared here (definition-visible throughout the
|
|
|
|
|
+ implementation) instead of being forward-declared. *)
|
|
|
|
|
+PROCEDURE CanExpr (n: AST.Node): BOOLEAN;
|
|
|
|
|
+PROCEDURE CanDecls (seq: AST.Node): BOOLEAN;
|
|
|
|
|
+PROCEDURE CanProc (proc: AST.Node): BOOLEAN;
|
|
|
|
|
+PROCEDURE IsBuiltin (nm: ARRAY OF CHAR): BOOLEAN;
|
|
|
|
|
+PROCEDURE LowerExpr (n: AST.Node; VAR t: SymTab.TypeIndex;
|
|
|
|
|
+ VAR q: QbeGen.QVal);
|
|
|
|
|
+PROCEDURE LowerStmt (seq: AST.Node);
|
|
|
|
|
+PROCEDURE LowerDecls (seq: AST.Node);
|
|
|
|
|
+
|
|
|
PROCEDURE Reset;
|
|
PROCEDURE Reset;
|
|
|
PROCEDURE NoteVar (name: ARRAY OF CHAR; kind: INTEGER; t: SymTab.TypeIndex);
|
|
PROCEDURE NoteVar (name: ARRAY OF CHAR; kind: INTEGER; t: SymTab.TypeIndex);
|
|
|
PROCEDURE ScopeEnter;
|
|
PROCEDURE ScopeEnter;
|