[Oberon] Procedure variables and local procedures

chris chris at gcjd.org
Sat Sep 30 11:56:41 CEST 2017


On Sat, 30 Sep 2017 02:33:16 +0200, Jörg wrote:
>> VAR b : BYTE; i : INTEGER;
>>    i := 1000; b := i;
>> 
>> Does it trap for overflow?
> 
> The compiler does not generate a trap. It moves the lowest byte of i 
> to b. See first IF in ORG.Store.

Well, that is considered good style? In my opinion this kind of low 
level action should not be in the base language. If it's defined to be 
"least significant byte" that would be a bit better, but this could 
result in some surprise on different hardware.

Leaving this undefined in the language report makes the type BYTE an 
unusable feature for portable programs.

> Would you please explain „dynamic arrays“? Do you miss the low level 
> SYSTEM.NEW(p, n)?

I mean things like:

TYPE
  CharPtr = POINTER TO ARRAY OF CHAR;
VAR
  p : CharPtr;
BEGIN
  NEW(p, 1234);

There is nothing low level here. That is a widely used feature in ETH 
Oberon (System 3) or whatever you call it today. What is wrong with 
this? Even if I had to write a string librarary for UTF8 I would use 
this feature for the buffers internally and not linked list of fixed 
(compile time determined) sized pieces.

Greeting, chris



More information about the Oberon mailing list