<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-AU link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'>Hi,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'>There is a subtle difference between the old rule and the new undocumented Project Oberon compiler extension. In the old rule ARRAY OF SYSTEM.BYTE matched ANY data type. In the new extension, the actual parameter must have the same number of bytes as the formal parameter. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'>Regards,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'>Chris Burrows<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'>CFB Software<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'><a href="https://www.astrobe.com">https://www.astrobe.com</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri","sans-serif"'> Oberon [mailto:oberon-bounces@lists.inf.ethz.ch] <b>On Behalf Of </b>Jörg<br><b>Sent:</b> Saturday, 7 December 2019 7:10 PM<br><b>To:</b> ETH Oberon and related systems<br><b>Subject:</b> Re: [Oberon] Fwd: Re: Re: Question about Oberon semantics of VAR parameters<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Hi<o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>A little bit of history:<o:p></o:p></p></div><div><p class=MsoNormal>In the previous language report, chapter 12 explained that rule<o:p></o:p></p><div><p class=MsoNormal><a href="https://inf.ethz.ch/personal/wirth/Oberon/Oberon.Report.pdf">https://inf.ethz.ch/personal/wirth/Oberon/Oberon.Report.pdf </a><o:p></o:p></p></div><div><p class=MsoNormal>You had to use SYSTEM.BYTE to enable it.<o:p></o:p></p></div><div><p class=MsoNormal>SYSTEM.BYTE disappeared, but the (now undocumented) rule is still there.<o:p></o:p></p><div><p class=MsoNormal><br>Br<o:p></o:p></p></div><div><p class=MsoNormal>Jörg<o:p></o:p></p><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal style='margin-bottom:12.0pt'>Am 07.12.2019 um 09:32 schrieb Jörg <<a href="mailto:joerg.straube@iaeth.ch">joerg.straube@iaeth.ch</a>>:<o:p></o:p></p></blockquote></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><span style='font-family:"Tahoma","sans-serif"'></span>In procedure ORP.Parameter() you find:<br><br><o:p></o:p></p><pre>ELSIF (par.type.form = ORB.Array) & (par.type.base = ORB.byteType) & (par.type.len >= 0) & (par.type.size = x.type.size) THEN<o:p></o:p></pre><pre style='-webkit-text-size-adjust: auto;word-wrap: break-word'>Jörg<o:p></o:p></pre><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal style='margin-bottom:12.0pt'>Am 07.12.2019 um 09:21 schrieb Jörg <<a href="mailto:joerg.straube@iaeth.ch">joerg.straube@iaeth.ch</a>>:<o:p></o:p></p></blockquote></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><span style='font-family:"Tahoma","sans-serif"'></span>ARRAY N OF BYTE is compatible to anything as long as the size matches.<o:p></o:p></p><div><p class=MsoNormal>This comes in handy for low level programming.<br>Jörg<o:p></o:p></p><div><p class=MsoNormal><br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><p class=MsoNormal style='margin-bottom:12.0pt'>Am 07.12.2019 um 08:51 schrieb Luca Boasso <<a href="mailto:luke.boasso@gmail.com">luke.boasso@gmail.com</a>>:<o:p></o:p></p></blockquote></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><span style='font-family:"Tahoma","sans-serif"'></span><o:p></o:p></p><div><p class=MsoNormal>To the best of my knowledge, that undocumented feature is the only (intentionally) missing type rule in my document.<o:p></o:p></p><div><p class=MsoNormal>The type system described is a slight superset of the one implement by the original Oberon-07 RISC compiler.<o:p></o:p></p></div><div><p class=MsoNormal>Let me know if you need clarifications on the document. <o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>oberonc implements all the rules of that document. You can find comments in the source code referring to the type rules, for example in <a href="https://github.com/lboasso/oberonc/blob/master/src/OJP.Mod" target="_blank">https://github.com/lboasso/oberonc/blob/master/src/OJP.Mod</a> at line 216:<o:p></o:p></p></div><div><pre>  (* Type Rule A, B *)<o:p></o:p></pre><pre>  PROCEDURE EqualTypes(t0, t1: OJB.Type): BOOLEAN;<o:p></o:p></pre><pre>  BEGIN<o:p></o:p></pre><p class=MsoNormal><o:p> </o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Fri, Dec 6, 2019, 19:05 <a href="mailto:rochus.keller@bluewin.ch" target="_blank">rochus.keller@bluewin.ch</a> <<a href="mailto:rochus.keller@bluewin.ch" target="_blank">rochus.keller@bluewin.ch</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal>Ok, I see, thank you very much.<br><br> It should be officially documented in any case. I'm implementing my first true Oberon validator by just following the language report word by word and got tons of inexplicable errors because of rule simply not describe there (neither in the tutorial). If I want to be able to successfully parse the Oberon System (which seems like an obligatory test case) then I consequently have to implement these specialities as well. I'm not very good at reading Oberon source code (yet) though, so I would prefer a precise and complete language report. Your document is already more precise, as it seems.<br><br>Best<br>R.<br><br>_______________________________<br>From: Luca Boasso<br>Sent on: Sat, 07 Dec 2019 03:02:01 +0100<br>To: <a href="mailto:rochus.keller@bluewin.ch" target="_blank">rochus.keller@bluewin.ch</a><br>Cc: <br>Subject: Re: [Oberon] Fwd: Re: Re: Question about Oberon semantics of VAR parameters<br><br>Those particular examples exploit an undocumented loophole in the type system that simplify the writing of lower lever functions. I left that out of my document.<br><br><br>See ORP.Parameter:<br>ELSIF (par.type.form = ORB.Array) & (par.type.base = ORB.byteType) & <br>          (par.type.len >= 0) & (par.type.size = x.type.size) THEN<br>        ORG.VarParam(x, par.type)<br><br><br><br><br>On Fri, Dec 6, 2019, 17:45 <a href="mailto:rochus.keller@bluewin.ch" target="_blank">rochus.keller@bluewin.ch</a> <<a href="mailto:rochus.keller@bluewin.ch" target="_blank">rochus.keller@bluewin.ch</a>> wrote:<br><br>This is a very helpful document indeed, thank you very much. <br><br>But as it seems it doesn't explain my originally intended examples, e.g FileDir.Mod line 61 or Files.Mod line 104 (the first reported one was unfortunately my mishap, sorry).<br><br>Best<br>R.<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" target="_blank">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><o:p></o:p></p></blockquote></div><p class=MsoNormal>--<br><a href="mailto:Oberon@lists.inf.ethz.ch">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">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><o:p></o:p></p></div></blockquote></div></div></blockquote></div></blockquote></div></div></div></div></div></body></html>