Constant folding for x
authorFather Chrysostomos <sprout@cpan.org>
Fri, 8 Jun 2012 19:58:42 +0000 (12:58 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 8 Jun 2012 23:17:04 +0000 (16:17 -0700)
op.c
opcode.h
regen/opcodes
t/lib/warnings/op

diff --git a/op.c b/op.c
index b33aed9..b4ffc81 100644 (file)
--- a/op.c
+++ b/op.c
@@ -3010,6 +3010,8 @@ S_fold_constants(pTHX_ register OP *o)
        if (IN_LOCALE_COMPILETIME)
            goto nope;
        break;
+    case OP_REPEAT:
+       if (o->op_private & OPpREPEAT_DOLIST) goto nope;
     }
 
     if (PL_parser && PL_parser->error_count)
index f33f124..217cb56 100644 (file)
--- a/opcode.h
+++ b/opcode.h
@@ -1764,7 +1764,7 @@ EXTCONST U32 PL_opargs[] = {
        0x0001121e,     /* i_divide */
        0x0001123e,     /* modulo */
        0x0001121e,     /* i_modulo */
-       0x00012209,     /* repeat */
+       0x0001220b,     /* repeat */
        0x0001123e,     /* add */
        0x0001121e,     /* i_add */
        0x0001123e,     /* subtract */
index d92c397..8666d8c 100644 (file)
@@ -126,7 +126,7 @@ divide              division (/)            ck_null         IfsT2   S S
 i_divide       integer division (/)    ck_null         ifsT2   S S
 modulo         modulus (%)             ck_null         IifsT2  S S
 i_modulo       integer modulus (%)     ck_null         ifsT2   S S
-repeat         repeat (x)              ck_repeat       mt2     L S
+repeat         repeat (x)              ck_repeat       fmt2    L S
 
 add            addition (+)            ck_null         IfsT2   S S
 i_add          integer addition (+)    ck_null         ifsT2   S S
index 6dfcf5d..ef83756 100644 (file)
@@ -148,7 +148,9 @@ Using an array as a reference is deprecated at - line 10.
 ########
 # op.c
 use warnings 'void' ; close STDIN ;
-1 x 3 ;                        # OP_REPEAT
+#line 2
+1 x 3 ;                        # OP_REPEAT (folded)
+(1) x 3 ;              # OP_REPEAT
                        # OP_GVSV
 wantarray ;            # OP_WANTARRAY
                        # OP_GV
@@ -205,6 +207,7 @@ $a <=> $b;          # OP_NCMP
 use 5.015;
 __SUB__                        # OP_RUNCV
 EXPECT
+Useless use of a constant ("111") in void context at - line 2.
 Useless use of repeat (x) in void context at - line 3.
 Useless use of wantarray in void context at - line 5.
 Useless use of reference-type operator in void context at - line 12.