[Oberon] Question about Oberon semantics of VAR parameters

rochus.keller at bluewin.ch rochus.keller at bluewin.ch
Sat Dec 7 00:32:45 CET 2019

Can someone please explain to me why the following code in the module display of the Oberon system does not cause a compiler error.

On line 38 there is the statement "v.handle(v, M)" with "handle" being of procedure type "PROCEDURE (F: Frame; VAR M: FrameMsg);" with "FrameMsg = RECORD END;" and the actual parameter M has the following type:
ViewerMsg* = RECORD (Display.FrameMsg)
        id*: INTEGER;
        X*, Y*, W*, H*: INTEGER;
        state*: INTEGER

Since FrameMsg and ViewerMsg are not related and the formal and actual parameter M are not the same according to the Oberon-07 language report and "Programming in Oberon" (2004 edition) I would expect an error, but the compiler accepts it. This is just one of many similar examples. Do I completely misinterpret both documents or is the implemented one actually different from the specified language?


More information about the Oberon mailing list