<div dir="ltr"><div dir="ltr">On Mon, Aug 8, 2022 at 5:23 AM Hans Klaver <<a href="mailto:hklaver@dds.nl">hklaver@dds.nl</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;"><div><span style="font-family:Menlo-Regular">I would rather have my Oberon-07 compiler to accept the following (my responsibility for the correct result): </span><br></div><div><font face="Menlo-Regular"><br></font></div><div><font face="Menlo-Regular"> VAR ch: CHAR;</font><br style="font-family:Menlo-Regular"><span style="font-family:Menlo-Regular"> ...</span><br style="font-family:Menlo-Regular"><span style="font-family:Menlo-Regular"> EXCL(SYSTEM.VAL(SET, ch), 5)   (* cast CHAR to SET and clear bit 5 *)</span><br style="font-family:Menlo-Regular"><span style="font-family:Menlo-Regular"> RETURN ch</span><br style="font-family:Menlo-Regular"><span style="font-family:Menlo-Regular"> ...</span></div><div><span style="font-family:Menlo-Regular"><br></span></div><div><span style="font-family:Menlo-Regular">My questions now are: </span><br style="font-family:Menlo-Regular"><span style="font-family:Menlo-Regular">- the behaviour regarding SYSTEM.VAL and EXCL of which of the two above mentioned compilers do you like best?</span><br style="font-family:Menlo-Regular"><span style="font-family:Menlo-Regular">- do you know an Oberon-07 compiler that could compile the last lines of code, and what do you think of it?</span></div><div><span style="font-family:Menlo-Regular"><br></span></div><div><span style="font-family:Menlo-Regular">In other words: what is your opinion about the desired behaviour of procedures SYSTEM.VAL and EXCL in an ideal Oberon-07 compiler?</span></div><div><div><br></div></div></div></blockquote><div><br></div><div><span style="font-family:Menlo-Regular">The Oberon-07 report states:</span><br></div><div><span style="font-family:Menlo-Regular"><br></span></div><div>EXCL(v, x) is equivalent to v := v - {x}.  (* where v is a variable not an expression *)<span style="font-family:Menlo-Regular"><br></span></div><div><br></div><div>Hence trying to write <span style="font-family:Menlo-Regular">EXCL(SYSTEM.VAL(SET, ch), 5) would be equivalent to writing:</span></div><div><span style="font-family:Menlo-Regular"><br></span></div><div><span style="font-family:Menlo-Regular">SYSTEM.VAL(SET, ch) := </span><span style="font-family:Menlo-Regular">SYSTEM.VAL(SET, ch) - {5} </span></div><div><span style="font-family:Menlo-Regular"><br></span></div><div><span style="font-family:Menlo-Regular">To me, that is as wrong as trying to write something like:</span></div><div><span style="font-family:Menlo-Regular"><br></span></div><div><span style="font-family:Menlo-Regular">ORD(ch) := ORD(ch) + 1</span></div><div><span style="font-family:Menlo-Regular"><br></span></div><div><span style="font-family:Menlo-Regular">or INC(ORD(ch))</span></div><div><br></div><div><font face="Menlo-Regular">As for the other part of your question I would hope that an implementation of SYSTEM.VAL would only perform a typecast if the size of the source and target were the same and would otherwise result in an error, or at the very least, a warning.</font></div><div><font face="Menlo-Regular"><br></font></div><div><font face="Menlo-Regular">Regards,</font></div><div><font face="Menlo-Regular">Chris Burrows</font></div><div><font face="Menlo-Regular">CFB Software</font></div><div><font face="Menlo-Regular"><a href="https://www.astrobe.com.RISC5">https://www.astrobe.com.RISC5</a></font></div><div><font face="Menlo-Regular"><br></font></div><div><font face="Menlo-Regular"><br></font></div><div> </div></div></div>