This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
av.c apidoc
[perl5.git] / perly_c.diff
index f42a10c..0cfe10f 100644 (file)
@@ -12,7 +12,7 @@
       if (yys = getenv("YYDEBUG"))
       {
           yyn = *yys;
---- 1447,1473 ----
+--- 1447,1476 ----
   yyparse()
   {
       register int yym, yyn, yystate;
 ! #endif
   
 +     struct ysv *ysave;
++ #ifdef USE_ITHREADS
++     ENTER;                   /* force yydestruct() before we return */
++ #endif
 +     New(73, ysave, 1, struct ysv);
-+     SAVEDESTRUCTOR(yydestruct, ysave);
++     SAVEDESTRUCTOR_X(yydestruct, ysave);
 +     ysave->oldyydebug        = yydebug;
 +     ysave->oldyynerrs        = yynerrs;
 +     ysave->oldyyerrflag      = yyerrflag;
@@ -42,7 +45,7 @@
           yyn = *yys;
 ***************
 *** 1463,1468 ****
---- 1480,1495 ----
+--- 1483,1498 ----
       yyerrflag = 0;
       yychar = (-1);
   
@@ -68,7 +71,7 @@
           }
           *++yyssp = yystate = yytable[yyn];
           *++yyvsp = yylval;
---- 1520,1538 ----
+--- 1523,1541 ----
   #endif
           if (yyssp >= yyss + yystacksize - 1)
           {
                   }
                   *++yyssp = yystate = yytable[yyn];
                   *++yyvsp = yylval;
---- 1573,1591 ----
+--- 1576,1594 ----
   #endif
                   if (yyssp >= yyss + yystacksize - 1)
                   {
   yyaccept:
 !     return (0);
   }
---- 2524,2550 ----
+--- 2527,2575 ----
   #endif
       if (yyssp >= yyss + yystacksize - 1)
       {
   yyabort:
 !     retval = 1;
   yyaccept:
+! #ifdef USE_ITHREADS
+!     LEAVE;                   /* force yydestruct() before we return */
+! #endif
 !     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);
   }