<div dir="ltr"><div>Hi Andreas, <br></div><div><br></div><div>I made an additional comment about cyclic imports at  <a href="http://github.com/andreaspirklbauer/Oberon-test-module-aliases/issues/1" rel="noreferrer" target="_blank">http://github.com/andreaspirklbauer/Oberon-test-module-aliases/issues/1</a></div><div>Thank you for exploring alternative implementations!</div><div> I like the improvements in ORB12.Mod and ORB13.Mod, but they are still quite complex. I think that the use of local and global module tables is still simpler, in addition it should produce smaller symbol files: in FPGA Oberon re-exporting types will always lead to writing the module name (and key).</div><div>With a global module table the module name (and key) is only written once regardless of how many types we are re-exporting from that module.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Feb 16, 2020 at 3:19 PM Andreas Pirklbauer <<a href="mailto:andreas_pirklbauer@yahoo.com">andreas_pirklbauer@yahoo.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Luca,<br>
<br>
as per our (off-list) discussion, the following compilers now also compile your programs M0 and M7 below:<br>
<br>
1. Two-pass solution: (+25 lines more than FPGA Oberon)<br>
<br>
    <a href="http://github.com/andreaspirklbauer/Oberon-test-module-aliases/blob/master/Sources/ORB12.Mod" rel="noreferrer" target="_blank">http://github.com/andreaspirklbauer/Oberon-test-module-aliases/blob/master/Sources/ORB12.Mod</a><br>
<br>
    <a href="http://github.com/andreaspirklbauer/Oberon-test-module-aliases/blob/master/Sources/ORP12.Mod" rel="noreferrer" target="_blank">http://github.com/andreaspirklbauer/Oberon-test-module-aliases/blob/master/Sources/ORP12.Mod</a><br>
<br>
2. One-pass solution: (+40 lines more than FPGA Oberon)<br>
<br>
    <a href="http://github.com/andreaspirklbauer/Oberon-test-module-aliases/blob/master/Sources/ORB13.Mod" rel="noreferrer" target="_blank">http://github.com/andreaspirklbauer/Oberon-test-module-aliases/blob/master/Sources/ORB13.Mod</a><br>
<br>
Thanks for your great input on:<br>
<br>
    <a href="http://github.com/andreaspirklbauer/Oberon-test-module-aliases/issues/1" rel="noreferrer" target="_blank">http://github.com/andreaspirklbauer/Oberon-test-module-aliases/issues/1</a><br>
<br>
-ap<br>
<br>
<br>
   > oberonc <<a href="https://github.com/lboasso/oberonc" rel="noreferrer" target="_blank">https://github.com/lboasso/oberonc</a>> implements the module systems<br>
   > based on the ideas of  "On the Linearization of Graphs and Writing Symbol<br>
   >Files (1991)” <<a href="http://e-collection.library.ethz.ch/eserv/eth%3A3310/eth-3310-01.pdf" rel="noreferrer" target="_blank">http://e-collection.library.ethz.ch/eserv/eth%3A3310/eth-3310-01.pdf</a>><br>
   ><br>
   > The following example compiles and run:<br>
   ><br>
   > MODULE M0;<br>
   >   TYPE T0* = RECORD i: INTEGER END ;<br>
   > END M0.<br>
   ><br>
   > MODULE M7;<br>
   >  IMPORT Y := M0, M0, X := M0,<br>
   >     S1 := SYSTEM, S2 := SYSTEM;<br>
   > VAR a: Y.T0;<br>
   >     b: M0.T0;<br>
   >     c: X.T0;<br>
   >     i: INTEGER;<br>
   >  BEGIN<br>
   >    a := b;<br>
   >    c := a;<br>
   >    i := S1.VAL(INTEGER, {1});<br>
   >    i := S2.VAL(INTEGER, {2})<br>
  > END M7.<br>
--<br>
<a href="mailto:Oberon@lists.inf.ethz.ch" target="_blank">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems<br>
<a href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" rel="noreferrer" target="_blank">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><br>
</blockquote></div>