[fpc-devel] Local procedures as procedural parameter
Marco van de Voort
marcov at stack.nl
Mon Mar 14 10:34:21 CET 2005
> On Mon, 14 Mar 2005, Jonas Maebe wrote:
> > to a regular procedural variable). You can only pass it as parameter to
> > procedures declared with an ISO-style procedure/function parameter, and since
> > its scope is limited to somefun, somefun will always be active when you can
> > do so.
> But the compiler can never guarantee this ?
> It seems to me that the following is perfectly valid code :
> StoredF : Function (x : real) : real
This is not allowed. Only TP style is allowed with VAR, so
var stored : TSomeFunc;
> When compiling this, there is no way the compiler can determine whether
> f (or storedf) will be a local procedure or a global one. To solve this,
> it would mean that each procedure variable would have to consist of 2
> things; A pointer and a type indicator.
No, they are simply two procvar types, and variables (properties/fields etc)
of the new type are not allowed, only params.
> >> 2. I see no difference whatsoever between typ_fun and iso_fun, except
> >> the use of an extra type, which, in my opinion, does not change
> >> anything to the usage or code of these functions. If one is allowed,
> >> the other should be allowed as well.
> > Well, it currently isn't in either our compiler or in Delphi. You cannot
> > declare a function type inside a parameter list for now. Maybe this was even
> > done on purpose to avoid clashes with ISO-style procedure parameters.
> Yes, but why would one be allowed and the other not ?
TP/BP was all about speed and footprint. The kind of solutions we
use now with compiler modi and several kinds of procvars was simply to
expensive at the time I think.
More information about the fpc-devel