[fpc-devel] Local procedures as procedural parameter
Jonas Maebe
jonas at zeus.ugent.be
Wed Mar 16 22:08:20 CET 2005
On 16 Mar 2005, at 21:46, Peter Vreman wrote:
>> Then you can do it just as well on ppc and other processors, but the
>> point of the trick was to avoid having to do this. Implementing this
>> sort of hacks will complicate the code generator (I'm not even
>> immediately sure how it would be implemented).
>
> This is a not possible. It is incompatible with Delphi calling
> conventions
> and not possible with register calling conventions.
No, that's not true.
> Also take into account
> that modes are per unit. And other units (like the RTL) are not in
> gpc/macpas mode and don't expect the extra parameter and do not remove
> it
> from the stack.
The idea was not to push it in the first place if it's nil. The problem
is at the caller side: if that parameter is not nil, that means the
procvar is a local parameter and it must be pushed (or loaded into a
parameter register) when calling the procvar. If it's nil, then it
means the procvar is a global procedure and it must not be pushed
(idem).
> Also generating code at runtime is a no-go for me. It is heavily CPU
> and
> OS dependent.
No code would have to be generated, what would be required is in case
of MacPas mode (and only for code compiled in MacPas mode) the
insertion of a comparison with nil of a parameter and depending on that
push it or not.
> Note: Also thinking with things like "On x86" is the wrong way for
> current
> FPC. It should be possible to support things (without hacks) on all
> supported CPUs.
That's why I mentioned x86, because afaik it's the only one where the
callee removes the parameters from the stack instead of the caller.
Jonas
More information about the fpc-devel
mailing list