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. -- Regards, Dave [RLU #314465] ======================================================================= david.w.n...@ntlworld.com (David W Noon) ======================================================================= _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel