[fpc-devel] Language semantic suggesion regarding static methods

Sven Barth pascaldragon at googlemail.com
Tue Oct 22 07:17:13 CEST 2019


Am 22.10.2019 um 01:19 schrieb J. Gareth Moreton:
> This is a very low-level semantic issue, but I'm not particularly keen 
> on how static methods are defined in classes. 

Not being "keen" on an existing, established syntax is not reason enough 
to change it.

Please also note (to probably annoy you further) that static methods 
inside records use exactly the same syntax. ;)

> *static function *StaticMethod: Integer;
>
> ****
>
> For backward compatibility, I would suggest keeping the 'static' 
> directive for class methods so existing code doesn't break, but maybe 
> mark it as deprecated.
>
This would introduce ambiguity especially with keeping the original syntax:

=== code begin ===

class function Foo: Integer; static;
function SomethingElse;

vs.

class function Foo: Integer;
static function SomethingElse;

=== code end ===

The static directive is - like all other directives - parsed by 
parse_proc_directives and it would consume the "static" token in both 
cases. Then it would need to check for the existance of a "function" or 
"procedure" token and pass that up it's call change. There are places in 
the parser where this is indeed done, but adjusting the parser that much 
for *no* gain is not something we like to do.

> P.S. If I've missed something obvious as to why static methods are 
> implemented using a directive, please educate me!
Simple: Delphi compatibility.

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20191022/2114e3ba/attachment.html>


More information about the fpc-devel mailing list