[Oberon] objects and jewels
Chris Burrows
chris at cfbsoftware.com
Wed Feb 20 12:37:46 CET 2013
> -----Original Message-----
> From: Frans-Pieter Vonck [mailto:fp at vonck.nl]
> Sent: Wednesday, 20 February 2013 5:42 AM
> To: Felix Friedrich
> Cc: ETH Oberon and related systems
> Subject: Re: [Oberon] objects and jewels
>
> > An attempt to call a non-initialized procedure variable usually
> > results in a trap.
> I'm curious, do you think this an code error that should be discovered by
> the compiler instead of generating a trap at runtime?
>
No. In most non-trivial cases it is not possible to determine, at the time a
program is compiled, if a procedure variable will have a valid value at
runtime whenever the procedure variable is called.
Consider the following examples. Apart from the first (which is both legal
and very useful), all only have a *possibility* that the procedure variable
is initialised, but it is not until runtime that you will know for sure.
---------------------------------
procVar := NIL;
---------------------------------
read(ch);
IF ch = 'U' THEN
outputProc := WriteToUART
ELSIF ch = 'L' THEN
outputProc := WriteToLCD
END;
---------------------------------
SomeOtherModule.SomeProcedure(procVar);
---------------------------------
procVar := someOtherProcVar;
---------------------------------
TYPE
ProcType = PROCEDURE(param1, param2: INTEGER);
ProcArray = ARRAY 10 OF ProcType;
VAR
p1, p2: ProcArray;
param1, param2: INTEGER;
...
...
p1 := p2;
p1[7](param1, param2);
---------------------------------
etc. etc.
Regards,
Chris Burrows
CFB Software
Astrobe v4.3 - Oberon for ARM Cortex-M3 Microcontrollers
http://www.astrobe.com
More information about the Oberon
mailing list