|
|
@@ -12,7 +12,7 @@ MODULE -->Grammar;
|
|
|
RefineSeen, RefineIsDef, RefineInst, RefineGen,
|
|
|
RefineActualCount, RefineActualGet;
|
|
|
IMPORT
|
|
|
- Strings, Storage, SYSTEM, FileIO, SymTab, QbeGen, AST, Lower;
|
|
|
+ Strings, Storage, SYSTEM, FileIO, SymTab, QbeGen, AST, Lower, Check;
|
|
|
(* and any others needed *)
|
|
|
|
|
|
TYPE
|
|
|
@@ -286,6 +286,7 @@ MODULE -->Grammar;
|
|
|
nFiles: CARDINAL;
|
|
|
f: CARDINAL;
|
|
|
bad: BOOLEAN;
|
|
|
+ doCheck: BOOLEAN; (* run the resolve/check pass (Check.Resolve) *)
|
|
|
|
|
|
(* generics (Increment 2): module name -> source path, def and impl *)
|
|
|
genDefNm: ARRAY [0 .. 31] OF ARRAY [0 .. 63] OF CHAR;
|
|
|
@@ -403,8 +404,10 @@ MODULE -->Grammar;
|
|
|
END;
|
|
|
AST.Init;
|
|
|
Lower.BeginUnit;
|
|
|
+ Check.BeginUnit;
|
|
|
Parse;
|
|
|
InstEnd;
|
|
|
+ IF doCheck THEN Check.Resolve(GetUnit()) END;
|
|
|
Lower.LowerUnitNow(GetUnit(), FALSE);
|
|
|
IF (src # FileIO.StdIn) & (src # FileIO.StdOut) THEN
|
|
|
FileIO.Close(src)
|
|
|
@@ -415,11 +418,16 @@ MODULE -->Grammar;
|
|
|
BEGIN
|
|
|
(* collect the session's source files (program module last) *)
|
|
|
nFiles := 0;
|
|
|
+ doCheck := TRUE;
|
|
|
LOOP
|
|
|
FileIO.NextParameter(sourceName);
|
|
|
IF (sourceName[0] = CHR(0)) OR (nFiles > HIGH(files)) THEN EXIT END;
|
|
|
- Strings.Assign(sourceName, files[nFiles]);
|
|
|
- INC(nFiles)
|
|
|
+ IF EqNm(sourceName, "-noresolve") THEN
|
|
|
+ doCheck := FALSE
|
|
|
+ ELSE
|
|
|
+ Strings.Assign(sourceName, files[nFiles]);
|
|
|
+ INC(nFiles)
|
|
|
+ END
|
|
|
END;
|
|
|
IF nFiles = 0 THEN
|
|
|
FileIO.WriteString(FileIO.StdOut, "No input file specified");
|
|
|
@@ -430,6 +438,7 @@ MODULE -->Grammar;
|
|
|
SymTab.Init;
|
|
|
QbeGen.OpenModule(progName);
|
|
|
Lower.BeginSession(progName);
|
|
|
+ Check.BeginSession(progName);
|
|
|
Error := StoreError;
|
|
|
|
|
|
(* parse each unit into the shared session *)
|
|
|
@@ -451,6 +460,7 @@ MODULE -->Grammar;
|
|
|
FileIO.WriteLn(FileIO.StdOut);
|
|
|
AST.Init;
|
|
|
Lower.BeginUnit;
|
|
|
+ Check.BeginUnit;
|
|
|
Parse;
|
|
|
UnitNameGet(uname);
|
|
|
IF RefineSeen() THEN
|
|
|
@@ -460,6 +470,7 @@ MODULE -->Grammar;
|
|
|
emit the abstract template *)
|
|
|
NoteGen(uname, UnitIsDefModule(), sourceName)
|
|
|
ELSE
|
|
|
+ IF doCheck THEN Check.Resolve(GetUnit()) END;
|
|
|
Lower.LowerUnitNow(GetUnit(), f = nFiles - 1)
|
|
|
END;
|
|
|
PrintListing;
|
|
|
@@ -478,6 +489,7 @@ MODULE -->Grammar;
|
|
|
END;
|
|
|
|
|
|
Lower.EndSession;
|
|
|
+ Check.EndSession;
|
|
|
|
|
|
IF bad OR NOT SymTab.HaveProgram()
|
|
|
THEN FileIO.WriteString(FileIO.StdOut, "Incorrect source")
|