X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=padop_on_crack.c.inc;h=28078a75210b8cb0de2f65771d3bde5b12efc20c;hb=662657707bf7629915a5bbba9237df019d20a301;hp=4f143b02f2dea539cc08ee53abbdf75e7be31cce;hpb=63915d2641ec4983bb6b54e1ff7d30cd0032c40d;p=p5sagit%2FFunction-Parameters.git diff --git a/padop_on_crack.c.inc b/padop_on_crack.c.inc index 4f143b0..28078a7 100644 --- a/padop_on_crack.c.inc +++ b/padop_on_crack.c.inc @@ -684,6 +684,10 @@ static PADOFFSET S_pad_alloc(pTHX_ I32 optype, U32 tmptype) { #endif +#ifndef pad_add_name_pvs +#define pad_add_name_pvs(NAME, FLAGS, TYPESTASH, OURSTASH) S_pad_add_name_pvn(aTHX_ "" NAME "", sizeof NAME - 1, FLAGS, TYPESTASH, OURSTASH) +#endif + #ifndef pad_add_name_sv #define pad_add_name_sv(NAMESV, FLAGS, TYPESTASH, OURSTASH) \ @@ -1047,3 +1051,42 @@ static PADOFFSET S_pad_findmy(pTHX_ const char *name, U32 flags) { } #endif + +static U32 S_intro_my(pTHX) { + dVAR; + SV **svp; + I32 i; + U32 seq; + + ASSERT_CURPAD_ACTIVE("intro_my"); + if (!PL_min_intro_pending) + return PL_cop_seqmax; + + svp = AvARRAY(PL_comppad_name); + for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) { + SV *const sv = svp[i]; + + if (sv && sv != &PL_sv_undef && !SvFAKE(sv) + && COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO) + { + COP_SEQ_RANGE_HIGH_set(sv, PERL_PADSEQ_INTRO); /* Don't know scope end yet. */ + COP_SEQ_RANGE_LOW_set(sv, PL_cop_seqmax); + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad intromy: %ld \"%s\", (%lu,%lu)\n", + (long)i, SvPVX_const(sv), + (unsigned long)COP_SEQ_RANGE_LOW(sv), + (unsigned long)COP_SEQ_RANGE_HIGH(sv)) + ); + } + } + seq = PL_cop_seqmax; + PL_cop_seqmax++; + if (PL_cop_seqmax == PERL_PADSEQ_INTRO) /* not a legal value */ + PL_cop_seqmax++; + PL_min_intro_pending = 0; + PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */ + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad intromy: seq -> %ld\n", (long)(PL_cop_seqmax))); + + return seq; +}