X-Git-Url: https://deadsoftware.ru/gitweb?p=cpc.git;a=blobdiff_plain;f=src%2Fgeneric%2FDsw%2FMod%2FCompilerCPfrontMain.cp;h=bf5bb1b69fe186c12fb0be1219f6378b9a762f68;hp=462e3fe7e146868b259308d9d9ba69cae120dc21;hb=47136c23919fb14957c4c59240bbc756f56d1942;hpb=2f6052eb7f36254f3f459addb169dd7c07786cf7 diff --git a/src/generic/Dsw/Mod/CompilerCPfrontMain.cp b/src/generic/Dsw/Mod/CompilerCPfrontMain.cp index 462e3fe..bf5bb1b 100644 --- a/src/generic/Dsw/Mod/CompilerCPfrontMain.cp +++ b/src/generic/Dsw/Mod/CompilerCPfrontMain.cp @@ -1,7 +1,8 @@ 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: *) @@ -28,8 +29,15 @@ MODULE DswCompilerCPfrontMain; 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; @@ -72,6 +80,12 @@ MODULE DswCompilerCPfrontMain; 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; @@ -177,6 +191,10 @@ MODULE DswCompilerCPfrontMain; 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; @@ -205,7 +223,7 @@ MODULE DswCompilerCPfrontMain; 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); @@ -226,7 +244,14 @@ MODULE DswCompilerCPfrontMain; (* 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); @@ -252,6 +277,7 @@ MODULE DswCompilerCPfrontMain; IF obj IN m.opts THEN DevCPG.CloseFiles END; + DevCPR.Close; DevCPT.Close; error := ~DevCPM.noerr; IF error THEN