[fpc-devel] FPC 2.2.3 i386-darwin snapshot

Jonas Maebe jonas.maebe at elis.ugent.be
Sun Mar 8 19:28:30 CET 2009


On 08 Mar 2009, at 19:10, dmitry boyarintsev wrote:

> yeah, i've seen description of 'static' usage at the mailing list
> (subj: crashing _self parameter)
>
> This is a new feature for FPC, right? (catching up with new delphi  
> syntax?)

The static keyword been available forever in FPC (probably from before  
Delphi had it, we first used it in TP-style objects). What is new is  
making the behaviour of adding of "static" to class methods Delphi- 
compatible.

> a few questions about that:
> 1) 'static' methods are regular procedures/functions, but bound to a
> class rather than a unit?

A class method becomes indeed a regular function/procedure within the  
scope of a class if you add "static;".

> 2) it's possible to pass 'static'-methods as procedure variables?

Try it. I don't know. It will probably cause compiler errors because  
of type incompatibilities. If Delphi accepts it in some form, please  
file a bug report with a compilable example program. It should  
probably also be tested that class methods are not assignable to a  
"procedure of object"-style procvar (although I don't know whether  
that's normally possible for class methods).

> 3) only class methods can be 'static'? it's impossible to declare a
> method like:
> TMyObject = class
>  procedure MyMethod; static;
> end;

It's possible to declare this, but it doesn't change anything  
currently (a method without self-parameter would be indistinguishable  
from a class method without its hidden vmt-parameter -- which is also  
called self, for that matter). I don't see any use for this.

> 4) no Self parameter is available inside the 'static' method. (since
> it's regular procuder or function)

That's the whole point of using static.

> 5) 'static' keyword is used only if compiler -St switch specified?

Yes, or {$static on)

> 6) how are they actually named? because there're two kind of static
> methods available:
>
> TMyObject = class
>   class function MyClassProc;  // static class method

This is a regular class method.

>   class function MyClassVirtualProc; virtual; // virtual class
> method. can be overriden.
>   class function MyClassVirtualProc; dynamic; // dynamic class
> method. can be overriden too
>   class function MyClassProc; static; // "static" class method?

And this is a static class method.

> 7) 'static' keyword is available for both {$mode objfpc} and {$mode  
> delphi}

It's available in every mode, as long as you add -St or {$static on}


Jonas



More information about the fpc-devel mailing list