Skip to content

Commit

Permalink
There's an objection to fatalizing jumping into a construct.
Browse files Browse the repository at this point in the history
This reverts commit 84b32f5.
This reverts commit d30393a.

We need more debate on this one; either we should undeprecate it,
or settle on an end-of-life version.
  • Loading branch information
Abigail committed Jan 16, 2017
1 parent 37398dc commit dc6e8de
Show file tree
Hide file tree
Showing 5 changed files with 6 additions and 31 deletions.
2 changes: 2 additions & 0 deletions handy.h
Original file line number Diff line number Diff line change
Expand Up @@ -2475,6 +2475,8 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe
shortcut macro defined without -DPERL_CORE. Neither codesearch.google.com nor
CPAN::Unpack show any users outside the core. */
#ifdef PERL_CORE
# define deprecate(s) Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED), \
"Use of " s " is deprecated")
# define deprecate_disappears_in(when,message) \
Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED), \
message ", and will disappear in Perl " when)
Expand Down
26 changes: 0 additions & 26 deletions pod/perldeprecation.pod
Original file line number Diff line number Diff line change
Expand Up @@ -271,32 +271,6 @@ will be a fatal error in Perl 5.28.

You should be using two different symbols instead.



=head3 Use of "goto" to jump into a construct.

Use of C<goto> to jump from an outer scope into an inner scope was
deprecated in Perl 5.12, and it will be a fatal error in Perl 5.28.

This means, you should not write constructs like:

$x = 1;
while ($x) {
$foo = 1;
LABEL:
$bar = 1;
}
goto LABEL;

This will jump into the block belonging to C<while>. Not only has
been this a cause of subtle bugs in the past, it's generally
considered to lead to hard to understand programs.

This means, soon it's not possible anymore to write
L<Duff's device|https://www.lysator.liu.se/c/duffs-device.html> in pure Perl.
But you never wanted to do this anyway.


=head3 ${^ENCODING} is no longer supported.

The special variable C<${^ENCODING}> was used to implement
Expand Down
4 changes: 2 additions & 2 deletions pod/perldiag.pod
Original file line number Diff line number Diff line change
Expand Up @@ -7026,12 +7026,12 @@ middle of an iteration causes Perl to see a freed value.
operator. Since C<split> always tries to match the pattern
repeatedly, the C</g> has no effect.

=item Use of "goto" to jump into a construct is deprecated. Its use will be fatal in Perl 5.28
=item Use of "goto" to jump into a construct is deprecated

(D deprecated) Using C<goto> to jump from an outer scope into an inner
scope is deprecated and should be avoided.

This was deprecated in Perl 5.12, and will be a fatal error in Perl 5.28.
This was deprecated in Perl 5.12.

=item Use of inherited AUTOLOAD for non-method %s() is deprecated. This will be fatal in Perl 5.28

Expand Down
3 changes: 1 addition & 2 deletions pod/perlfunc.pod
Original file line number Diff line number Diff line change
Expand Up @@ -3285,8 +3285,7 @@ Also, unlike most named operators, this has the same precedence as
assignment.

Use of C<goto LABEL> or C<goto EXPR> to jump into a construct is
deprecated and will issue a warning; it will be a fatal error in
Perl 5.28. Even then, it may not be used to
deprecated and will issue a warning. Even then, it may not be used to
go into any construct that requires initialization, such as a
subroutine or a C<foreach> loop. It also can't be used to go into a
construct that is optimized away.
Expand Down
2 changes: 1 addition & 1 deletion pp_ctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3019,7 +3019,7 @@ PP(pp_goto)
if (*enterops && enterops[1]) {
I32 i = enterops[1]->op_type == OP_ENTER && in_block ? 2 : 1;
if (enterops[i])
deprecate_fatal_in("5.28", "Use of \"goto\" to jump into a construct is deprecated. Its use will be fatal in Perl 5.28");
deprecate("\"goto\" to jump into a construct");
}

/* pop unwanted frames */
Expand Down

0 comments on commit dc6e8de

Please sign in to comment.