|
@@ -1,4 +1,4 @@
|
|
|
-MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
+MODULE ORB; (*NW 25.6.2014 / 11.9.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:
|
|
@@ -22,9 +22,8 @@ MODULE ORB; (*NW 25.6.2014 / 19.4.2017 in Oberon-07*)
|
|
|
Type* = POINTER TO TypeDesc;
|
|
|
|
|
|
ObjDesc*= RECORD
|
|
|
- class*, exno*: BYTE;
|
|
|
+ class*, lev*, exno*: INTEGER;
|
|
|
expo*, rdo*: BOOLEAN; (*exported / read-only*)
|
|
|
- lev*: INTEGER;
|
|
|
next*, dsc*: Object;
|
|
|
type*: Type;
|
|
|
name*: ORS.Ident;
|
|
@@ -224,9 +223,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 ;
|
|
@@ -291,7 +292,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)
|