This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
allow C<-foo> under C<use integer> (behavior of C<-$string>
authorGurusamy Sarathy <gsar@cpan.org>
Mon, 5 Jul 1999 16:29:39 +0000 (16:29 +0000)
committerGurusamy Sarathy <gsar@cpan.org>
Mon, 5 Jul 1999 16:29:39 +0000 (16:29 +0000)
is unchanged still)

p4raw-id: //depot/perl@3588

op.c

diff --git a/op.c b/op.c
index f0cd15f..25b17dc 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1833,8 +1833,14 @@ Perl_fold_constants(pTHX_ register OP *o)
     if (PL_opargs[type] & OA_TARGET)
        o->op_targ = pad_alloc(type, SVs_PADTMP);
 
     if (PL_opargs[type] & OA_TARGET)
        o->op_targ = pad_alloc(type, SVs_PADTMP);
 
-    if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER))
+    /* integerize op, unless it happens to be C<-foo>.
+     * XXX should pp_i_negate() do magic string negation instead? */
+    if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)
+       && !(type == OP_NEGATE && cUNOPo->op_first->op_type == OP_CONST
+            && (cUNOPo->op_first->op_private & OPpCONST_BARE)))
+    {
        o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
        o->op_ppaddr = PL_ppaddr[type = ++(o->op_type)];
+    }
 
     if (!(PL_opargs[type] & OA_FOLDCONST))
        goto nope;
 
     if (!(PL_opargs[type] & OA_FOLDCONST))
        goto nope;