X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=op.c;h=db2a67bba740ec658b896944f3005bc9ea6670e2;hb=20e8a3a35e61c7fcc6a4173969d7b685e762aef7;hp=4e0695f92bb2fa58bb2c677e7f54d850927e253f;hpb=996c9baa63e0776f6650c6ba32b83baefb5f0505;p=p5sagit%2Fp5-mst-13.2.git diff --git a/op.c b/op.c index 4e0695f..db2a67b 100644 --- a/op.c +++ b/op.c @@ -911,6 +911,7 @@ Perl_scalar(pTHX_ OP *o) case OP_SORT: if (ckWARN(WARN_VOID)) Perl_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context"); + break; } return o; } @@ -2427,6 +2428,7 @@ Perl_fold_constants(pTHX_ register OP *o) OP *old_next; SV * const oldwarnhook = PL_warnhook; SV * const olddiehook = PL_diehook; + COP not_compiling; dJMPENV; PERL_ARGS_ASSERT_FOLD_CONSTANTS; @@ -2465,6 +2467,7 @@ Perl_fold_constants(pTHX_ register OP *o) /* XXX what about the numeric ops? */ if (PL_hints & HINT_LOCALE) goto nope; + break; } if (PL_parser && PL_parser->error_count) @@ -2490,6 +2493,13 @@ Perl_fold_constants(pTHX_ register OP *o) oldscope = PL_scopestack_ix; create_eval_scope(G_FAKINGEVAL); + /* Verify that we don't need to save it: */ + assert(PL_curcop == &PL_compiling); + StructCopy(&PL_compiling, ¬_compiling, COP); + PL_curcop = ¬_compiling; + /* The above ensures that we run with all the correct hints of the + currently compiling COP, but that IN_PERL_RUNTIME is not true. */ + assert(IN_PERL_RUNTIME); PL_warnhook = PERL_WARNHOOK_FATAL; PL_diehook = NULL; JMPENV_PUSH(ret); @@ -2523,6 +2533,7 @@ Perl_fold_constants(pTHX_ register OP *o) JMPENV_POP; PL_warnhook = oldwarnhook; PL_diehook = olddiehook; + PL_curcop = &PL_compiling; if (PL_scopestack_ix > oldscope) delete_eval_scope(); @@ -4324,10 +4335,11 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) if (PL_eval_start) PL_eval_start = 0; else { - /* FIXME for MAD */ - op_free(o); - o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling))); - o->op_private |= OPpCONST_ARYBASE; + if (!PL_madskills) { /* assignment to $[ is ignored when making a mad dump */ + op_free(o); + o = newSVOP(OP_CONST, 0, newSViv(CopARYBASE_get(&PL_compiling))); + o->op_private |= OPpCONST_ARYBASE; + } } } return o; @@ -6683,7 +6695,7 @@ Perl_ck_ftst(pTHX_ OP *o) #endif return newop; } - if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o)) + if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type)) o->op_private |= OPpFT_ACCESS; if (PL_check[kidtype] == MEMBER_TO_FPTR(Perl_ck_ftst) && kidtype != OP_STAT && kidtype != OP_LSTAT)