There's an objection to fatalizing jumping into a construct.
authorAbigail <abigail@abigail.be>
Mon, 16 Jan 2017 10:44:30 +0000 (11:44 +0100)
committerAbigail <abigail@abigail.be>
Mon, 16 Jan 2017 18:18:17 +0000 (19:18 +0100)
This reverts commit 84b32f52b10f9912b40ef378cd0b01f4aff80630.
This reverts commit d30393aaade31b605724846a30a10dd1e96cd181.

We need more debate on this one; either we should undeprecate it,
or settle on an end-of-life version.

handy.h
pod/perldeprecation.pod
pod/perldiag.pod
pod/perlfunc.pod
pp_ctl.c

diff --git a/handy.h b/handy.h
index 4c39280..4d2f4bc 100644 (file)
--- a/handy.h
+++ b/handy.h
@@ -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)
index bb69f7f..d74a4fe 100644 (file)
@@ -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
index 67c5f95..afdcb73 100644 (file)
@@ -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
 
index 89b801b..1e32cca 100644 (file)
@@ -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.
index 27fe981..c657336 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -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 */