X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perly.c;h=36b51c02e7584003a6f9e50204de7857e413ece8;hb=71a29c3c6e68e84b4c2fa366c4878918712829a9;hp=0ed07fcf12d06f080b46bbadc3b0be61b768cbbc;hpb=c76ac1ee16c5c9591d8ffad5a0651b7f81738b68;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perly.c b/perly.c index 0ed07fc..36b51c0 100644 --- a/perly.c +++ b/perly.c @@ -29,22 +29,7 @@ struct ysv { YYSTYPE oldyylval; }; -static void yydestruct(void *ptr); - -static void -yydestruct(void *ptr) -{ - struct ysv* ysave = (struct ysv*)ptr; - if (ysave->yyss) Safefree(ysave->yyss); - if (ysave->yyvs) Safefree(ysave->yyvs); - yydebug = ysave->oldyydebug; - yynerrs = ysave->oldyynerrs; - yyerrflag = ysave->oldyyerrflag; - yychar = ysave->oldyychar; - yyval = ysave->oldyyval; - yylval = ysave->oldyylval; - Safefree(ysave); -} +static void yydestruct(pTHXo_ void *ptr); #line 49 "perly.y" #if 0 /* get this from perly.h instead */ @@ -1402,7 +1387,7 @@ yyparse() struct ysv *ysave; New(73, ysave, 1, struct ysv); - SAVEDESTRUCTOR(yydestruct, ysave); + SAVEDESTRUCTOR_X(yydestruct, ysave); ysave->oldyydebug = yydebug; ysave->oldyynerrs = yynerrs; ysave->oldyyerrflag = yyerrflag; @@ -1841,7 +1826,7 @@ case 59: #line 338 "perly.y" { STRLEN n_a; char *name = SvPV(((SVOP*)yyvsp[0].opval)->op_sv,n_a); if (strEQ(name, "BEGIN") || strEQ(name, "END") - || strEQ(name, "INIT")) + || strEQ(name, "INIT") || strEQ(name, "CHECK")) CvSPECIAL_on(PL_compcv); yyval.opval = yyvsp[0].opval; } break; @@ -2494,3 +2479,22 @@ yyabort: yyaccept: return retval; } + +#ifdef PERL_OBJECT +#include "XSUB.h" +#endif + +static void +yydestruct(pTHXo_ void *ptr) +{ + struct ysv* ysave = (struct ysv*)ptr; + if (ysave->yyss) Safefree(ysave->yyss); + if (ysave->yyvs) Safefree(ysave->yyvs); + yydebug = ysave->oldyydebug; + yynerrs = ysave->oldyynerrs; + yyerrflag = ysave->oldyyerrflag; + yychar = ysave->oldyychar; + yyval = ysave->oldyyval; + yylval = ysave->oldyylval; + Safefree(ysave); +}