[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