diff options
author | Thomas Dorner <Thomas.Dorner@start.de> | 1998-09-29 14:29:36 +0100 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 1998-10-17 14:49:46 +0000 |
commit | a1a0e61e30ae0c76c1d9cbf46512c19c0a966791 (patch) | |
tree | 87df3aae4267240a5d481ebb6ffe2eb12fe14667 /toke.c | |
parent | 5b7e2fe55885acf170d7496132b9ef976ea5c02b (diff) | |
download | perl-a1a0e61e30ae0c76c1d9cbf46512c19c0a966791.tar.gz |
POSIX BC2000 port from perl-mvs:
Subject: Ported perl 5.005.02 to BS2000 / POSIX
Message-ID: <9CE47B416A24D2118BC40000F84009B20B72C5@start.de>
p4raw-id: //depot/cfgperl@2009
Diffstat (limited to 'toke.c')
-rw-r--r-- | toke.c | 47 |
1 files changed, 35 insertions, 12 deletions
@@ -97,6 +97,20 @@ static char ident_too_long[] = "Identifier too long"; #undef ff_next #endif +#ifdef USE_PURE_BISON +YYSTYPE* yylval_pointer = NULL; +int* yychar_pointer = NULL; +#ifdef EMBED +#undef yylval +#undef yychar +#endif +#define yylval (*yylval_pointer) +#define yychar (*yychar_pointer) +#define YYLEXPARAM yylval_pointer,yychar_pointer +#else +#define YYLEXPARAM +#endif + #include "keywords.h" #ifdef CLINE @@ -772,7 +786,7 @@ sublex_done(void) if (PL_lex_casemods) { /* oops, we've got some unbalanced parens */ PL_lex_state = LEX_INTERPCASEMOD; - return yylex(); + return yylex(YYLEXPARAM); } /* Is there a right-hand side to take care of? */ @@ -1559,8 +1573,12 @@ filter_gets(register SV *sv, register PerlIO *fp, STRLEN append) if we already built the token before, use it. */ -int -yylex(void) +int yylex +#ifdef USE_PURE_BISON +(YYSTYPE* lvalp, int* lcharp) +#else +(void) +#endif { dTHR; register char *s; @@ -1570,6 +1588,11 @@ yylex(void) GV *gv = Nullgv; GV **gvp = 0; +#ifdef USE_PURE_BISON + yylval_pointer = lvalp; + yychar_pointer = lcharp; +#endif + /* check if there's an identifier for us to look at */ if (PL_pending_ident) { /* pit holds the identifier we read and pending_ident is reset */ @@ -1707,7 +1730,7 @@ yylex(void) if (PL_bufptr != PL_bufend) PL_bufptr += 2; PL_lex_state = LEX_INTERPCONCAT; - return yylex(); + return yylex(YYLEXPARAM); } else { s = PL_bufptr + 1; @@ -1751,7 +1774,7 @@ yylex(void) Aop(OP_CONCAT); } else - return yylex(); + return yylex(YYLEXPARAM); } case LEX_INTERPPUSH: @@ -1784,7 +1807,7 @@ yylex(void) s = PL_bufptr; Aop(OP_CONCAT); } - return yylex(); + return yylex(YYLEXPARAM); case LEX_INTERPENDMAYBE: if (intuit_more(PL_bufptr)) { @@ -1833,11 +1856,11 @@ yylex(void) Aop(OP_CONCAT); else { PL_bufptr = s; - return yylex(); + return yylex(YYLEXPARAM); } } - return yylex(); + return yylex(YYLEXPARAM); case LEX_FORMLINE: PL_lex_state = LEX_NORMAL; s = scan_formline(PL_bufptr); @@ -2125,7 +2148,7 @@ yylex(void) if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) { PL_bufptr = s; PL_lex_state = LEX_FORMLINE; - return yylex(); + return yylex(YYLEXPARAM); } goto retry; case '\r': @@ -2149,7 +2172,7 @@ yylex(void) if (PL_lex_formbrack && PL_lex_brackets <= PL_lex_formbrack) { PL_bufptr = s; PL_lex_state = LEX_FORMLINE; - return yylex(); + return yylex(YYLEXPARAM); } } else { @@ -2486,7 +2509,7 @@ yylex(void) if (PL_lex_fakebrack) { PL_lex_state = LEX_INTERPEND; PL_bufptr = s; - return yylex(); /* ignore fake brackets */ + return yylex(YYLEXPARAM); /* ignore fake brackets */ } if (*s == '-' && s[1] == '>') PL_lex_state = LEX_INTERPENDMAYBE; @@ -2497,7 +2520,7 @@ yylex(void) if (PL_lex_brackets < PL_lex_fakebrack) { PL_bufptr = s; PL_lex_fakebrack = 0; - return yylex(); /* ignore fake brackets */ + return yylex(YYLEXPARAM); /* ignore fake brackets */ } force_next('}'); TOKEN(';'); |