summaryrefslogtreecommitdiff
path: root/toke.c
diff options
context:
space:
mode:
authorThomas Dorner <Thomas.Dorner@start.de>1998-09-29 14:29:36 +0100
committerJarkko Hietaniemi <jhi@iki.fi>1998-10-17 14:49:46 +0000
commita1a0e61e30ae0c76c1d9cbf46512c19c0a966791 (patch)
tree87df3aae4267240a5d481ebb6ffe2eb12fe14667 /toke.c
parent5b7e2fe55885acf170d7496132b9ef976ea5c02b (diff)
downloadperl-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.c47
1 files changed, 35 insertions, 12 deletions
diff --git a/toke.c b/toke.c
index 8664b8f5e2..c4ecaa8e12 100644
--- a/toke.c
+++ b/toke.c
@@ -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(';');