X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=sv.c;h=e5e997c10b977404a9633b0609db4a79f41dc35b;hb=5b5cf8d2a2291946fc318cadec7c0c58e74bd1aa;hp=a846af98aaff0ebb37aba51589ae6c560ba8df2e;hpb=ae8cc45f19735266b98e68ac96abd0c5050c140f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/sv.c b/sv.c index a846af9..e5e997c 100644 --- a/sv.c +++ b/sv.c @@ -587,18 +587,6 @@ struct arena_set { struct arena_desc set[ARENAS_PER_SET]; }; -#if !ARENASETS - -static void -S_free_arena(pTHX_ void **root) { - while (root) { - void ** const next = *(void **)root; - Safefree(root); - root = next; - } -} -#endif - /* =for apidoc sv_free_arenas @@ -627,7 +615,6 @@ Perl_sv_free_arenas(pTHX) Safefree(sva); } -#if ARENASETS { struct arena_set *next, *aroot = (struct arena_set*) PL_body_arenas; @@ -641,9 +628,6 @@ Perl_sv_free_arenas(pTHX) Safefree(aroot); } } -#else - S_free_arena(aTHX_ (void**) PL_body_arenas); -#endif PL_body_arenas = 0; for (i=0; inext = PL_body_arenas; - PL_body_arenas = arp; - return arp; - -#else struct arena_desc* adesc; struct arena_set *newroot, **aroot = (struct arena_set**) &PL_body_arenas; int curr; @@ -737,7 +709,6 @@ Perl_get_arena(pTHX_ int arena_size) curr, adesc->arena, arena_size)); return adesc->arena; -#endif } @@ -1094,17 +1065,11 @@ S_more_bodies (pTHX_ svtype sv_type) end = start + bdp->arena_size - body_size; -#if !ARENASETS - /* The initial slot is used to link the arenas together, so it isn't to be - linked into the list of ready-to-use bodies. */ - start += body_size; -#else /* computed count doesnt reflect the 1st slot reservation */ DEBUG_m(PerlIO_printf(Perl_debug_log, "arena %p end %p arena-size %d type %d size %d ct %d\n", start, end, bdp->arena_size, sv_type, body_size, bdp->arena_size / body_size)); -#endif *root = (void *)start; @@ -1444,6 +1409,10 @@ Perl_sv_grow(pTHX_ register SV *sv, register STRLEN newlen) { register char *s; + if (PL_madskills && newlen >= 0x100000) { + PerlIO_printf(Perl_debug_log, + "Allocation too large: %"UVxf"\n", (UV)newlen); + } #ifdef HAS_64K_LIMIT if (newlen >= 0x10000) { PerlIO_printf(Perl_debug_log, @@ -10939,9 +10908,26 @@ perl_clone_using(PerlInterpreter *proto_perl, UV flags, i = (PL_lex_casemods < 12 ? 12 : PL_lex_casemods); PL_lex_casestack = SAVEPVN(proto_perl->Ilex_casestack,i); +#ifdef PERL_MAD + Copy(proto_perl->Inexttoke, PL_nexttoke, 5, NEXTTOKE); + PL_lasttoke = proto_perl->Ilasttoke; + PL_realtokenstart = proto_perl->Irealtokenstart; + PL_faketokens = proto_perl->Ifaketokens; + PL_thismad = proto_perl->Ithismad; + PL_thistoken = proto_perl->Ithistoken; + PL_thisopen = proto_perl->Ithisopen; + PL_thisstuff = proto_perl->Ithisstuff; + PL_thisclose = proto_perl->Ithisclose; + PL_thiswhite = proto_perl->Ithiswhite; + PL_nextwhite = proto_perl->Inextwhite; + PL_skipwhite = proto_perl->Iskipwhite; + PL_endwhite = proto_perl->Iendwhite; + PL_curforce = proto_perl->Icurforce; +#else Copy(proto_perl->Inextval, PL_nextval, 5, YYSTYPE); Copy(proto_perl->Inexttype, PL_nexttype, 5, I32); PL_nexttoke = proto_perl->Inexttoke; +#endif /* XXX This is probably masking the deeper issue of why * SvANY(proto_perl->Ilinestr) can be NULL at this point. For test case: