per Larry's idea, parse 1.2.3 as v1.2.3; C<require 5.6.0> and
[p5sagit/p5-mst-13.2.git] / perly.c
diff --git a/perly.c b/perly.c
index 0ed07fc..36b51c0 100644 (file)
--- 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);
+}