[fpc-devel] Could FPC add the PLM "based" construct?

David W Noon david.w.noon at ntlworld.com
Mon Nov 16 13:52:04 CET 2009

On Mon, 16 Nov 2009 12:17:23 +0100, Micha Nelissen wrote about Re:
[fpc-devel] Could FPC add the PLM "based" construct?:

> Giuliano Colla wrote:
> > var
> >   Pfoo: pointer;
> >   foo: "any valid FPC Type" based Pfoo;
> > or
> >   foo: based Pfoo "any valid FPC type";
> > .....
> >   Pfoo: pointer;
> >   PBfoo: PByte absolute Pfoo;
> >   PIfoo: PInteger absolute Pfoo;
> I don't see the difference between "based" and absolute, except order
> of keywords?

The "based" keyword actually comes from PL/I, which Intel used as the
basis for PL/M.

The way based variables work is that they are always accessed via a
pointer, but the pointer is always type-neutral.  This means that the
access to the addressed storage location is determined not by the
pointer, but by the based variable (usually a structure).

This, in turn, means that one can declare multiple structures associated
with just a single pointer, each causing the compiler to generate code
specific to that structure.  The benefit is that there can be some
indicator that tells the application *at run time* what type of
structure the pointer is addressing, and the appropriate code to access
the data can be executed.

The synopsis is that an untyped pointer becomes like a hardware "base
register", which is the way pointers are meant to be.

Note that PL/I also has type-associated pointers, called a "handle" for
the associated type.  These behave like Pascal pointers, in that they
are rather safer, but far less flexible.

Dave  [RLU #314465]
david.w.noon at ntlworld.com (David W Noon)

More information about the fpc-devel mailing list