diff --git a/src/generic/Dsw/Mod/CompilerCPfrontMain.cp b/src/generic/Dsw/Mod/CompilerCPfrontMain.cp
index b5d4ec95769d797b5321f8efd3230b811f15b4c1..bf5bb1b69fe186c12fb0be1219f6378b9a762f68 100644 (file)
MODULE DswCompilerCPfrontMain;
IMPORT Kernel, HostFiles, Files, Console, Strings, DswDocuments,
- DevCPM, DevCPT, DevCPB, DevCPP, DevCPE, DevCPH, DevCPV := CPfrontCPV, DevCPG := CPfrontCPG;
+ DevCPM, DevCPT, DevCPB, DevCPP, DevCPE, DevCPH, DevCPV := CPfrontCPV, DevCPG := CPfrontCPG,
+ DevCPR;
CONST
(* compiler options: *)
checks = 0; allchecks = 1; assert = 2; obj = 3; ref = 4; allref = 5;
srcpos = 6; reallib = 7; signatures = 8;
+ (* pVarInd = 14; bigEnd = 15; *) ctime = 16;
mainprog = 20; include0 = 21;
hint = 29; oberon = 30; errorTrap = 31;
- (* defopt = {checks, assert, obj, ref, allref, srcpos, signatures}; *)
- defopt = {checks, assert, obj};
+ (* defopt = {checks, assert, obj, ref, allref, srcpos, signatures, ctime}; *)
+ defopt = {checks, assert, obj, ctime};
+
+ version = "0.3";
emulong = 0;
defopt2 = {};
next: Elem
END;
+ Def = POINTER TO RECORD
+ name: DevCPT.Name;
+ val: BOOLEAN;
+ next: Def
+ END;
+
VAR
u: Elem;
+ d: Def;
PROCEDURE GetPath (IN path: ARRAY OF CHAR; OUT dir, name: Files.Name);
VAR i, j, len: INTEGER;
END
END Check;
+ PROCEDURE Define (IN name: DevCPT.Name; val: BOOLEAN);
+ VAR def: Def;
+ BEGIN
+ NEW(def); def.name := name$; def.val := val; def.next := d; d := def
+ END Define;
+
BEGIN
outsym := ""; outcode := "";
opts := defopt; opts2 := defopt2; found := FALSE;
INCL(opts2, emulong)
ELSIF p = "-no-long-calls" THEN
EXCL(opts2, emulong)
+ ELSIF p = "-version" THEN
+ Console.WriteStr(version); Console.WriteLn;
+ Kernel.Quit(0)
+ ELSIF p = "-use-time" THEN
+ INCL(opts, ctime)
+ ELSIF p = "-no-use-time" THEN
+ EXCL(opts, ctime)
+ ELSIF p = "-define+" THEN
+ Check; Define(Kernel.argv[i]$, TRUE); INC(i)
+ ELSIF p = "-define-" THEN
+ Check; Define(Kernel.argv[i]$, FALSE); INC(i)
ELSE
Console.WriteStr("unknown option ");
Console.WriteStr(p); Console.WriteLn;
END InitOptions;
PROCEDURE Module (source: POINTER TO ARRAY OF CHAR; m: Elem; OUT error: BOOLEAN);
- VAR ext, new: BOOLEAN; p: DevCPT.Node;
+ VAR ext, new: BOOLEAN; p: DevCPT.Node; def: Def;
BEGIN
DevCPG.opt := {}; (* !!! *)
DevCPM.Init(source);
IF oberon IN m.opts THEN INCL(DevCPM.options, DevCPM.oberon) END;
IF mainprog IN m.opts THEN INCL(DevCPG.opt, DevCPG.mainprog) END;
IF include0 IN m.opts THEN INCL(DevCPG.opt, DevCPG.include0) END;
+ IF ctime IN m.opts THEN INCL(DevCPG.opt, DevCPG.ctime) END;
DevCPT.Init(m.opts);
(* DevCPB.typSize := DevCPV.TypeSize; *)
DevCPB.typSize := DevCPV.TypSize;
DevCPT.processor := DevCPV.processor;
+ DevCPR.Init;
+ def := d;
+ WHILE def # NIL DO
+ DevCPR.Set(def.name, def.val);
+ def := def.next
+ END;
DevCPP.Module(p);
+ DevCPR.Check;
IF DevCPM.noerr THEN
IF DevCPT.libName # "" THEN EXCL(m.opts, obj) END;
DevCPV.Init(m.opts); DevCPV.AdrAndSize(DevCPT.topScope); DevCPT.Export(ext, new);
IF obj IN m.opts THEN
DevCPG.CloseFiles
END;
+ DevCPR.Close;
DevCPT.Close;
error := ~DevCPM.noerr;
IF error THEN