In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/919f76a3449f063cc80397cca2b402c89b2e5f07?hp=803e389cdb9c1254934c107b0dcddbfd9821cd0a>

- Log -----------------------------------------------------------------
commit 919f76a3449f063cc80397cca2b402c89b2e5f07
Author: Rafael Garcia-Suarez <r...@consttype.org>
Date:   Wed Jan 25 11:41:13 2012 +0100

    Make the display of the warning "Useless use of a constant (%s)" more robust
    
    If the constant is a string (POK), we dump it using pv_pretty, to
    properly escape non-printable characters. This also improves detection
    of utf-8 encoding in the constant to be printed. Also, this patch
    streamlines the tests for the type and value of that constant.
    
    Potential backwards-compatibility issues : if the constant is a string
    it will now be enclosed in double quotes, like this :
        Useless use of a constant ("a") in void context
    instead of
        Useless use of a constant (a) in void context
-----------------------------------------------------------------------

Summary of changes:
 op.c                 |   25 +++++++++++++++++--------
 t/lib/warnings/op    |   12 +++++++-----
 t/lib/warnings/perly |   26 +++++++++++++-------------
 3 files changed, 37 insertions(+), 26 deletions(-)

diff --git a/op.c b/op.c
index 3af6ee7..e31f742 100644
--- a/op.c
+++ b/op.c
@@ -1167,14 +1167,6 @@ Perl_scalarvoid(pTHX_ OP *o)
            no_bareword_allowed(o);
        else {
            if (ckWARN(WARN_VOID)) {
-               if (SvOK(sv)) {
-                   SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
-                               "a constant (%"SVf")", sv));
-                   useless = SvPV_nolen(msv);
-                    useless_is_utf8 = SvUTF8(msv);
-               }
-               else
-                   useless = "a constant (undef)";
                /* don't warn on optimised away booleans, eg 
                 * use constant Foo, 5; Foo || print; */
                if (cSVOPo->op_private & OPpCONST_SHORTCIRCUIT)
@@ -1196,7 +1188,24 @@ Perl_scalarvoid(pTHX_ OP *o)
                        strnEQ(maybe_macro, "ds", 2) ||
                        strnEQ(maybe_macro, "ig", 2))
                            useless = NULL;
+                   else {
+                       SV * const dsv = newSV(0);
+                       SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
+                                   "a constant (%s)",
+                                   pv_pretty(dsv, maybe_macro, SvCUR(sv), 32, 
NULL, NULL,
+                                           PERL_PV_PRETTY_DUMP | 
PERL_PV_ESCAPE_NOCLEAR | PERL_PV_ESCAPE_UNI_DETECT )));
+                       SvREFCNT_dec(dsv);
+                       useless = SvPV_nolen(msv);
+                       useless_is_utf8 = SvUTF8(msv);
+                   }
                }
+               else if (SvOK(sv)) {
+                   SV* msv = sv_2mortal(Perl_newSVpvf(aTHX_
+                               "a constant (%"SVf")", sv));
+                   useless = SvPV_nolen(msv);
+               }
+               else
+                   useless = "a constant (undef)";
            }
        }
        op_null(o);             /* don't execute or even remember it */
diff --git a/t/lib/warnings/op b/t/lib/warnings/op
index 344cf12..8f57920 100644
--- a/t/lib/warnings/op
+++ b/t/lib/warnings/op
@@ -526,6 +526,7 @@ use warnings 'void' ;
 2 + 2; # optimized to OP_CONST
 use constant U => undef;
 U;
+qq/"   \n/;
 5 || print "bad\n";    # test OPpCONST_SHORTCIRCUIT
 print "boo\n" if U;    # test OPpCONST_SHORTCIRCUIT
 no warnings 'void' ;
@@ -534,11 +535,12 @@ no warnings 'void' ;
 "x" . "y"; # optimized to OP_CONST
 2 + 2; # optimized to OP_CONST
 EXPECT
-Useless use of a constant (abc) in void context at - line 3.
+Useless use of a constant ("abc") in void context at - line 3.
 Useless use of a constant (7) in void context at - line 4.
-Useless use of a constant (xy) in void context at - line 5.
+Useless use of a constant ("xy") in void context at - line 5.
 Useless use of a constant (4) in void context at - line 6.
 Useless use of a constant (undef) in void context at - line 8.
+Useless use of a constant ("\"\t\n") in void context at - line 9.
 ########
 # op.c
 use utf8;
@@ -555,9 +557,9 @@ no warnings 'void' ;
 "àḆc"; # OP_CONST
 "Ẋ" . "ƴ"; # optimized to OP_CONST
 EXPECT
-Useless use of a constant (àḆc) in void context at - line 5.
-Useless use of a constant (Ẋƴ) in void context at - line 6.
-Useless use of a constant (FOO) in void context at - line 7.
+Useless use of a constant ("\340\x{1e06}c") in void context at - line 5.
+Useless use of a constant ("\x{1e8a}\x{1b4}") in void context at - line 6.
+Useless use of a constant ("\x{ff26}\x{ff2f}\x{ff2f}") in void context at - 
line 7.
 Useless use of a constant (undef) in void context at - line 9.
 ########
 # op.c
diff --git a/t/lib/warnings/perly b/t/lib/warnings/perly
index 02e29fd..d2b9560 100644
--- a/t/lib/warnings/perly
+++ b/t/lib/warnings/perly
@@ -55,9 +55,9 @@ EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
 Use of qw(...) as parentheses is deprecated at - line 4.
-Useless use of a constant (z) in void context at - line 4.
+Useless use of a constant ("z") in void context at - line 4.
 Use of qw(...) as parentheses is deprecated at - line 5.
-Useless use of a constant (z) in void context at - line 5.
+Useless use of a constant ("z") in void context at - line 5.
 x0
 x2
 ########
@@ -76,9 +76,9 @@ EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
 Use of qw(...) as parentheses is deprecated at - line 4.
-Useless use of a constant (z) in void context at - line 4.
+Useless use of a constant ("z") in void context at - line 4.
 Use of qw(...) as parentheses is deprecated at - line 5.
-Useless use of a constant (z) in void context at - line 5.
+Useless use of a constant ("z") in void context at - line 5.
 x1
 x3
 ########
@@ -97,9 +97,9 @@ EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
 Use of qw(...) as parentheses is deprecated at - line 4.
-Useless use of a constant (z) in void context at - line 4.
+Useless use of a constant ("z") in void context at - line 4.
 Use of qw(...) as parentheses is deprecated at - line 5.
-Useless use of a constant (z) in void context at - line 5.
+Useless use of a constant ("z") in void context at - line 5.
 x0
 x2
 ########
@@ -115,7 +115,7 @@ given qw(z a) { print "x1 $_\n"; }
 EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
-Useless use of a constant (z) in void context at - line 3.
+Useless use of a constant ("z") in void context at - line 3.
 x0 a
 x1 a
 ########
@@ -135,9 +135,9 @@ EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
 Use of qw(...) as parentheses is deprecated at - line 4.
-Useless use of a constant (z) in void context at - line 4.
+Useless use of a constant ("z") in void context at - line 4.
 Use of qw(...) as parentheses is deprecated at - line 5.
-Useless use of a constant (z) in void context at - line 5.
+Useless use of a constant ("z") in void context at - line 5.
 x0
 x2
 ########
@@ -158,9 +158,9 @@ EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
 Use of qw(...) as parentheses is deprecated at - line 4.
-Useless use of a constant (z) in void context at - line 4.
+Useless use of a constant ("z") in void context at - line 4.
 Use of qw(...) as parentheses is deprecated at - line 5.
-Useless use of a constant (z) in void context at - line 5.
+Useless use of a constant ("z") in void context at - line 5.
 x0
 x2
 ########
@@ -178,9 +178,9 @@ EXPECT
 Use of qw(...) as parentheses is deprecated at - line 2.
 Use of qw(...) as parentheses is deprecated at - line 3.
 Use of qw(...) as parentheses is deprecated at - line 4.
-Useless use of a constant (z) in void context at - line 4.
+Useless use of a constant ("z") in void context at - line 4.
 Use of qw(...) as parentheses is deprecated at - line 5.
-Useless use of a constant (z) in void context at - line 5.
+Useless use of a constant ("z") in void context at - line 5.
 x1
 x3
 ########

--
Perl5 Master Repository

Reply via email to