DEADSOFTWARE

Port, TODO
[bbcp.git] / Trurl-based / Dev0 / Mod / Compiler.txt
1 MODULE Dev0Compiler;
3 (* THIS IS TEXT COPY OF Compiler.odc *)
4 (* DO NOT EDIT *)
6 (*
7 A. V. Shiryaev, 2012.10
9 Based on DevCompiler
10 *)
12 IMPORT Files, Console, Kernel, Strings,
13 DevCPM := Dev0CPM, DevCPT:= Dev0CPT, DevCPB := Dev0CPB, DevCPP := Dev0CPP,
14 DevCPE := Dev0CPE, DevCPV := Dev0CPV486;
16 CONST
17 (* compiler options: *)
18 checks = 0; allchecks = 1; assert = 2; obj = 3; ref = 4; allref = 5; srcpos = 6; reallib = 7; signatures = 8;
19 hint = 29; oberon = 30; errorTrap = 31;
20 defopt = {checks, assert, obj, ref, allref, srcpos, signatures};
22 PROCEDURE WriteInt (x: INTEGER);
23 VAR s: ARRAY 16 OF CHAR;
24 BEGIN
25 Strings.IntToString(x, s);
26 Console.WriteStr(s)
27 END WriteInt;
29 PROCEDURE Module (source: Files.Reader; opt: SET; VAR error: BOOLEAN);
30 VAR ext, new: BOOLEAN; p: DevCPT.Node;
31 i: INTEGER;
32 BEGIN
33 DevCPM.Init(source);
34 (* IF found THEN INCL(DevCPM.options, DevCPM.comAware) END; *)
35 IF errorTrap IN opt THEN INCL(DevCPM.options, DevCPM.trap) END;
36 IF oberon IN opt THEN INCL(DevCPM.options, DevCPM.oberon) END;
37 DevCPT.Init(opt);
38 DevCPB.typSize := DevCPV.TypeSize;
39 DevCPT.processor := DevCPV.processor;
40 DevCPP.Module(p);
41 IF DevCPM.noerr THEN
42 IF DevCPT.libName # "" THEN EXCL(opt, obj) END;
43 (*
44 IF errorTrap IN opt THEN DevCPDump.DumpTree(p) END;
45 *)
46 DevCPV.Init(opt); DevCPV.Allocate; DevCPT.Export(ext, new);
47 IF DevCPM.noerr & (obj IN opt) THEN
48 DevCPV.Module(p)
49 END;
50 DevCPV.Close
51 END;
52 IF DevCPM.noerr & (new OR ext) THEN DevCPM.RegisterNewSym
53 ELSE DevCPM.DeleteNewSym
54 END;
55 DevCPT.Close;
56 error := ~DevCPM.noerr;
57 DevCPM.Close;
58 p := NIL;
59 Kernel.FastCollect;
60 IF error THEN
61 IF DevCPM.errors = 1 THEN
62 Console.WriteStr("one error detected")
63 ELSE
64 WriteInt(DevCPM.errors); Console.WriteStr(" errors detected")
65 END;
66 Console.WriteLn;
67 i := 0;
68 WHILE i < DevCPM.errors DO
69 Console.WriteStr(" pos = "); WriteInt(DevCPM.errPos[i]); Console.WriteStr(" err = ");
70 WriteInt(DevCPM.errNo[i]); Console.WriteLn;
71 INC(i)
72 END
73 ELSE
74 Console.WriteStr(" "); WriteInt(DevCPE.pc); Console.WriteStr(" "); WriteInt(DevCPE.dsize)
75 END;
76 Console.WriteLn
77 END Module;
79 PROCEDURE Do (IN path, name: ARRAY OF CHAR; opt: SET);
80 VAR loc: Files.Locator;
81 f: Files.File; r: Files.Reader; error: BOOLEAN;
82 BEGIN
83 loc := Files.dir.This(path);
84 IF loc # NIL THEN
85 f := Files.dir.Old(loc, name$, FALSE);
86 IF f # NIL THEN
87 r := f.NewReader(NIL);
88 Module(r, opt, error);
89 IF error THEN Console.WriteStr("error(s)"); Console.WriteLn END;
90 f.Close
91 ELSE
92 Console.WriteStr("file not found: ");
93 Console.WriteStr(path); Console.WriteStr(" "); Console.WriteStr(name); Console.WriteLn
94 END
95 ELSE
96 Console.WriteStr("path not found: ");
97 Console.WriteStr(path); Console.WriteLn
98 END
99 END Do;
101 PROCEDURE Compile* (IN path, name: ARRAY OF CHAR);
102 BEGIN
103 Console.WriteStr("compiling ");
104 Console.WriteStr(path); Console.WriteStr(" "); Console.WriteStr(name);
105 Console.WriteLn;
106 Do(path, name, defopt)
107 END Compile;
109 PROCEDURE CompileOpt* (IN path, name: ARRAY OF CHAR; IN opt: ARRAY OF CHAR);
110 VAR loc: Files.Locator;
111 f: Files.File; r: Files.Reader; error: BOOLEAN; i: INTEGER; opts: SET;
112 BEGIN
113 i := 0; opts := defopt;
114 WHILE opt[i] # 0X DO
115 IF opt[i] = "-" THEN
116 IF srcpos IN opts THEN EXCL(opts, srcpos)
117 ELSIF allref IN opts THEN EXCL(opts, allref)
118 ELSIF ref IN opts THEN EXCL(opts, ref)
119 ELSE EXCL(opts, obj)
120 END
121 ELSIF opt[i] = "!" THEN
122 IF assert IN opts THEN EXCL(opts, assert)
123 ELSE EXCL(opts, checks)
124 END
125 ELSIF opt[i] = "+" THEN INCL(opts, allchecks)
126 ELSIF opt[i] = "?" THEN INCL(opts, hint)
127 ELSIF opt[i] = "@" THEN INCL(opts, errorTrap)
128 ELSIF opt[i] = "$" THEN INCL(opts, oberon)
129 END;
130 INC(i)
131 END;
133 Console.WriteStr("compiling ");
134 Console.WriteStr(path); Console.WriteStr(" "); Console.WriteStr(name);
135 IF opt # "" THEN Console.WriteStr(" "); Console.WriteStr(opt); END;
136 Console.WriteLn;
137 Do(path, name, opts)
138 END CompileOpt;
140 END Dev0Compiler.