<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Andreas<br>
<br>
Although it is nice that it works like this, your code example
misses the point of the previous code: there are two different
variants coexisting of a singleton object (a module) with the
consequence that a type test or type guard on instances of the
"old" module emitted from a "new" module does not work any more. <br>
Eventually it is not a drama because no practically important
examples seem to exist. Moreover with some indirection on the type
descriptors it would be easy to solve. But for the sake of
purity....<br>
<br>
Kind regards<br>
Felix<br>
<br>
<br>
<br>
<br>
</div>
<blockquote
cite="mid:1382912096.555656.1479651538090@mail.yahoo.com"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<div style="color:#000; background-color:#fff;
font-family:Helvetica Neue, Helvetica, Arial, Lucida Grande,
sans-serif;font-size:13px">
<div id="yui_3_16_0_ym19_1_1479650735561_3060">Felix,</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr">below
is the output (under Experimental Oberon) of a modified set of
your modules A, B, and C (source code appended below).</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr">It
nicely shows that C.Delete selects the "right" module B, i.e.
either the "old B" (here called B*), or the "new B" (here
called B). The type descriptors and the code of module B*
(removed from module list) is still available in memory.</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr">All
type tests automatically select the "right" type descriptor
and the "old B" is only removed from memory when no more
references from the remaining modules exist.</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr">Andreas</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3846">COMMAND
SEQUENCE (see below for source code of A, B, and C):</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3847"><br
id="yui_3_16_0_ym19_1_1479650735561_3848">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3849">B.Insert
1 ... insert elemt from old B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3850">System.ShowModules
... B is the old B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3851">System.Free
B/f ... remove old B from module list, don't release
memorz</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3852">System.ShowModules
... B* is the old B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3853">B.Insert
2 ... new B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3854">System.ShowModules
... B* is the old B, B is the new B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3855">C.Delete
1 ... deletes the element created by the old B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3856">C.Delete
2 ... deletes the element created by the old B</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3856">C.Init
... clears the data structure rooted in A.root</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3856">Modules.Collect
... collects B* (no longer referenced)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3856">System.ShowModules
... module B* no longer in memory<br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3857"><br
id="yui_3_16_0_ym19_1_1479650735561_3858">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3859">GENERATED
OUTPUT:</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3860"><br
id="yui_3_16_0_ym19_1_1479650735561_3861">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3862">1)
B.Insert 1</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3863">insert
element from module B module descriptor at 000212C0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3864"><br
id="yui_3_16_0_ym19_1_1479650735561_3865">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3866">2)
System.ShowModules</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3867">B
000212C0 000213D0 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3868">A
00020F60 00020FDC 1</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3869">System
0001CB80 0001D320 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3870">...</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3871"><br
id="yui_3_16_0_ym19_1_1479650735561_3872">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3873">3)
System.Free B/f</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3874">B
unloading: removing from module list (references exist)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3875"><br
id="yui_3_16_0_ym19_1_1479650735561_3876">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3877">4)
System.ShowModules</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3878">*B
000212C0 000213D0 0 (removed from module list)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3879">A
00020F60 00020FDC 1</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3880">System
0001CB80 0001D320 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3881">...</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3882"><br
id="yui_3_16_0_ym19_1_1479650735561_3883">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3884">5)
B.Insert 2</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3885">insert
element from module B module descriptor at 00021800</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3886"><br
id="yui_3_16_0_ym19_1_1479650735561_3887">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3934">6)
System.ShowModules</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3935">B
00021800 00021910 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3936">*B
000212C0 000213D0 0 (removed from module list)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3937">A
00020F60 00020FDC 2</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3938">System
0001CB80 0001D320 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3939">...</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3940"><br
id="yui_3_16_0_ym19_1_1479650735561_3941">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3942">7)
C.Delete 1</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3943">type of
t is T from module B* module descriptor at 000212C0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3944"><br
id="yui_3_16_0_ym19_1_1479650735561_3945">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3946">8)
C.Delete 2</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3947">type of
t is T from module B module descriptor at 00021800</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3947"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3947">9)
C.Init + Modules.Collect + System.ShowModules</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_4085">B
00021800 00021910 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_4087">A
00020F60 00020FDC 2</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_4088">System
0001CB80 0001D320 0</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_4089">...</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3948"><br
id="yui_3_16_0_ym19_1_1479650735561_3949">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3948">----------------------------------------------------------------------------------------------------</div>
<div id="yui_3_16_0_ym19_1_1479650735561_3060" dir="ltr"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3503">MODULE
A; (*base module managing data structure of base type T*)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3504"> TYPE
T* = POINTER TO R;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3505"> P*
= PROCEDURE (t: T);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3506"> R*
= RECORD i*: INTEGER;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3507">
close*: P;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3508">
next: T</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3509"> END
;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3510"><br
id="yui_3_16_0_ym19_1_1479650735561_3511">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3512"> VAR
root*: T;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3513"><br
id="yui_3_16_0_ym19_1_1479650735561_3514">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3515">
PROCEDURE Find*(i: INTEGER): T;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3516"> VAR
t: T;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3517"> BEGIN
t := root;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3518">
WHILE (t # NIL) & (t.i # i) DO t := t.next END ;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3519">
RETURN t</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3520"> END
Find;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3521"><br
id="yui_3_16_0_ym19_1_1479650735561_3522">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3523">
PROCEDURE Insert*(t: T);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3524"> VAR
s: T;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3525"> BEGIN
s := Find(t.i);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3526"> IF
s = NIL THEN t.next := root; root := t END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3527"> END
Insert;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3528"><br
id="yui_3_16_0_ym19_1_1479650735561_3529">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3530">
PROCEDURE Delete*(i: INTEGER);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3531"> VAR
s, t: T;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3532"> BEGIN
t := root; s := t;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3533">
WHILE (t # NIL) & (t.i # i) DO s := t; t := t.next END ;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3534"> IF
t # NIL THEN t.close(t);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3535">
IF t = root THEN root := NIL ELSE s.next := t.next END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3536"> END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3537"> END
Delete;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3538"><br
id="yui_3_16_0_ym19_1_1479650735561_3539">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3540">
PROCEDURE Init*;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3541"> BEGIN
root := NIL</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3542"> END
Init;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3543"><br
id="yui_3_16_0_ym19_1_1479650735561_3544">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3545">BEGIN
Init</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3546">END A.</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3547"><br
id="yui_3_16_0_ym19_1_1479650735561_3548">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3547">--------------------------------------</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3547"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3547">
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3630">MODULE
B; (*client of A, defining extensions of A.T*)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3631">
IMPORT A, Modules, Texts, Oberon;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3632">
TYPE T* = POINTER TO R;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3633">
R* = RECORD (A.R) j: INTEGER END;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3634"><br
id="yui_3_16_0_ym19_1_1479650735561_3635">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3636"> VAR
M: Modules.Module;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3637">
W: Texts.Writer;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3638"><br
id="yui_3_16_0_ym19_1_1479650735561_3639">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3640">
PROCEDURE Close*(t: A.T);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3641">
VAR S: Texts.Scanner;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3642">
BEGIN</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3643">
IF (t IS T) & (M # NIL) THEN</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3644">
Texts.WriteString(W, "type of t is T from module ");
Texts.WriteString(W, M.name);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3645">
Texts.WriteString(W, " module descriptor at ");
Texts.WriteHex(W, ORD(M));</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3646">
Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3647">
END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3648"> END
Close;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3649"><br
id="yui_3_16_0_ym19_1_1479650735561_3650">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3651">
PROCEDURE Insert*;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3652">
VAR S: Texts.Scanner; t: T;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3653">
BEGIN Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos);
Texts.Scan(S);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3654">
IF S.class = Texts.Int THEN NEW(t); t.i := S.i; t.close :=
Close; A.Insert(t);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3655">
Texts.WriteString(W, "insert element from module ");
Texts.WriteString(W, M.name);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3656">
Texts.WriteString(W, " module descriptor at ");
Texts.WriteHex(W, ORD(M));</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3657">
Texts.WriteLn(W); Texts.Append(Oberon.Log, W.buf)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3658">
END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3659"> END
Insert;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3660"><br
id="yui_3_16_0_ym19_1_1479650735561_3661">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3662">
PROCEDURE Init*;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3663">
BEGIN</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3664"> END
Init;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3665"><br
id="yui_3_16_0_ym19_1_1479650735561_3666">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3667">BEGIN
Texts.OpenWriter(W); M := Modules.root;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3668">
WHILE (M # NIL) & (M.name # "B") DO M := M.next END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3669">END
B.</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3669"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3669">--------------------------------------<br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3669"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3669">
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3735">ODULE
C; (*tool module*)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3736">
IMPORT A, Texts, Oberon;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3737"><br
id="yui_3_16_0_ym19_1_1479650735561_3738">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3739">
VAR W: Texts.Writer;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3740"><br
id="yui_3_16_0_ym19_1_1479650735561_3741">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3742">
PROCEDURE Delete*;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3743">
VAR S: Texts.Scanner;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3744">
BEGIN Texts.OpenScanner(S, Oberon.Par.text,
Oberon.Par.pos); Texts.Scan(S);</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3745">
IF S.class = Texts.Int THEN A.Delete(S.i) END</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3746">
END Delete;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3747"><br
id="yui_3_16_0_ym19_1_1479650735561_3748">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3749">
PROCEDURE Init*;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3750">
BEGIN</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3751">
END Init;</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3752"><br
id="yui_3_16_0_ym19_1_1479650735561_3753">
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3754">BEGIN
Texts.OpenWriter(W)</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3755">END
C.</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3755"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3755">----------------</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3755"><br>
</div>
<div dir="ltr" id="yui_3_16_0_ym19_1_1479650735561_3755"><br>
</div>
</div>
</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">--
<a class="moz-txt-link-abbreviated" href="mailto:Oberon@lists.inf.ethz.ch">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems
<a class="moz-txt-link-freetext" href="https://lists.inf.ethz.ch/mailman/listinfo/oberon">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a>
</pre>
</blockquote>
<p><br>
</p>
</body>
</html>