From: Paul Eggert Date: Sun, 15 Dec 2002 09:20:24 +0000 (+0000) Subject: Undo most of the 2002-11-12 yychar -> yytoken patch, as it broke X-Git-Tag: BISON-1_875~60 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/a20713a4af1785b71ff4408f3ed201508a6736f1?ds=inline Undo most of the 2002-11-12 yychar -> yytoken patch, as it broke GCC 3.2.1 (which depends on yychar == YYEMPTY when there is no lookahead symbol, and which sets yychar in parser actions) and it disagreed with the Bison documentation. This should fix the bug reported by Andrew Walrond in . (YYTRANSLATE): Don't check for negative argument, as the caller now does that. (yyclearin, YYBACKUP, yyparse): Use yychar, not yytoken. (YYEMPTY): Parenthesize right hand side, since others use it. (yyparse): Don't assume that our generated code is the only code that sets yychar. --- diff --git a/data/yacc.c b/data/yacc.c index d0bf6857..5fd0c32f 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -335,8 +335,7 @@ union yyalloc #define YYMAXUTOK ]b4_user_token_number_max[ #define YYTRANSLATE(YYX) \ - ((YYX <= 0) ? YYEOF : \ - (unsigned)(YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const ]b4_int_type_for([b4_translate])[ yytranslate[] = @@ -462,8 +461,8 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] = #endif #define yyerrok (yyerrstatus = 0) -#define yyclearin (yytoken = YYEMPTY) -#define YYEMPTY -2 +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab @@ -480,7 +479,7 @@ static const ]b4_int_type_for([b4_stos])[ yystos[] = #define YYBACKUP(Token, Value) \ do \ - if (yytoken == YYEMPTY && yylen == 1) \ + if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ @@ -790,7 +789,7 @@ b4_c_function_def([yyparse], [int], b4_parse_param) yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = yytoken = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack @@ -900,20 +899,21 @@ yybackup: /* Not known => get a lookahead token if don't already have one. */ - /* YYTOKEN is either YYEMPTY or YYEOF or a valid token. */ - if (yytoken == YYEMPTY) + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; - yytoken = YYTRANSLATE (yychar); } - if (yytoken == YYEOF) + if (yychar <= YYEOF) { + yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { + yytoken = YYTRANSLATE (yychar); YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } @@ -938,8 +938,8 @@ yybackup: YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ - if (yytoken != YYEOF) - yytoken = YYEMPTY; + if (yychar != YYEOF) + yychar = YYEMPTY; *++yyvsp = yylval; ]b4_location_if([ *++yylsp = yylloc;])[ @@ -1080,7 +1080,7 @@ yyerrlab: error, discard it. */ /* Return failure if at end of input. */ - if (yytoken == YYEOF) + if (yychar == YYEOF) { /* Pop the error token. */ YYPOPSTACK; @@ -1096,7 +1096,7 @@ yyerrlab: YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); yydestruct (yytoken, &yylval]b4_location_if([, &yylloc])[); - yytoken = YYEMPTY; + yychar = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error