From: Andy Lester <andy@petdance.com>
Date: Wed, 19 Apr 2006 23:16:53 +0000 (-0500)
Subject: op_type shrinking
X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=e15d5972b12383d939a792aa5189460c258c4f51;p=p5sagit%2Fp5-mst-13.2.git

op_type shrinking
Message-ID: <20060420041653.GA28523@petdance.com>

p4raw-id: //depot/perl@27910
---

diff --git a/dump.c b/dump.c
index a973a41..4635eef 100644
--- a/dump.c
+++ b/dump.c
@@ -540,6 +540,8 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 {
     dVAR;
     UV      seq;
+    const OPCODE optype = o->op_type;
+
     sequence(o);
     Perl_dump_indent(aTHX_ level, file, "{\n");
     level++;
@@ -557,11 +559,9 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
     else
 	PerlIO_printf(file, "DONE\n");
     if (o->op_targ) {
-	if (o->op_type == OP_NULL)
-	{
+	if (optype == OP_NULL) {
 	    Perl_dump_indent(aTHX_ level, file, "  (was %s)\n", PL_op_name[o->op_targ]);
-	    if (o->op_targ == OP_NEXTSTATE)
-	    {
+	    if (o->op_targ == OP_NEXTSTATE) {
 		if (CopLINE(cCOPo))
 		    Perl_dump_indent(aTHX_ level, file, "LINE = %"UVf"\n",
 				     (UV)CopLINE(cCOPo));
@@ -580,7 +580,7 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
     Perl_dump_indent(aTHX_ level, file, "ADDR = 0x%"UVxf" => 0x%"UVxf"\n", (UV)o, (UV)o->op_next);
 #endif
     if (o->op_flags) {
-	SV *tmpsv = newSVpvs("");
+	SV * const tmpsv = newSVpvs("");
 	switch (o->op_flags & OPf_WANT) {
 	case OPf_WANT_VOID:
 	    sv_catpv(tmpsv, ",VOID");
@@ -611,27 +611,27 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 	SvREFCNT_dec(tmpsv);
     }
     if (o->op_private) {
-	SV *tmpsv = newSVpvs("");
-	if (PL_opargs[o->op_type] & OA_TARGLEX) {
+	SV * const tmpsv = newSVpvs("");
+	if (PL_opargs[optype] & OA_TARGLEX) {
 	    if (o->op_private & OPpTARGET_MY)
 		sv_catpv(tmpsv, ",TARGET_MY");
 	}
-	else if (o->op_type == OP_LEAVESUB ||
-		 o->op_type == OP_LEAVE ||
-		 o->op_type == OP_LEAVESUBLV ||
-		 o->op_type == OP_LEAVEWRITE) {
+	else if (optype == OP_LEAVESUB ||
+		 optype == OP_LEAVE ||
+		 optype == OP_LEAVESUBLV ||
+		 optype == OP_LEAVEWRITE) {
 	    if (o->op_private & OPpREFCOUNTED)
 		sv_catpv(tmpsv, ",REFCOUNTED");
 	}
-        else if (o->op_type == OP_AASSIGN) {
+        else if (optype == OP_AASSIGN) {
 	    if (o->op_private & OPpASSIGN_COMMON)
 		sv_catpv(tmpsv, ",COMMON");
 	}
-	else if (o->op_type == OP_SASSIGN) {
+	else if (optype == OP_SASSIGN) {
 	    if (o->op_private & OPpASSIGN_BACKWARDS)
 		sv_catpv(tmpsv, ",BACKWARDS");
 	}
-	else if (o->op_type == OP_TRANS) {
+	else if (optype == OP_TRANS) {
 	    if (o->op_private & OPpTRANS_SQUASH)
 		sv_catpv(tmpsv, ",SQUASH");
 	    if (o->op_private & OPpTRANS_DELETE)
@@ -643,20 +643,20 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 	    if (o->op_private & OPpTRANS_GROWS)
 		sv_catpv(tmpsv, ",GROWS");
 	}
-	else if (o->op_type == OP_REPEAT) {
+	else if (optype == OP_REPEAT) {
 	    if (o->op_private & OPpREPEAT_DOLIST)
 		sv_catpv(tmpsv, ",DOLIST");
 	}
-	else if (o->op_type == OP_ENTERSUB ||
-		 o->op_type == OP_RV2SV ||
-		 o->op_type == OP_GVSV ||
-		 o->op_type == OP_RV2AV ||
-		 o->op_type == OP_RV2HV ||
-		 o->op_type == OP_RV2GV ||
-		 o->op_type == OP_AELEM ||
-		 o->op_type == OP_HELEM )
+	else if (optype == OP_ENTERSUB ||
+		 optype == OP_RV2SV ||
+		 optype == OP_GVSV ||
+		 optype == OP_RV2AV ||
+		 optype == OP_RV2HV ||
+		 optype == OP_RV2GV ||
+		 optype == OP_AELEM ||
+		 optype == OP_HELEM )
 	{
-	    if (o->op_type == OP_ENTERSUB) {
+	    if (optype == OP_ENTERSUB) {
 		if (o->op_private & OPpENTERSUB_AMPER)
 		    sv_catpv(tmpsv, ",AMPER");
 		if (o->op_private & OPpENTERSUB_DB)
@@ -685,7 +685,7 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 		if (o->op_private & OPpMAYBE_LVSUB)
 		    sv_catpv(tmpsv, ",MAYBE_LVSUB");
 	    }
-	    if (o->op_type == OP_AELEM || o->op_type == OP_HELEM) {
+	    if (optype == OP_AELEM || optype == OP_HELEM) {
 		if (o->op_private & OPpLVAL_DEFER)
 		    sv_catpv(tmpsv, ",LVAL_DEFER");
 	    }
@@ -696,7 +696,7 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 		    sv_catpv(tmpsv, ",OUR_INTRO");
 	    }
 	}
-	else if (o->op_type == OP_CONST) {
+	else if (optype == OP_CONST) {
 	    if (o->op_private & OPpCONST_BARE)
 		sv_catpv(tmpsv, ",BARE");
 	    if (o->op_private & OPpCONST_STRICT)
@@ -708,35 +708,35 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 	    if (o->op_private & OPpCONST_ENTERED)
 		sv_catpv(tmpsv, ",ENTERED");
 	}
-	else if (o->op_type == OP_FLIP) {
+	else if (optype == OP_FLIP) {
 	    if (o->op_private & OPpFLIP_LINENUM)
 		sv_catpv(tmpsv, ",LINENUM");
 	}
-	else if (o->op_type == OP_FLOP) {
+	else if (optype == OP_FLOP) {
 	    if (o->op_private & OPpFLIP_LINENUM)
 		sv_catpv(tmpsv, ",LINENUM");
 	}
-	else if (o->op_type == OP_RV2CV) {
+	else if (optype == OP_RV2CV) {
 	    if (o->op_private & OPpLVAL_INTRO)
 		sv_catpv(tmpsv, ",INTRO");
 	}
-	else if (o->op_type == OP_GV) {
+	else if (optype == OP_GV) {
 	    if (o->op_private & OPpEARLY_CV)
 		sv_catpv(tmpsv, ",EARLY_CV");
 	}
-	else if (o->op_type == OP_LIST) {
+	else if (optype == OP_LIST) {
 	    if (o->op_private & OPpLIST_GUESSED)
 		sv_catpv(tmpsv, ",GUESSED");
 	}
-	else if (o->op_type == OP_DELETE) {
+	else if (optype == OP_DELETE) {
 	    if (o->op_private & OPpSLICE)
 		sv_catpv(tmpsv, ",SLICE");
 	}
-	else if (o->op_type == OP_EXISTS) {
+	else if (optype == OP_EXISTS) {
 	    if (o->op_private & OPpEXISTS_SUB)
 		sv_catpv(tmpsv, ",EXISTS_SUB");
 	}
-	else if (o->op_type == OP_SORT) {
+	else if (optype == OP_SORT) {
 	    if (o->op_private & OPpSORT_NUMERIC)
 		sv_catpv(tmpsv, ",NUMERIC");
 	    if (o->op_private & OPpSORT_INTEGER)
@@ -744,11 +744,11 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 	    if (o->op_private & OPpSORT_REVERSE)
 		sv_catpv(tmpsv, ",REVERSE");
 	}
-	else if (o->op_type == OP_THREADSV) {
+	else if (optype == OP_THREADSV) {
 	    if (o->op_private & OPpDONE_SVREF)
 		sv_catpv(tmpsv, ",SVREF");
 	}
-	else if (o->op_type == OP_OPEN || o->op_type == OP_BACKTICK) {
+	else if (optype == OP_OPEN || optype == OP_BACKTICK) {
 	    if (o->op_private & OPpOPEN_IN_RAW)
 		sv_catpv(tmpsv, ",IN_RAW");
 	    if (o->op_private & OPpOPEN_IN_CRLF)
@@ -758,17 +758,17 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
 	    if (o->op_private & OPpOPEN_OUT_CRLF)
 		sv_catpv(tmpsv, ",OUT_CRLF");
 	}
-	else if (o->op_type == OP_EXIT) {
+	else if (optype == OP_EXIT) {
 	    if (o->op_private & OPpEXIT_VMSISH)
 		sv_catpv(tmpsv, ",EXIT_VMSISH");
 	    if (o->op_private & OPpHUSH_VMSISH)
 		sv_catpv(tmpsv, ",HUSH_VMSISH");
 	}
-	else if (o->op_type == OP_DIE) {
+	else if (optype == OP_DIE) {
 	    if (o->op_private & OPpHUSH_VMSISH)
 		sv_catpv(tmpsv, ",HUSH_VMSISH");
 	}
-	else if (PL_check[o->op_type] != MEMBER_TO_FPTR(Perl_ck_ftst)) {
+	else if (PL_check[optype] != MEMBER_TO_FPTR(Perl_ck_ftst)) {
 	    if (OP_IS_FILETEST_ACCESS(o) && o->op_private & OPpFT_ACCESS)
 		sv_catpv(tmpsv, ",FT_ACCESS");
 	    if (o->op_private & OPpFT_STACKED)
@@ -824,7 +824,7 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, const OP *o)
     }
 #endif
 
-    switch (o->op_type) {
+    switch (optype) {
     case OP_AELEMFAST:
     case OP_GVSV:
     case OP_GV:
diff --git a/sv.c b/sv.c
index df5a556..198a2c9 100644
--- a/sv.c
+++ b/sv.c
@@ -11889,7 +11889,7 @@ S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
 		subscript_type = FUV_SUBSCRIPT_HASH;
 	}
 	else {
-	    index = S_find_array_subscript(aTHX_ (AV*)sv, uninit_sv);
+	    index = find_array_subscript((AV*)sv, uninit_sv);
 	    if (index >= 0)
 		subscript_type = FUV_SUBSCRIPT_ARRAY;
 	}
@@ -12103,13 +12103,14 @@ S_find_uninit_var(pTHX_ OP* obase, SV* uninit_sv, bool match)
 	 * or are optimized away, then it's unambiguous */
 	o2 = NULL;
 	for (kid=o; kid; kid = kid->op_sibling) {
-	    if (kid &&
-		(    (kid->op_type == OP_CONST && SvOK(cSVOPx_sv(kid)))
-		  || (kid->op_type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
-		  || (kid->op_type == OP_PUSHMARK)
+	    if (kid) {
+		const OPCODE type = kid->op_type;
+		if ( (type == OP_CONST && SvOK(cSVOPx_sv(kid)))
+		  || (type == OP_NULL  && ! (kid->op_flags & OPf_KIDS))
+		  || (type == OP_PUSHMARK)
 		)
-	    )
 		continue;
+	    }
 	    if (o2) { /* more than one found */
 		o2 = NULL;
 		break;