1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-20 11:11:24 +00:00
freebsd/contrib/perl5/perly_c.diff
2000-06-25 11:04:01 +00:00

184 lines
4.6 KiB
Diff

*** y.tab.c.orig Thu Aug 26 22:31:26 1999
--- y.tab.c Thu Aug 26 22:32:22 1999
***************
*** 1447,1456 ****
yyparse()
{
register int yym, yyn, yystate;
#if YYDEBUG
register char *yys;
! extern char *getenv();
if (yys = getenv("YYDEBUG"))
{
yyn = *yys;
--- 1447,1473 ----
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;
+ 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;
***************
*** 1463,1468 ****
--- 1480,1495 ----
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;
***************
*** 1493,1499 ****
#endif
if (yyssp >= yyss + yystacksize - 1)
{
! goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
--- 1520,1538 ----
#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;
***************
*** 1534,1540 ****
#endif
if (yyssp >= yyss + yystacksize - 1)
{
! goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
--- 1573,1591 ----
#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;
***************
*** 2473,2487 ****
#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);
}
--- 2524,2569 ----
#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:
! 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);
}