From 9675f7ac35061616b1770751dc4303671c1e0ebe Mon Sep 17 00:00:00 2001 From: Gurusamy Sarathy Date: Mon, 24 May 1999 02:34:20 +0000 Subject: [PATCH] oops, some files missing in change#3449 p4raw-link: @3449 on //depot/perl: 18228614d1dac2db099ef3d8846e53f44accce72 p4raw-id: //depot/perl@3450 --- op.c | 25 +++++++++++++++++++++++++ op.h | 1 + toke.c | 1 + 3 files changed, 27 insertions(+) diff --git a/op.c b/op.c index 0697764..8f19121 100644 --- a/op.c +++ b/op.c @@ -5412,6 +5412,31 @@ ck_subr(OP *o) goto wrapref; /* autoconvert GLOB -> GLOBref */ else if (o2->op_type == OP_CONST) o2->op_private &= ~OPpCONST_STRICT; + else if (o2->op_type == OP_ENTERSUB) { + /* accidental subroutine, revert to bareword */ + OP *gvop = ((UNOP*)o2)->op_first; + if (gvop && gvop->op_type == OP_NULL) { + gvop = ((UNOP*)gvop)->op_first; + if (gvop) { + for (; gvop->op_sibling; gvop = gvop->op_sibling) + ; + if (gvop && + (gvop->op_private & OPpENTERSUB_NOPAREN) && + (gvop = ((UNOP*)gvop)->op_first) && + gvop->op_type == OP_GV) + { + GV *gv = (GV*)((SVOP*)gvop)->op_sv; + OP *sibling = o2->op_sibling; + op_free(o2); + o2 = newSVOP(OP_CONST, 0, + newSVpvn(GvNAME(gv), + GvNAMELEN(gv))); + prev->op_sibling = o2; + o2->op_sibling = sibling; + } + } + } + } scalar(o2); break; case '\\': diff --git a/op.h b/op.h index 03ea2af..125e115 100644 --- a/op.h +++ b/op.h @@ -125,6 +125,7 @@ typedef U32 PADOFFSET; #define OPpENTERSUB_DB 16 /* Debug subroutine. */ /* OP_RV2CV only */ #define OPpENTERSUB_AMPER 8 /* Used & form to call. */ +#define OPpENTERSUB_NOPAREN 128 /* bare sub call (without parens) */ /* OP_?ELEM only */ #define OPpLVAL_DEFER 16 /* Defer creation of array/hash elem */ /* for OP_RV2?V, lower bits carry hints */ diff --git a/toke.c b/toke.c index df45a56..441839b 100644 --- a/toke.c +++ b/toke.c @@ -3233,6 +3233,7 @@ int yylex(PERL_YYLEX_PARAM_DECL) /* Resolve to GV now. */ op_free(yylval.opval); yylval.opval = newCVREF(0, newGVOP(OP_GV, 0, gv)); + yylval.opval->op_private |= OPpENTERSUB_NOPAREN; PL_last_lop = PL_oldbufptr; PL_last_lop_op = OP_ENTERSUB; /* Is there a prototype? */ -- 2.7.4