Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.92k stars 548 forks source link

`__CLASS__` doesn't issue an experimental warning #22288

Closed ikegami closed 2 months ago

ikegami commented 3 months ago

tags: 5.40.0 core class experimental warnings

__CLASS__ doesn't issue an warning identifying it as experimental like class, field, ADJUST, etc do.

$ perl -v | grep 'This is'
This is perl 5, version 40, subversion 0 (v5.40.0) built for x86_64-linux-thread-multi

$ perl -e'use feature qw( class ); class Foo { }'
class is experimental at -e line 1.

$ perl -e'use feature qw( class ); field'
field is experimental at -e line 1.
Cannot 'field' outside of a 'class' at -e line 1.

$ perl -e'use feature qw( class ); ADJUST { }'
ADJUST is experimental at -e line 1.
Cannot 'ADJUST' outside of a 'class' at -e line 1.

$ perl -e'use feature qw( class ); __CLASS__'
Cannot use __CLASS__ outside of a method or field initializer expression at -e line 1.

It's moot since it can't be used outside of class and using class does warn, but it's inconsistent with other such keywords, and it could become important if class stops being experimental before __CLASS__.

rwp0 commented 3 months ago

I believe that's reasonable since method (and all other) keyword(s) also warns:

> perl -Mfeature=class -E "method {}"

method is experimental at -e line 1.

Cannot 'method' outside of a 'class' at -e line 1.

Searching I couldn't locate where to mark that as experimental, and that's not documented in:

https://github.com/Perl/perl5/blob/blead/pod/perldiag.pod

jkeenan commented 3 months ago

@leonerd, can you take a look at this ticket? Thanks.

rwp0 commented 2 months ago

I'm trying to address this very issue in https://github.com/Perl/perl5/pull/22387 as linked above.

It seems the place to look at was within the toke.c file where the other class-keywords are set to warn such as ADJUST.