From: Rafael Garcia-Suarez Date: Mon, 25 Mar 2002 11:33:17 +0000 (+0100) Subject: Re: what is YYDEBUG and why does it reset errno? X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0ddaf51316ca1bab139289c51c648ec8213a8af3;p=p5sagit%2Fp5-mst-13.2.git Re: what is YYDEBUG and why does it reset errno? Message-ID: <20020325113317.A1410@rafael> Apparently VMS does not do YYDEBUG. p4raw-id: //depot/perl@15486 --- diff --git a/perly.c b/perly.c index 9fd86d3..0c5b80a8 100644 --- a/perly.c +++ b/perly.c @@ -6,7 +6,7 @@ #include "EXTERN.h" #define PERL_IN_PERLY_C #include "perl.h" -#ifdef EBCDIC +#if defined(EBCDIC) || defined(VMS) #undef YYDEBUG #endif #define dep() deprecate_old("\"do\" to call subroutines") diff --git a/perly.fixer b/perly.fixer index 1c07724..31e0171 100755 --- a/perly.fixer +++ b/perly.fixer @@ -19,7 +19,7 @@ # gnupatch=patch -. config.sh +. ./config.sh input=$1 output=$2 @@ -52,6 +52,7 @@ if grep 'yaccpar 1.8 (Berkeley)' $input >/dev/null 2>&1; then -e 's/^yynewerror:$//' \ -e 's/^ goto yynewerror;//' \ -e 's|^static char yysccsid\(.*\)|/* static char yysccsid\1 */|' \ + -e 's|deprecate(|deprecate_old(|' \ < $output > $tmp && mv -f $tmp $output || exit 1 rm -rf $input echo "If you need to debug perly.c, you need to fix up the #line" @@ -72,6 +73,7 @@ elif grep 'yaccpar 1.9 (Berkeley)' $input >/dev/null 2>&1; then -e 's/^yynewerror:$//' \ -e 's/^ goto yynewerror;//' \ -e 's|^static char yysccsid\(.*\)|/* static char yysccsid\1 */|' \ + -e 's|deprecate(|deprecate_old(|' \ < $output > $tmp && mv -f $tmp $output || exit 1 rm -rf $input echo "If you need to debug perly.c, you need to fix up the #line" diff --git a/perly.y b/perly.y index 48049eb..6b7df9b 100644 --- a/perly.y +++ b/perly.y @@ -16,7 +16,7 @@ #include "EXTERN.h" #define PERL_IN_PERLY_C #include "perl.h" -#ifdef EBCDIC +#if defined(EBCDIC) || defined(VMS) #undef YYDEBUG #endif #define dep() deprecate("\"do\" to call subroutines") diff --git a/perly_c.diff b/perly_c.diff index aab3a86..5fac710 100644 --- a/perly_c.diff +++ b/perly_c.diff @@ -1,446 +1,704 @@ ---- perly.c.orig Tue Jun 19 08:39:52 2001 -+++ perly.c Tue Jun 19 08:39:24 2001 -@@ -1,5 +1,5 @@ - #ifndef lint --static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; -+/* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */ - #endif - #define YYBYACC 1 - #line 16 "perly.y" -@@ -50,70 +50,9 @@ - #define yylex yylex_r - #endif - --#line 54 "y.tab.c" --#define WORD 257 --#define METHOD 258 --#define FUNCMETH 259 --#define THING 260 --#define PMFUNC 261 --#define PRIVATEREF 262 --#define FUNC0SUB 263 --#define UNIOPSUB 264 --#define LSTOPSUB 265 --#define LABEL 266 --#define FORMAT 267 --#define SUB 268 --#define ANONSUB 269 --#define PACKAGE 270 --#define USE 271 --#define WHILE 272 --#define UNTIL 273 --#define IF 274 --#define UNLESS 275 --#define ELSE 276 --#define ELSIF 277 --#define CONTINUE 278 --#define FOR 279 --#define LOOPEX 280 --#define DOTDOT 281 --#define FUNC0 282 --#define FUNC1 283 --#define FUNC 284 --#define UNIOP 285 --#define LSTOP 286 --#define RELOP 287 --#define EQOP 288 --#define MULOP 289 --#define ADDOP 290 --#define DOLSHARP 291 --#define DO 292 --#define HASHBRACK 293 --#define NOAMP 294 --#define LOCAL 295 --#define MY 296 --#define MYSUB 297 --#define COLONATTR 298 --#define PREC_LOW 299 --#define OROP 300 --#define ANDOP 301 --#define NOTOP 302 --#define ASSIGNOP 303 --#define OROR 304 --#define ANDAND 305 --#define BITOROP 306 --#define BITANDOP 307 --#define SHIFTOP 308 --#define MATCHOP 309 --#define UMINUS 310 --#define REFGEN 311 --#define POWOP 312 --#define PREINC 313 --#define PREDEC 314 --#define POSTINC 315 --#define POSTDEC 316 --#define ARROW 317 -+#line 54 "perly.c" - #define YYERRCODE 256 --short yylhs[] = { -1, -+static short yylhs[] = { -1, - 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, - 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, - 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, -@@ -135,7 +74,7 @@ - 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, - 21, 22, 23, 36, 36, 36, 36, - }; --short yylen[] = { 2, -+static short yylen[] = { 2, - 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, - 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, - 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, -@@ -157,7 +96,7 @@ - 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, - 2, 2, 2, 1, 1, 1, 1, - }; --short yydefred[] = { 4, -+static short yydefred[] = { 4, - 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, - 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, - 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, -@@ -199,7 +138,7 @@ - 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, - 0, 33, 0, 23, - }; --short yydgoto[] = { 1, -+static short yydgoto[] = { 1, - 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, - 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, - 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, -@@ -207,7 +146,7 @@ - 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, - 85, 86, 87, 15, 16, 17, 18, 93, 278, - }; --short yysindex[] = { 0, -+static short yysindex[] = { 0, - 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, - 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, - 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, -@@ -249,7 +188,7 @@ - 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, - 216, 0, -123, 0, - }; --short yyrindex[] = { 0, -+static short yyrindex[] = { 0, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -@@ -291,7 +230,7 @@ - 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, - 0, 0, 179, 0, - }; --short yygindex[] = { 0, -+static short yygindex[] = { 0, - 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, - -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, - 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, -@@ -300,7 +239,7 @@ - 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - #define YYTABLESIZE 4568 --short yytable[] = { 71, -+static short yytable[] = { 71, - 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, - 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, - 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, -@@ -759,7 +698,7 @@ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 77, 77, - }; --short yycheck[] = { 15, -+static short yycheck[] = { 15, - 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, - 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, - 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, -@@ -1224,7 +1163,7 @@ - #endif - #define YYMAXTOKEN 317 - #if YYDEBUG --char *yyname[] = { -+static char *yyname[] = { - "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, - 0,0,0,0,0,"':'","';'",0,0,0,"'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -@@ -1241,7 +1180,7 @@ - "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", - "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", - }; --char *yyrule[] = { -+static char *yyrule[] = { - "$accept : prog", - "prog : progstart lineseq", - "block : '{' remember lineseq '}'", -@@ -1456,17 +1395,6 @@ - #define YYMAXDEPTH 500 - #endif - #endif --int yydebug; --int yynerrs; --int yyerrflag; --int yychar; --short *yyssp; --YYSTYPE *yyvsp; --YYSTYPE yyval; --YYSTYPE yylval; --short yyss[YYSTACKSIZE]; --YYSTYPE yyvs[YYSTACKSIZE]; --#define yystacksize YYSTACKSIZE - #line 793 "perly.y" - /* PROGRAM */ - -@@ -1477,7 +1405,7 @@ - #endif - #define yyparse() Perl_yyparse(pTHX) - --#line 1481 "y.tab.c" -+#line 1409 "perly.c" - #define YYABORT goto yyabort - #define YYACCEPT goto yyaccept - #define YYERROR goto yyerrlab -@@ -1485,11 +1413,31 @@ - yyparse() - { - register int yym, yyn, yystate; -+ register short *yyssp; -+ register YYSTYPE *yyvsp; -+ short* yyss; -+ YYSTYPE* yyvs; -+ unsigned yystacksize = YYSTACKSIZE; -+ int retval = 0; - #if YYDEBUG - register char *yys; -- extern char *getenv(); -+#endif -+ -+ struct ysv *ysave; -+#ifdef USE_ITHREADS -+ ENTER; /* force yydestruct() before we return */ -+#endif -+ New(73, ysave, 1, struct ysv); -+ SAVEDESTRUCTOR_X(yydestruct, ysave); -+ ysave->oldyydebug = yydebug; -+ ysave->oldyynerrs = yynerrs; -+ ysave->oldyyerrflag = yyerrflag; -+ ysave->oldyychar = yychar; -+ ysave->oldyyval = yyval; -+ ysave->oldyylval = yylval; - -- if (yys = getenv("YYDEBUG")) -+#if YYDEBUG -+ if ((yys = getenv("YYDEBUG"))) - { - yyn = *yys; - if (yyn >= '0' && yyn <= '9') -@@ -1501,12 +1449,22 @@ - yyerrflag = 0; - yychar = (-1); - -+ /* -+ ** Initialize private stacks (yyparse may be called from an action) -+ */ -+ New(73, yyss, yystacksize, short); -+ New(73, yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = yyss; -+ ysave->yyvs = yyvs; -+ if (!yyvs || !yyss) -+ goto yyoverflow; -+ - yyssp = yyss; - yyvsp = yyvs; - *yyssp = yystate = 0; - - yyloop: -- if (yyn = yydefred[yystate]) goto yyreduce; -+ if ((yyn = yydefred[yystate])) goto yyreduce; - if (yychar < 0) - { - if ((yychar = yylex()) < 0) yychar = 0; -@@ -1516,7 +1474,7 @@ - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -- printf("yydebug: state %d, reading %d (%s)\n", yystate, -+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, - yychar, yys); - } - #endif -@@ -1526,12 +1484,24 @@ - { - #if YYDEBUG - if (yydebug) -- printf("yydebug: state %d, shifting to state %d\n", -+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", - yystate, yytable[yyn]); - #endif - if (yyssp >= yyss + yystacksize - 1) - { -+ /* -+ ** reallocate and recover. Note that pointers -+ ** have to be reset, or bad things will happen -+ */ -+ int yyps_index = (yyssp - yyss); -+ int yypv_index = (yyvsp - yyvs); -+ yystacksize += YYSTACKSIZE; -+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = Renew(yyss, yystacksize, short); -+ if (!yyvs || !yyss) - goto yyoverflow; -+ yyssp = yyss + yyps_index; -+ yyvsp = yyvs + yypv_index; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; -@@ -1547,14 +1517,14 @@ - } - if (yyerrflag) goto yyinrecovery; - #ifdef lint -- goto yynewerror; -+ - #endif --yynewerror: -+ - yyerror("syntax error"); - #ifdef lint -- goto yyerrlab; -+ - #endif --yyerrlab: -+ - ++yynerrs; - yyinrecovery: - if (yyerrflag < 3) -@@ -1567,12 +1537,24 @@ - { - #if YYDEBUG - if (yydebug) -- printf("yydebug: state %d, error recovery shifting\ -+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery shifting\ - to state %d\n", *yyssp, yytable[yyn]); - #endif - if (yyssp >= yyss + yystacksize - 1) - { -+ /* -+ ** reallocate and recover. Note that pointers -+ ** have to be reset, or bad things will happen -+ */ -+ int yyps_index = (yyssp - yyss); -+ int yypv_index = (yyvsp - yyvs); -+ yystacksize += YYSTACKSIZE; -+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = Renew(yyss, yystacksize, short); -+ if (!yyvs || !yyss) - goto yyoverflow; -+ yyssp = yyss + yyps_index; -+ yyvsp = yyvs + yypv_index; - } - *++yyssp = yystate = yytable[yyn]; - *++yyvsp = yylval; -@@ -1582,7 +1564,7 @@ - { - #if YYDEBUG - if (yydebug) -- printf("yydebug: error recovery discarding state %d\n", -+ PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", - *yyssp); - #endif - if (yyssp <= yyss) goto yyabort; -@@ -1600,7 +1582,7 @@ - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -- printf("yydebug: state %d, error recovery discards token %d (%s)\n", -+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", - yystate, yychar, yys); - } - #endif -@@ -1610,7 +1592,7 @@ - yyreduce: - #if YYDEBUG - if (yydebug) -- printf("yydebug: state %d, reducing by rule %d (%s)\n", -+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", - yystate, yyn, yyrule[yyn]); - #endif - yym = yylen[yyn]; -@@ -2473,7 +2455,7 @@ - #line 790 "perly.y" - { yyval.opval = yyvsp[0].opval; } - break; --#line 2477 "y.tab.c" -+#line 2459 "perly.c" - } - yyssp -= yym; - yystate = *yyssp; -@@ -2483,7 +2465,7 @@ - { - #if YYDEBUG - if (yydebug) -- printf("yydebug: after reduction, shifting from state 0 to\ -+ PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\ - state %d\n", YYFINAL); - #endif - yystate = YYFINAL; -@@ -2498,7 +2480,7 @@ - yys = 0; - if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; - if (!yys) yys = "illegal-symbol"; -- printf("yydebug: state %d, reading %d (%s)\n", -+ PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", - YYFINAL, yychar, yys); - } - #endif -@@ -2513,20 +2495,50 @@ - yystate = yydgoto[yym]; - #if YYDEBUG - if (yydebug) -- printf("yydebug: after reduction, shifting from state %d \ -+ PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state %d \ - to state %d\n", *yyssp, yystate); - #endif - if (yyssp >= yyss + yystacksize - 1) - { -+ /* -+ ** reallocate and recover. Note that pointers -+ ** have to be reset, or bad things will happen -+ */ -+ int yyps_index = (yyssp - yyss); -+ int yypv_index = (yyvsp - yyvs); -+ yystacksize += YYSTACKSIZE; -+ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); -+ ysave->yyss = Renew(yyss, yystacksize, short); -+ if (!yyvs || !yyss) - goto yyoverflow; -+ yyssp = yyss + yyps_index; -+ yyvsp = yyvs + yypv_index; - } - *++yyssp = yystate; - *++yyvsp = yyval; - goto yyloop; - yyoverflow: -- yyerror("yacc stack overflow"); -+ yyerror("Out of memory for yacc stack"); - yyabort: -- return (1); -+ retval = 1; - yyaccept: -- return (0); -+#ifdef USE_ITHREADS -+ LEAVE; /* force yydestruct() before we return */ -+#endif -+ return retval; -+} -+ -+static void -+yydestruct(pTHX_ 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); - } +*** perly.c.orig ma 25 maalis 17.32.52 2002 +--- perly.c ma 25 maalis 17.32.53 2002 +*************** +*** 1,5 **** + #ifndef lint +! static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; + #endif + #define YYBYACC 1 + #line 16 "perly.y" +--- 1,5 ---- + #ifndef lint +! /* static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/91"; */ + #endif + #define YYBYACC 1 + #line 16 "perly.y" +*************** +*** 9,15 **** + #if defined(EBCDIC) || defined(VMS) + #undef YYDEBUG + #endif +! #define dep() deprecate("\"do\" to call subroutines") + + /* stuff included here to make perly_c.diff apply better */ + +--- 9,15 ---- + #if defined(EBCDIC) || defined(VMS) + #undef YYDEBUG + #endif +! #define dep() deprecate_old("\"do\" to call subroutines") + + /* stuff included here to make perly_c.diff apply better */ + +*************** +*** 50,119 **** + #define yylex yylex_r + #endif + +! #line 54 "y.tab.c" +! #define WORD 257 +! #define METHOD 258 +! #define FUNCMETH 259 +! #define THING 260 +! #define PMFUNC 261 +! #define PRIVATEREF 262 +! #define FUNC0SUB 263 +! #define UNIOPSUB 264 +! #define LSTOPSUB 265 +! #define LABEL 266 +! #define FORMAT 267 +! #define SUB 268 +! #define ANONSUB 269 +! #define PACKAGE 270 +! #define USE 271 +! #define WHILE 272 +! #define UNTIL 273 +! #define IF 274 +! #define UNLESS 275 +! #define ELSE 276 +! #define ELSIF 277 +! #define CONTINUE 278 +! #define FOR 279 +! #define LOOPEX 280 +! #define DOTDOT 281 +! #define FUNC0 282 +! #define FUNC1 283 +! #define FUNC 284 +! #define UNIOP 285 +! #define LSTOP 286 +! #define RELOP 287 +! #define EQOP 288 +! #define MULOP 289 +! #define ADDOP 290 +! #define DOLSHARP 291 +! #define DO 292 +! #define HASHBRACK 293 +! #define NOAMP 294 +! #define LOCAL 295 +! #define MY 296 +! #define MYSUB 297 +! #define COLONATTR 298 +! #define PREC_LOW 299 +! #define OROP 300 +! #define ANDOP 301 +! #define NOTOP 302 +! #define ASSIGNOP 303 +! #define OROR 304 +! #define ANDAND 305 +! #define BITOROP 306 +! #define BITANDOP 307 +! #define SHIFTOP 308 +! #define MATCHOP 309 +! #define UMINUS 310 +! #define REFGEN 311 +! #define POWOP 312 +! #define PREINC 313 +! #define PREDEC 314 +! #define POSTINC 315 +! #define POSTDEC 316 +! #define ARROW 317 + #define YYERRCODE 256 +! short yylhs[] = { -1, + 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, + 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, + 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, +--- 50,58 ---- + #define yylex yylex_r + #endif + +! #line 54 "perly.c" + #define YYERRCODE 256 +! static short yylhs[] = { -1, + 0, 9, 7, 6, 10, 8, 11, 11, 11, 12, + 12, 12, 12, 25, 25, 25, 25, 25, 25, 25, + 15, 15, 15, 14, 14, 43, 43, 13, 13, 13, +*************** +*** 135,141 **** + 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, + 21, 22, 23, 36, 36, 36, 36, + }; +! short yylen[] = { 2, + 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, + 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, + 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, +--- 74,80 ---- + 49, 34, 34, 35, 35, 35, 44, 24, 19, 20, + 21, 22, 23, 36, 36, 36, 36, + }; +! static short yylen[] = { 2, + 2, 4, 0, 0, 4, 0, 0, 2, 2, 2, + 1, 2, 3, 1, 1, 3, 3, 3, 3, 3, + 0, 2, 6, 7, 7, 0, 2, 8, 8, 10, +*************** +*** 157,163 **** + 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, + 2, 2, 2, 1, 1, 1, 1, + }; +! short yydefred[] = { 4, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, +--- 96,102 ---- + 1, 0, 1, 0, 1, 2, 1, 2, 2, 2, + 2, 2, 2, 1, 1, 1, 1, + }; +! static short yydefred[] = { 4, + 0, 7, 0, 45, 58, 56, 0, 56, 56, 8, + 46, 9, 11, 48, 0, 47, 49, 50, 0, 0, + 0, 70, 71, 0, 14, 3, 173, 0, 0, 154, +*************** +*** 199,205 **** + 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, + 0, 33, 0, 23, + }; +! short yydgoto[] = { 1, + 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, + 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, + 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, +--- 138,144 ---- + 0, 22, 0, 0, 0, 31, 5, 0, 30, 0, + 0, 33, 0, 23, + }; +! static short yydgoto[] = { 1, + 10, 11, 20, 104, 19, 2, 95, 370, 98, 359, + 3, 12, 13, 70, 375, 285, 72, 73, 74, 75, + 76, 77, 78, 79, 291, 81, 292, 281, 283, 286, +*************** +*** 207,213 **** + 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, + 85, 86, 87, 15, 16, 17, 18, 93, 278, + }; +! short yysindex[] = { 0, + 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, + 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, + 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, +--- 146,152 ---- + 194, 327, 156, 289, 271, 225, 14, 83, 137, 84, + 85, 86, 87, 15, 16, 17, 18, 93, 278, + }; +! static short yysindex[] = { 0, + 0, 0, -132, 0, 0, 0, -51, 0, 0, 0, + 0, 0, 0, 0, 650, 0, 0, 0, -239, -215, + 5, 0, 0, -215, 0, 0, 0, -31, -31, 0, +*************** +*** 249,255 **** + 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, + 216, 0, -123, 0, + }; +! short yyrindex[] = { 0, + 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +--- 188,194 ---- + 449, 0, 2181, -150, 340, 0, 0, 355, 0, 216, + 216, 0, -123, 0, + }; +! static short yyrindex[] = { 0, + 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 274, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +*************** +*** 291,297 **** + 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, + 0, 0, 179, 0, + }; +! short yygindex[] = { 0, + 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, + -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, + 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, +--- 230,236 ---- + 917, 0, 0, 119, 0, 0, 0, 0, 0, 0, + 0, 0, 179, 0, + }; +! static short yygindex[] = { 0, + 0, 0, 196, 425, 0, 0, -2, 0, 37, 634, + -94, 0, 0, 0, -323, -15, 2445, 0, 999, 414, + 417, 0, 0, 0, 463, -43, 0, 0, 321, -198, +*************** +*** 300,306 **** + 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + #define YYTABLESIZE 4568 +! short yytable[] = { 71, + 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, + 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, + 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, +--- 239,245 ---- + 0, 0, 0, 0, 0, 0, 0, 0, 0, + }; + #define YYTABLESIZE 4568 +! static short yytable[] = { 71, + 197, 65, 121, 227, 65, 111, 220, 22, 198, 293, + 139, 296, 315, 275, 305, 102, 273, 88, 113, 228, + 60, 113, 279, 65, 317, 60, 182, 254, 325, 101, +*************** +*** 759,765 **** + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 77, 77, + }; +! short yycheck[] = { 15, + 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, + 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, + 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, +--- 698,704 ---- + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 77, 77, + }; +! static short yycheck[] = { 15, + 95, 36, 46, 41, 36, 40, 59, 59, 100, 208, + 54, 41, 59, 199, 41, 40, 196, 257, 41, 93, + 123, 44, 202, 36, 93, 59, 40, 40, 59, 29, +*************** +*** 1224,1230 **** + #endif + #define YYMAXTOKEN 317 + #if YYDEBUG +! char *yyname[] = { + "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, + 0,0,0,0,0,"':'","';'",0,0,0,"'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +--- 1163,1169 ---- + #endif + #define YYMAXTOKEN 317 + #if YYDEBUG +! static char *yyname[] = { + "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + "'!'",0,0,"'$'","'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'",0,0,0,0,0,0,0, + 0,0,0,0,0,"':'","';'",0,0,0,"'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +*************** +*** 1241,1247 **** + "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", + "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", + }; +! char *yyrule[] = { + "$accept : prog", + "prog : progstart lineseq", + "block : '{' remember lineseq '}'", +--- 1180,1186 ---- + "ANDAND","BITOROP","BITANDOP","SHIFTOP","MATCHOP","UMINUS","REFGEN","POWOP", + "PREINC","PREDEC","POSTINC","POSTDEC","ARROW", + }; +! static char *yyrule[] = { + "$accept : prog", + "prog : progstart lineseq", + "block : '{' remember lineseq '}'", +*************** +*** 1456,1472 **** + #define YYMAXDEPTH 500 + #endif + #endif +- int yydebug; +- int yynerrs; +- int yyerrflag; +- int yychar; +- short *yyssp; +- YYSTYPE *yyvsp; +- YYSTYPE yyval; +- YYSTYPE yylval; +- short yyss[YYSTACKSIZE]; +- YYSTYPE yyvs[YYSTACKSIZE]; +- #define yystacksize YYSTACKSIZE + #line 793 "perly.y" + /* PROGRAM */ + +--- 1395,1400 ---- +*************** +*** 1477,1483 **** + #endif + #define yyparse() Perl_yyparse(pTHX) + +! #line 1481 "y.tab.c" + #define YYABORT goto yyabort + #define YYACCEPT goto yyaccept + #define YYERROR goto yyerrlab +--- 1405,1411 ---- + #endif + #define yyparse() Perl_yyparse(pTHX) + +! #line 1409 "perly.c" + #define YYABORT goto yyabort + #define YYACCEPT goto yyaccept + #define YYERROR goto yyerrlab +*************** +*** 1485,1495 **** + yyparse() + { + register int yym, yyn, yystate; + #if YYDEBUG + register char *yys; +! extern char *getenv(); + +! if (yys = getenv("YYDEBUG")) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') +--- 1413,1443 ---- + yyparse() + { + register int yym, yyn, yystate; ++ register short *yyssp; ++ register YYSTYPE *yyvsp; ++ short* yyss; ++ YYSTYPE* yyvs; ++ unsigned yystacksize = YYSTACKSIZE; ++ int retval = 0; + #if YYDEBUG + register char *yys; +! #endif + +! struct ysv *ysave; +! #ifdef USE_ITHREADS +! ENTER; /* force yydestruct() before we return */ +! #endif +! New(73, ysave, 1, struct ysv); +! SAVEDESTRUCTOR_X(yydestruct, ysave); +! ysave->oldyydebug = yydebug; +! ysave->oldyynerrs = yynerrs; +! ysave->oldyyerrflag = yyerrflag; +! ysave->oldyychar = yychar; +! ysave->oldyyval = yyval; +! ysave->oldyylval = yylval; +! +! #if YYDEBUG +! if ((yys = getenv("YYDEBUG"))) + { + yyn = *yys; + if (yyn >= '0' && yyn <= '9') +*************** +*** 1501,1512 **** + yyerrflag = 0; + yychar = (-1); + + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; + + yyloop: +! if (yyn = yydefred[yystate]) goto yyreduce; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +--- 1449,1470 ---- + yyerrflag = 0; + yychar = (-1); + ++ /* ++ ** Initialize private stacks (yyparse may be called from an action) ++ */ ++ New(73, yyss, yystacksize, short); ++ New(73, yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = yyss; ++ ysave->yyvs = yyvs; ++ if (!yyvs || !yyss) ++ goto yyoverflow; ++ + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; + + yyloop: +! if ((yyn = yydefred[yystate])) goto yyreduce; + if (yychar < 0) + { + if ((yychar = yylex()) < 0) yychar = 0; +*************** +*** 1516,1522 **** + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +! printf("yydebug: state %d, reading %d (%s)\n", yystate, + yychar, yys); + } + #endif +--- 1474,1480 ---- + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", yystate, + yychar, yys); + } + #endif +*************** +*** 1526,1537 **** + { + #if YYDEBUG + if (yydebug) +! printf("yydebug: state %d, shifting to state %d\n", + yystate, yytable[yyn]); + #endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; +--- 1484,1507 ---- + { + #if YYDEBUG + if (yydebug) +! PerlIO_printf(Perl_debug_log, "yydebug: state %d, shifting to state %d\n", + yystate, yytable[yyn]); + #endif + if (yyssp >= yyss + yystacksize - 1) + { ++ /* ++ ** reallocate and recover. Note that pointers ++ ** have to be reset, or bad things will happen ++ */ ++ int yyps_index = (yyssp - yyss); ++ int yypv_index = (yyvsp - yyvs); ++ yystacksize += YYSTACKSIZE; ++ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = Renew(yyss, yystacksize, short); ++ if (!yyvs || !yyss) + goto yyoverflow; ++ yyssp = yyss + yyps_index; ++ yyvsp = yyvs + yypv_index; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; +*************** +*** 1547,1560 **** + } + if (yyerrflag) goto yyinrecovery; + #ifdef lint +! goto yynewerror; + #endif +! yynewerror: + yyerror("syntax error"); + #ifdef lint +! goto yyerrlab; + #endif +! yyerrlab: + ++yynerrs; + yyinrecovery: + if (yyerrflag < 3) +--- 1517,1530 ---- + } + if (yyerrflag) goto yyinrecovery; + #ifdef lint +! + #endif +! + yyerror("syntax error"); + #ifdef lint +! + #endif +! + ++yynerrs; + yyinrecovery: + if (yyerrflag < 3) +*************** +*** 1567,1578 **** + { + #if YYDEBUG + if (yydebug) +! printf("yydebug: state %d, error recovery shifting\ + to state %d\n", *yyssp, yytable[yyn]); + #endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; +--- 1537,1560 ---- + { + #if YYDEBUG + if (yydebug) +! PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery shifting\ + to state %d\n", *yyssp, yytable[yyn]); + #endif + if (yyssp >= yyss + yystacksize - 1) + { ++ /* ++ ** reallocate and recover. Note that pointers ++ ** have to be reset, or bad things will happen ++ */ ++ int yyps_index = (yyssp - yyss); ++ int yypv_index = (yyvsp - yyvs); ++ yystacksize += YYSTACKSIZE; ++ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = Renew(yyss, yystacksize, short); ++ if (!yyvs || !yyss) + goto yyoverflow; ++ yyssp = yyss + yyps_index; ++ yyvsp = yyvs + yypv_index; + } + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; +*************** +*** 1582,1588 **** + { + #if YYDEBUG + if (yydebug) +! printf("yydebug: error recovery discarding state %d\n", + *yyssp); + #endif + if (yyssp <= yyss) goto yyabort; +--- 1564,1570 ---- + { + #if YYDEBUG + if (yydebug) +! PerlIO_printf(Perl_debug_log, "yydebug: error recovery discarding state %d\n", + *yyssp); + #endif + if (yyssp <= yyss) goto yyabort; +*************** +*** 1600,1606 **** + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +! printf("yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); + } + #endif +--- 1582,1588 ---- + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +! PerlIO_printf(Perl_debug_log, "yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); + } + #endif +*************** +*** 1610,1616 **** + yyreduce: + #if YYDEBUG + if (yydebug) +! printf("yydebug: state %d, reducing by rule %d (%s)\n", + yystate, yyn, yyrule[yyn]); + #endif + yym = yylen[yyn]; +--- 1592,1598 ---- + yyreduce: + #if YYDEBUG + if (yydebug) +! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reducing by rule %d (%s)\n", + yystate, yyn, yyrule[yyn]); + #endif + yym = yylen[yyn]; +*************** +*** 2473,2479 **** + #line 790 "perly.y" + { yyval.opval = yyvsp[0].opval; } + break; +! #line 2477 "y.tab.c" + } + yyssp -= yym; + yystate = *yyssp; +--- 2455,2461 ---- + #line 790 "perly.y" + { yyval.opval = yyvsp[0].opval; } + break; +! #line 2459 "perly.c" + } + yyssp -= yym; + yystate = *yyssp; +*************** +*** 2483,2489 **** + { + #if YYDEBUG + if (yydebug) +! printf("yydebug: after reduction, shifting from state 0 to\ + state %d\n", YYFINAL); + #endif + yystate = YYFINAL; +--- 2465,2471 ---- + { + #if YYDEBUG + if (yydebug) +! PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state 0 to\ + state %d\n", YYFINAL); + #endif + yystate = YYFINAL; +*************** +*** 2498,2504 **** + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +! printf("yydebug: state %d, reading %d (%s)\n", + YYFINAL, yychar, yys); + } + #endif +--- 2480,2486 ---- + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; +! PerlIO_printf(Perl_debug_log, "yydebug: state %d, reading %d (%s)\n", + YYFINAL, yychar, yys); + } + #endif +*************** +*** 2513,2532 **** + yystate = yydgoto[yym]; + #if YYDEBUG + if (yydebug) +! printf("yydebug: after reduction, shifting from state %d \ + to state %d\n", *yyssp, yystate); + #endif + if (yyssp >= yyss + yystacksize - 1) + { + goto yyoverflow; + } + *++yyssp = yystate; + *++yyvsp = yyval; + goto yyloop; + yyoverflow: +! yyerror("yacc stack overflow"); + yyabort: +! return (1); + yyaccept: +! return (0); + } +--- 2495,2544 ---- + yystate = yydgoto[yym]; + #if YYDEBUG + if (yydebug) +! PerlIO_printf(Perl_debug_log, "yydebug: after reduction, shifting from state %d \ + to state %d\n", *yyssp, yystate); + #endif + if (yyssp >= yyss + yystacksize - 1) + { ++ /* ++ ** reallocate and recover. Note that pointers ++ ** have to be reset, or bad things will happen ++ */ ++ int yyps_index = (yyssp - yyss); ++ int yypv_index = (yyvsp - yyvs); ++ yystacksize += YYSTACKSIZE; ++ ysave->yyvs = Renew(yyvs, yystacksize, YYSTYPE); ++ ysave->yyss = Renew(yyss, yystacksize, short); ++ if (!yyvs || !yyss) + goto yyoverflow; ++ yyssp = yyss + yyps_index; ++ yyvsp = yyvs + yypv_index; + } + *++yyssp = yystate; + *++yyvsp = yyval; + goto yyloop; + yyoverflow: +! yyerror("Out of memory for yacc stack"); + yyabort: +! retval = 1; + yyaccept: +! #ifdef USE_ITHREADS +! LEAVE; /* force yydestruct() before we return */ +! #endif +! return retval; +! } +! +! static void +! yydestruct(pTHX_ 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); + } diff --git a/vms/perly_c.vms b/vms/perly_c.vms index 463a5ed..634dba9 100644 --- a/vms/perly_c.vms +++ b/vms/perly_c.vms @@ -7,10 +7,10 @@ #include "EXTERN.h" #define PERL_IN_PERLY_C #include "perl.h" -#ifdef EBCDIC +#if defined(EBCDIC) || defined(VMS) #undef YYDEBUG #endif -#define dep() deprecate("\"do\" to call subroutines") +#define dep() deprecate_old("\"do\" to call subroutines") /* stuff included here to make perly_c.diff apply better */