Diego Sardina dsar at eml.cc
Tue Nov 1 18:11:52 CET 2022

On Mon, Oct 31, 2022, at 10:23 PM, thutt at harp-project.com wrote:
> Joerg writes:
>  > I can only guess what SYSTEM.PTR and SYSTEM.ADDRESS are; I assume
>  > these are TYPEs with special compatibility rules. As those are not
>  > defined in Oberon but by your compiler, please consult your
>  > compiler’s manual for details.
> SYSTEM.PTR is a generic pointer type.  It can be assigned any other
> pointer type, and is most often (in my experience) used to accept
> generic pointers as a procedure parameter.   There are uses of
> SYSTEM.PTR in Fonts.Mod (to gain access to font data loaded in a
> system block of memory), Display.Mod (to allocate system blocks of
> memory for display patterns), and in Types.Mod (to gain access to
> internal information about a pointer's type at runtime).
> I don't know have any information about implementation of

On Tue, Nov 1, 2022, at 2:59 PM, Артур Ефимов wrote:
> SYSTEM.PTR is a pointer type, managed by the garbage collector,
> and SYSTEM.ADDRESS is an INTEGER. It is not managed by the
> garbage collector.

SYSTEM.ADDRESS isn't defined in Oberon. It was used in Modula-2 for dealing with addresses, compatible with all pointers types and the CARDINAL type.


However Wirth in Oberon just uses LONGINT as address type. Some Oberon implementations (not Oberon-2 ones) added back SYSTEM.ADDRESS from Modula-2, such as Ulm Oberon with the same rules of Modula-2.

In Oberon-2 SYSTEM.ADDRESS was reintroduced under the name SYSTEM.PTR with compatibility with all pointer types but integers. So except for the compatibility with integers, they are conceptually *the same*.

More interesting is how to achieve the same with Oberon using just LONGINT:

(* Oberon / Oberon-07 *)
  VAR myobj: MyType;
  myobj := SYSTEM.VAL(MyType, obj);
END Foo;


(* Oberon-2 *)
  VAR myobj: MyType;
  myobj := SYSTEM.VAL(MyType, obj);
END Foo;


In my opinion the presence of SYSTEM.ADDRESS / SYSTEM.PTR is more convenient. It's also more clear what is going to be passed.

Diego Sardina

More information about the Oberon mailing list