|
@@ -1,4 +1,4 @@
|
|
|
-MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
+MODULE ORB; (*NW 25.6.2014 / 1.12.2018 in Oberon-07*)
|
|
|
IMPORT Files, ORS;
|
|
|
(*Definition of data types Object and Type, which together form the data structure
|
|
|
called "symbol table". Contains procedures for creation of Objects, and for search:
|
|
@@ -224,9 +224,11 @@ MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
IF class = Typ THEN
|
|
|
t := obj.type; t.typobj := obj; Read(R, k); (*fixup bases of previously declared pointer types*)
|
|
|
WHILE k # 0 DO typtab[k].base := t; Read(R, k) END
|
|
|
- ELSIF class = Const THEN
|
|
|
- IF obj.type.form = Real THEN Files.ReadInt(R, obj.val) ELSE Files.ReadNum(R, obj.val) END
|
|
|
- ELSIF class = Var THEN Files.ReadNum(R, obj.val); obj.rdo := TRUE
|
|
|
+ ELSE
|
|
|
+ IF class = Const THEN
|
|
|
+ IF obj.type.form = Real THEN Files.ReadInt(R, obj.val) ELSE Files.ReadNum(R, obj.val) END
|
|
|
+ ELSIF class = Var THEN Files.ReadNum(R, obj.val); obj.rdo := TRUE
|
|
|
+ END
|
|
|
END ;
|
|
|
obj.next := thismod.dsc; thismod.dsc := obj; Read(R, class)
|
|
|
END ;
|
|
@@ -242,7 +244,7 @@ MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
END Write;
|
|
|
|
|
|
PROCEDURE OutType(VAR R: Files.Rider; t: Type);
|
|
|
- VAR obj, mod, fld: Object;
|
|
|
+ VAR obj, mod, fld, bot: Object;
|
|
|
|
|
|
PROCEDURE OutPar(VAR R: Files.Rider; par: Object; n: INTEGER);
|
|
|
VAR cl: INTEGER;
|
|
@@ -274,11 +276,11 @@ MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
IF t.form = Pointer THEN OutType(R, t.base)
|
|
|
ELSIF t.form = Array THEN OutType(R, t.base); Files.WriteNum(R, t.len); Files.WriteNum(R, t.size)
|
|
|
ELSIF t.form = Record THEN
|
|
|
- IF t.base # NIL THEN OutType(R, t.base) ELSE OutType(R, noType) END ;
|
|
|
+ IF t.base # NIL THEN OutType(R, t.base); bot := t.base.dsc ELSE OutType(R, noType); bot := NIL END ;
|
|
|
IF obj # NIL THEN Files.WriteNum(R, obj.exno) ELSE Write(R, 0) END ;
|
|
|
Files.WriteNum(R, t.nofpar); Files.WriteNum(R, t.size);
|
|
|
fld := t.dsc;
|
|
|
- WHILE fld # NIL DO (*fields*)
|
|
|
+ WHILE fld # bot DO (*fields*)
|
|
|
IF fld.expo THEN
|
|
|
Write(R, Fld); Files.WriteString(R, fld.name); OutType(R, fld.type); Files.WriteNum(R, fld.val) (*offset*)
|
|
|
ELSE FindHiddenPointers(R, fld.type, fld.val)
|
|
@@ -291,7 +293,7 @@ MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
IF (t.mno > 0) & (obj # NIL) THEN (*re-export, output name*)
|
|
|
mod := topScope.next;
|
|
|
WHILE (mod # NIL) & (mod.lev # t.mno) DO mod := mod.next END ;
|
|
|
- IF mod # NIL THEN Files.WriteString(R, mod.name); Files.WriteInt(R, mod.val); Files.WriteString(R, obj.name)
|
|
|
+ IF mod # NIL THEN Files.WriteString(R, mod(Module).orgname); Files.WriteInt(R, mod.val); Files.WriteString(R, obj.name)
|
|
|
ELSE ORS.Mark("re-export not found"); Write(R, 0)
|
|
|
END
|
|
|
ELSE Write(R, 0)
|