Skip to content

Commit e0d0ebd

Browse files
committed
Fix GH-14937: Bison parser generates different zendtokentype constants
1 parent afb1c57 commit e0d0ebd

File tree

1 file changed

+148
-148
lines changed

1 file changed

+148
-148
lines changed

Zend/zend_language_parser.y

Lines changed: 148 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -86,163 +86,163 @@ static YYSIZE_T zend_yytnamerr(char*, const char*);
8686
%precedence T_ELSEIF
8787
%precedence T_ELSE
8888

89-
%token <ast> T_LNUMBER "integer"
90-
%token <ast> T_DNUMBER "floating-point number"
91-
%token <ast> T_STRING "identifier"
92-
%token <ast> T_NAME_FULLY_QUALIFIED "fully qualified name"
93-
%token <ast> T_NAME_RELATIVE "namespace-relative name"
94-
%token <ast> T_NAME_QUALIFIED "namespaced name"
95-
%token <ast> T_VARIABLE "variable"
96-
%token <ast> T_INLINE_HTML
97-
%token <ast> T_ENCAPSED_AND_WHITESPACE "string content"
98-
%token <ast> T_CONSTANT_ENCAPSED_STRING "quoted string"
99-
%token <ast> T_STRING_VARNAME "variable name"
100-
%token <ast> T_NUM_STRING "number"
101-
102-
%token <ident> T_INCLUDE "'include'"
103-
%token <ident> T_INCLUDE_ONCE "'include_once'"
104-
%token <ident> T_EVAL "'eval'"
105-
%token <ident> T_REQUIRE "'require'"
106-
%token <ident> T_REQUIRE_ONCE "'require_once'"
107-
%token <ident> T_LOGICAL_OR "'or'"
108-
%token <ident> T_LOGICAL_XOR "'xor'"
109-
%token <ident> T_LOGICAL_AND "'and'"
110-
%token <ident> T_PRINT "'print'"
111-
%token <ident> T_YIELD "'yield'"
112-
%token <ident> T_YIELD_FROM "'yield from'"
113-
%token <ident> T_INSTANCEOF "'instanceof'"
114-
%token <ident> T_NEW "'new'"
115-
%token <ident> T_CLONE "'clone'"
116-
%token <ident> T_EXIT "'exit'"
117-
%token <ident> T_IF "'if'"
118-
%token <ident> T_ELSEIF "'elseif'"
119-
%token <ident> T_ELSE "'else'"
120-
%token <ident> T_ENDIF "'endif'"
121-
%token <ident> T_ECHO "'echo'"
122-
%token <ident> T_DO "'do'"
123-
%token <ident> T_WHILE "'while'"
124-
%token <ident> T_ENDWHILE "'endwhile'"
125-
%token <ident> T_FOR "'for'"
126-
%token <ident> T_ENDFOR "'endfor'"
127-
%token <ident> T_FOREACH "'foreach'"
128-
%token <ident> T_ENDFOREACH "'endforeach'"
129-
%token <ident> T_DECLARE "'declare'"
130-
%token <ident> T_ENDDECLARE "'enddeclare'"
131-
%token <ident> T_AS "'as'"
132-
%token <ident> T_SWITCH "'switch'"
133-
%token <ident> T_ENDSWITCH "'endswitch'"
134-
%token <ident> T_CASE "'case'"
135-
%token <ident> T_DEFAULT "'default'"
136-
%token <ident> T_MATCH "'match'"
137-
%token <ident> T_BREAK "'break'"
138-
%token <ident> T_CONTINUE "'continue'"
139-
%token <ident> T_GOTO "'goto'"
140-
%token <ident> T_FUNCTION "'function'"
141-
%token <ident> T_FN "'fn'"
142-
%token <ident> T_CONST "'const'"
143-
%token <ident> T_RETURN "'return'"
144-
%token <ident> T_TRY "'try'"
145-
%token <ident> T_CATCH "'catch'"
146-
%token <ident> T_FINALLY "'finally'"
147-
%token <ident> T_THROW "'throw'"
148-
%token <ident> T_USE "'use'"
149-
%token <ident> T_INSTEADOF "'insteadof'"
150-
%token <ident> T_GLOBAL "'global'"
151-
%token <ident> T_STATIC "'static'"
152-
%token <ident> T_ABSTRACT "'abstract'"
153-
%token <ident> T_FINAL "'final'"
154-
%token <ident> T_PRIVATE "'private'"
155-
%token <ident> T_PROTECTED "'protected'"
156-
%token <ident> T_PUBLIC "'public'"
157-
%token <ident> T_READONLY "'readonly'"
158-
%token <ident> T_VAR "'var'"
159-
%token <ident> T_UNSET "'unset'"
160-
%token <ident> T_ISSET "'isset'"
161-
%token <ident> T_EMPTY "'empty'"
162-
%token <ident> T_HALT_COMPILER "'__halt_compiler'"
163-
%token <ident> T_CLASS "'class'"
164-
%token <ident> T_TRAIT "'trait'"
165-
%token <ident> T_INTERFACE "'interface'"
166-
%token <ident> T_ENUM "'enum'"
167-
%token <ident> T_EXTENDS "'extends'"
168-
%token <ident> T_IMPLEMENTS "'implements'"
169-
%token <ident> T_NAMESPACE "'namespace'"
170-
%token <ident> T_LIST "'list'"
171-
%token <ident> T_ARRAY "'array'"
172-
%token <ident> T_CALLABLE "'callable'"
173-
%token <ident> T_LINE "'__LINE__'"
174-
%token <ident> T_FILE "'__FILE__'"
175-
%token <ident> T_DIR "'__DIR__'"
176-
%token <ident> T_CLASS_C "'__CLASS__'"
177-
%token <ident> T_TRAIT_C "'__TRAIT__'"
178-
%token <ident> T_METHOD_C "'__METHOD__'"
179-
%token <ident> T_FUNC_C "'__FUNCTION__'"
180-
%token <ident> T_NS_C "'__NAMESPACE__'"
89+
%token <ast> T_LNUMBER 260 "integer"
90+
%token <ast> T_DNUMBER 261 "floating-point number"
91+
%token <ast> T_STRING 262 "identifier"
92+
%token <ast> T_NAME_FULLY_QUALIFIED 263 "fully qualified name"
93+
%token <ast> T_NAME_RELATIVE 264 "namespace-relative name"
94+
%token <ast> T_NAME_QUALIFIED 265 "namespaced name"
95+
%token <ast> T_VARIABLE 266 "variable"
96+
%token <ast> T_INLINE_HTML 267
97+
%token <ast> T_ENCAPSED_AND_WHITESPACE 268 "string content"
98+
%token <ast> T_CONSTANT_ENCAPSED_STRING 269 "quoted string"
99+
%token <ast> T_STRING_VARNAME 270 "variable name"
100+
%token <ast> T_NUM_STRING 271 "number"
101+
102+
%token <ident> T_INCLUDE 272 "'include'"
103+
%token <ident> T_INCLUDE_ONCE 273 "'include_once'"
104+
%token <ident> T_EVAL 274 "'eval'"
105+
%token <ident> T_REQUIRE 275 "'require'"
106+
%token <ident> T_REQUIRE_ONCE 276 "'require_once'"
107+
%token <ident> T_LOGICAL_OR 277 "'or'"
108+
%token <ident> T_LOGICAL_XOR 278 "'xor'"
109+
%token <ident> T_LOGICAL_AND 279 "'and'"
110+
%token <ident> T_PRINT 280 "'print'"
111+
%token <ident> T_YIELD 281 "'yield'"
112+
%token <ident> T_YIELD_FROM 282 "'yield from'"
113+
%token <ident> T_INSTANCEOF 283 "'instanceof'"
114+
%token <ident> T_NEW 284 "'new'"
115+
%token <ident> T_CLONE 285 "'clone'"
116+
%token <ident> T_EXIT 286 "'exit'"
117+
%token <ident> T_IF 287 "'if'"
118+
%token <ident> T_ELSEIF 288 "'elseif'"
119+
%token <ident> T_ELSE 289 "'else'"
120+
%token <ident> T_ENDIF 290 "'endif'"
121+
%token <ident> T_ECHO 291 "'echo'"
122+
%token <ident> T_DO 292 "'do'"
123+
%token <ident> T_WHILE 293 "'while'"
124+
%token <ident> T_ENDWHILE 294 "'endwhile'"
125+
%token <ident> T_FOR 295 "'for'"
126+
%token <ident> T_ENDFOR 296 "'endfor'"
127+
%token <ident> T_FOREACH 297 "'foreach'"
128+
%token <ident> T_ENDFOREACH 298 "'endforeach'"
129+
%token <ident> T_DECLARE 299 "'declare'"
130+
%token <ident> T_ENDDECLARE 300 "'enddeclare'"
131+
%token <ident> T_AS 301 "'as'"
132+
%token <ident> T_SWITCH 302 "'switch'"
133+
%token <ident> T_ENDSWITCH 303 "'endswitch'"
134+
%token <ident> T_CASE 304 "'case'"
135+
%token <ident> T_DEFAULT 305 "'default'"
136+
%token <ident> T_MATCH 306 "'match'"
137+
%token <ident> T_BREAK 307 "'break'"
138+
%token <ident> T_CONTINUE 308 "'continue'"
139+
%token <ident> T_GOTO 309 "'goto'"
140+
%token <ident> T_FUNCTION 310 "'function'"
141+
%token <ident> T_FN 311 "'fn'"
142+
%token <ident> T_CONST 312 "'const'"
143+
%token <ident> T_RETURN 313 "'return'"
144+
%token <ident> T_TRY 314 "'try'"
145+
%token <ident> T_CATCH 315 "'catch'"
146+
%token <ident> T_FINALLY 316 "'finally'"
147+
%token <ident> T_THROW 317 "'throw'"
148+
%token <ident> T_USE 318 "'use'"
149+
%token <ident> T_INSTEADOF 319 "'insteadof'"
150+
%token <ident> T_GLOBAL 320 "'global'"
151+
%token <ident> T_STATIC 321 "'static'"
152+
%token <ident> T_ABSTRACT 322 "'abstract'"
153+
%token <ident> T_FINAL 323 "'final'"
154+
%token <ident> T_PRIVATE 324 "'private'"
155+
%token <ident> T_PROTECTED 325 "'protected'"
156+
%token <ident> T_PUBLIC 326 "'public'"
157+
%token <ident> T_READONLY 327 "'readonly'"
158+
%token <ident> T_VAR 328 "'var'"
159+
%token <ident> T_UNSET 329 "'unset'"
160+
%token <ident> T_ISSET 330 "'isset'"
161+
%token <ident> T_EMPTY 331 "'empty'"
162+
%token <ident> T_HALT_COMPILER 332 "'__halt_compiler'"
163+
%token <ident> T_CLASS 333 "'class'"
164+
%token <ident> T_TRAIT 334 "'trait'"
165+
%token <ident> T_INTERFACE 335 "'interface'"
166+
%token <ident> T_ENUM 336 "'enum'"
167+
%token <ident> T_EXTENDS 337 "'extends'"
168+
%token <ident> T_IMPLEMENTS 338 "'implements'"
169+
%token <ident> T_NAMESPACE 339 "'namespace'"
170+
%token <ident> T_LIST 340 "'list'"
171+
%token <ident> T_ARRAY 341 "'array'"
172+
%token <ident> T_CALLABLE 342 "'callable'"
173+
%token <ident> T_LINE 343 "'__LINE__'"
174+
%token <ident> T_FILE 344 "'__FILE__'"
175+
%token <ident> T_DIR 345 "'__DIR__'"
176+
%token <ident> T_CLASS_C 346 "'__CLASS__'"
177+
%token <ident> T_TRAIT_C 347 "'__TRAIT__'"
178+
%token <ident> T_METHOD_C 348 "'__METHOD__'"
179+
%token <ident> T_FUNC_C 349 "'__FUNCTION__'"
180+
%token <ident> T_NS_C 350 "'__NAMESPACE__'"
181181

182182
%token END 0 "end of file"
183-
%token T_ATTRIBUTE "'#['"
184-
%token T_PLUS_EQUAL "'+='"
185-
%token T_MINUS_EQUAL "'-='"
186-
%token T_MUL_EQUAL "'*='"
187-
%token T_DIV_EQUAL "'/='"
188-
%token T_CONCAT_EQUAL "'.='"
189-
%token T_MOD_EQUAL "'%='"
190-
%token T_AND_EQUAL "'&='"
191-
%token T_OR_EQUAL "'|='"
192-
%token T_XOR_EQUAL "'^='"
193-
%token T_SL_EQUAL "'<<='"
194-
%token T_SR_EQUAL "'>>='"
195-
%token T_COALESCE_EQUAL "'??='"
196-
%token T_BOOLEAN_OR "'||'"
197-
%token T_BOOLEAN_AND "'&&'"
198-
%token T_IS_EQUAL "'=='"
199-
%token T_IS_NOT_EQUAL "'!='"
200-
%token T_IS_IDENTICAL "'==='"
201-
%token T_IS_NOT_IDENTICAL "'!=='"
202-
%token T_IS_SMALLER_OR_EQUAL "'<='"
203-
%token T_IS_GREATER_OR_EQUAL "'>='"
204-
%token T_SPACESHIP "'<=>'"
205-
%token T_SL "'<<'"
206-
%token T_SR "'>>'"
207-
%token T_INC "'++'"
208-
%token T_DEC "'--'"
209-
%token T_INT_CAST "'(int)'"
210-
%token T_DOUBLE_CAST "'(double)'"
211-
%token T_STRING_CAST "'(string)'"
212-
%token T_ARRAY_CAST "'(array)'"
213-
%token T_OBJECT_CAST "'(object)'"
214-
%token T_BOOL_CAST "'(bool)'"
215-
%token T_UNSET_CAST "'(unset)'"
216-
%token T_OBJECT_OPERATOR "'->'"
217-
%token T_NULLSAFE_OBJECT_OPERATOR "'?->'"
218-
%token T_DOUBLE_ARROW "'=>'"
219-
%token T_COMMENT "comment"
220-
%token T_DOC_COMMENT "doc comment"
221-
%token T_OPEN_TAG "open tag"
222-
%token T_OPEN_TAG_WITH_ECHO "'<?='"
223-
%token T_CLOSE_TAG "'?>'"
224-
%token T_WHITESPACE "whitespace"
225-
%token T_START_HEREDOC "heredoc start"
226-
%token T_END_HEREDOC "heredoc end"
227-
%token T_DOLLAR_OPEN_CURLY_BRACES "'${'"
228-
%token T_CURLY_OPEN "'{$'"
229-
%token T_PAAMAYIM_NEKUDOTAYIM "'::'"
230-
%token T_NS_SEPARATOR "'\\'"
231-
%token T_ELLIPSIS "'...'"
232-
%token T_COALESCE "'??'"
233-
%token T_POW "'**'"
234-
%token T_POW_EQUAL "'**='"
183+
%token T_ATTRIBUTE 351 "'#['"
184+
%token T_PLUS_EQUAL 352 "'+='"
185+
%token T_MINUS_EQUAL 353 "'-='"
186+
%token T_MUL_EQUAL 354 "'*='"
187+
%token T_DIV_EQUAL 355 "'/='"
188+
%token T_CONCAT_EQUAL 356 "'.='"
189+
%token T_MOD_EQUAL 357 "'%='"
190+
%token T_AND_EQUAL 358 "'&='"
191+
%token T_OR_EQUAL 359 "'|='"
192+
%token T_XOR_EQUAL 360 "'^='"
193+
%token T_SL_EQUAL 361 "'<<='"
194+
%token T_SR_EQUAL 362 "'>>='"
195+
%token T_COALESCE_EQUAL 363 "'??='"
196+
%token T_BOOLEAN_OR 364 "'||'"
197+
%token T_BOOLEAN_AND 365 "'&&'"
198+
%token T_IS_EQUAL 366 "'=='"
199+
%token T_IS_NOT_EQUAL 367 "'!='"
200+
%token T_IS_IDENTICAL 368 "'==='"
201+
%token T_IS_NOT_IDENTICAL 369 "'!=='"
202+
%token T_IS_SMALLER_OR_EQUAL 370 "'<='"
203+
%token T_IS_GREATER_OR_EQUAL 371 "'>='"
204+
%token T_SPACESHIP 372 "'<=>'"
205+
%token T_SL 373 "'<<'"
206+
%token T_SR 374 "'>>'"
207+
%token T_INC 375 "'++'"
208+
%token T_DEC 376 "'--'"
209+
%token T_INT_CAST 377 "'(int)'"
210+
%token T_DOUBLE_CAST 378 "'(double)'"
211+
%token T_STRING_CAST 379 "'(string)'"
212+
%token T_ARRAY_CAST 380 "'(array)'"
213+
%token T_OBJECT_CAST 381 "'(object)'"
214+
%token T_BOOL_CAST 382 "'(bool)'"
215+
%token T_UNSET_CAST 383 "'(unset)'"
216+
%token T_OBJECT_OPERATOR 384 "'->'"
217+
%token T_NULLSAFE_OBJECT_OPERATOR 385 "'?->'"
218+
%token T_DOUBLE_ARROW 386 "'=>'"
219+
%token T_COMMENT 387 "comment"
220+
%token T_DOC_COMMENT 388 "doc comment"
221+
%token T_OPEN_TAG 389 "open tag"
222+
%token T_OPEN_TAG_WITH_ECHO 390 "'<?='"
223+
%token T_CLOSE_TAG 391 "'?>'"
224+
%token T_WHITESPACE 392 "whitespace"
225+
%token T_START_HEREDOC 393 "heredoc start"
226+
%token T_END_HEREDOC 394 "heredoc end"
227+
%token T_DOLLAR_OPEN_CURLY_BRACES 395 "'${'"
228+
%token T_CURLY_OPEN 396 "'{$'"
229+
%token T_PAAMAYIM_NEKUDOTAYIM 397 "'::'"
230+
%token T_NS_SEPARATOR 398 "'\\'"
231+
%token T_ELLIPSIS 399 "'...'"
232+
%token T_COALESCE 400 "'??'"
233+
%token T_POW 401 "'**'"
234+
%token T_POW_EQUAL 402 "'**='"
235235
/* We need to split the & token in two to avoid a shift/reduce conflict. For T1&$v and T1&T2,
236236
* with only one token lookahead, bison does not know whether to reduce T1 as a complete type,
237237
* or shift to continue parsing an intersection type. */
238-
%token T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG "'&'"
238+
%token T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG 403 "'&'"
239239
/* Bison warns on duplicate token literals, so use a different dummy value here.
240240
* It will be fixed up by zend_yytnamerr() later. */
241-
%token T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG "amp"
242-
%token T_BAD_CHARACTER "invalid character"
241+
%token T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG 404 "amp"
242+
%token T_BAD_CHARACTER 405 "invalid character"
243243

244244
/* Token used to force a parse error from the lexer */
245-
%token T_ERROR
245+
%token T_ERROR 406
246246

247247
%type <ast> top_statement namespace_name name statement function_declaration_statement
248248
%type <ast> class_declaration_statement trait_declaration_statement legacy_namespace_name

0 commit comments

Comments
 (0)