From: Rafael Garcia-Suarez Date: Wed, 17 Mar 2004 18:20:54 +0000 (+0000) Subject: Optimize away the assignment in the constructs C, X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b9d46b3942a9a8cce9cbca1e08f61ac23083a740;p=p5sagit%2Fp5-mst-13.2.git Optimize away the assignment in the constructs C, C, C. p4raw-id: //depot/perl@22520 --- diff --git a/op.c b/op.c index b4d1ffc..344130c 100644 --- a/op.c +++ b/op.c @@ -3126,6 +3126,14 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) op_free(right); return Nullop; } + /* optimise C to C, and likewise for hashes */ + if ((left->op_type == OP_PADAV || left->op_type == OP_PADHV) + && right->op_type == OP_STUB + && (left->op_private & OPpLVAL_INTRO)) + { + op_free(right); + return left; + } curop = list(force_list(left)); o = newBINOP(OP_AASSIGN, flags, list(force_list(right)), curop); o->op_private = (U8)(0 | (flags >> 8)); @@ -5593,6 +5601,19 @@ Perl_ck_sassign(pTHX_ OP *o) return kid; } } + /* optimise C to C */ + if (kid->op_type == OP_UNDEF) { + OP *kkid = kid->op_sibling; + if (kkid && kkid->op_type == OP_PADSV + && (kkid->op_private & OPpLVAL_INTRO)) + { + cLISTOPo->op_first = NULL; + kid->op_sibling = NULL; + op_free(o); + op_free(kid); + return kkid; + } + } return o; }