<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">I have a clear opinion on this: it is allowed. But we had a kind of similar case a few days back when I was attacked to allow b := -1;<div><br><div>Strictly speaking negative numbers do not exist in Oberon-07. </div><div>-1 is syntactically not a negative number but a SimpleExpression. You can see this as a kind of shortcut for 0 - 1.</div><div>Another proof of this view is, you can‘t write</div><div>CASE i OF</div><div>-2: </div><div>END;</div><div>as case labels can only be numbers, no (const) expression.</div><div><br></div><div>You can think of decimal values as signed and hex values as unsigned. If you look at Texts.WriteHex(W, -1) you‘ll see what I mean.</div><div><br></div><div>So, I see 9090909090H as a kind of (low level) way to fill up 32 bit. No notion of sign.</div><div><br></div><div>However, if you do calculations with these 32 bit you have to be aware that the calculation is done signed. And the comparisons are signed as well.</div><div><br></div><div>A side topic: this signed comparison thingy is the reason why a timer should better be coded like</div><div>  start := Kernel.Time();</div><div>  WHILE Kernel.Time() - start < delay DO END;</div><div><br></div><div>instead of the often found</div><div>  end := Kernel.Time() + delay;</div><div>  WHILE Kernel.Time() < end DO END;</div><div><br></div><div><div dir="ltr">br<br><div>Jörg</div></div><div dir="ltr"><br><blockquote type="cite">Am 25.04.2020 um 17:09 schrieb Arthur Yefimov <artur.efimov@gmail.com>:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr">While developing the compiler[1], we got a question<div>whether it is possible to write the following:<br><br><div>PROCEDURE DWord(n: INTEGER);<br>...<br>DWord (90909090H)<div><br>(where INTEGER is 32-bit).<br><br>Some compilers give an error (i.e. VOC), while this works in the</div><div>Project Oberon (2013) compiler. This would turn out to be quite convenient,</div><div>because the purpose of DWord in our code was to write 4 bytes to the file</div><div>given as INTEGER (using little-endian byte order).</div><div><br></div><div>DWord has the following implementation (module Generator[2]):</div><div><br>PROCEDURE DWord (n: INTEGER);<br>BEGIN<br>  Files.Write (r, CHR (n MOD 100H));<br>  Files.Write (r, CHR (n DIV 100H MOD 100H));<br>  Files.Write (r, CHR (n DIV 10000H MOD 100H));<br>  Files.Write (r, CHR (n DIV 1000000H))<br>END DWord;<br><br>The Oberon language report does not indicate that literal 90909090H</div><div>should be considered an error if INTEGER has 32 bits.</div><div><br>In this experiment, an online RISC emulator[3] was used.<br></div></div></div><div><br></div><div>References:</div><div>[1] <a href="https://github.com/kekcleader/oberon">https://github.com/kekcleader/oberon</a></div><div>[2] <a href="https://github.com/kekcleader/oberon/blob/master/Mod/Generator.Mod">https://github.com/kekcleader/oberon/blob/master/Mod/Generator.Mod</a></div><div>[3] <a href="http://schierlm.github.io/OberonEmulator/emu-wasm.html?image=FullDiskImage&width=1024&height=768">http://schierlm.github.io/OberonEmulator/emu-wasm.html?image=FullDiskImage&width=1024&height=768</a></div></div>
<span>--</span><br><span>Oberon@lists.inf.ethz.ch mailing list for ETH Oberon and related systems</span><br><span>https://lists.inf.ethz.ch/mailman/listinfo/oberon</span><br></div></blockquote></div></div></body></html>