2 IdentifierReference[Yield, Await] :
4 => identifier_reference($0)
6 @returns BindingIdentifier
7 BindingIdentifier[Yield, Await] :
9 => binding_identifier($0)
11 => binding_identifier_yield($0)
13 => binding_identifier_await($0)
16 LabelIdentifier[Yield, Await] :
18 => label_identifier($0)
21 PrimaryExpression[Yield, Await] :
24 IdentifierReference[?Yield, ?Await]
25 => identifier_expr($0)
28 ArrayLiteral[?Yield, ?Await]
30 ObjectLiteral[?Yield, ?Await]
34 ClassExpression[?Yield, ?Await]
38 AsyncFunctionExpression
40 AsyncGeneratorExpression
42 RegularExpressionLiteral
44 TemplateLiteral[?Yield, ?Await, ~Tagged]
45 => untagged_template_expr($0)
46 CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
47 => uncover_parenthesized_expression($0)
49 @returns CoverParenthesized
50 CoverParenthesizedExpressionAndArrowParameterList[Yield, Await] :
51 `(` Expression[+In, ?Yield, ?Await] `)`
52 => cover_parenthesized_expression($0, $1, $2)
53 `(` Expression[+In, ?Yield, ?Await] `,` `)`
54 => cover_arrow_parameter_list($0, expression_to_parameter_list($1), None, $3)
56 => cover_arrow_parameter_list($0, empty_parameter_list(), None, $1)
57 `(` `...` BindingIdentifier[?Yield, ?Await] `)`
58 => cover_arrow_parameter_list($0, empty_parameter_list(), Some(binding_identifier_to_binding($2)), $3)
59 `(` `...` BindingPattern[?Yield, ?Await] `)`
60 => cover_arrow_parameter_list($0, empty_parameter_list(), Some($2), $3)
61 `(` Expression[+In, ?Yield, ?Await] `,` `...` BindingIdentifier[?Yield, ?Await] `)`
62 => cover_arrow_parameter_list($0, expression_to_parameter_list($1), Some(binding_identifier_to_binding($4)), $5)
63 `(` Expression[+In, ?Yield, ?Await] `,` `...` BindingPattern[?Yield, ?Await] `)`
64 => cover_arrow_parameter_list($0, expression_to_parameter_list($1), Some($4), $5)
72 => boolean_literal($0)
74 => numeric_literal($0)
82 ArrayLiteral[Yield, Await] :
84 => array_literal_empty($0, $1, $2)
85 `[` ElementList[?Yield, ?Await] `]`
86 => array_literal($0, $1, $2)
87 `[` ElementList[?Yield, ?Await] `,` Elision? `]`
88 => array_literal_with_trailing_elision($0,$1, $3, $4)
90 @returns ArrayExpression
91 ElementList[Yield, Await] :
92 Elision? AssignmentExpression[+In, ?Yield, ?Await]
93 => element_list_first($0, $1)
94 Elision? SpreadElement[?Yield, ?Await]
95 => element_list_first_spread($0, $1)
96 ElementList[?Yield, ?Await] `,` Elision? AssignmentExpression[+In, ?Yield, ?Await]
97 => element_list_append($0, $2, $3)
98 ElementList[?Yield, ?Await] `,` Elision? SpreadElement[?Yield, ?Await]
99 => element_list_append_spread($0, $2, $3)
101 @returns ArrayExpression
104 => elision_single($0)
106 => elision_append($0, $1)
109 SpreadElement[Yield, Await] :
110 `...` AssignmentExpression[+In, ?Yield, ?Await]
111 => spread_element($1)
115 ObjectLiteral[Yield, Await] :
117 => object_literal_empty($0, $1)
118 `{` PropertyDefinitionList[?Yield, ?Await] `}`
119 => object_literal($0, $1, $2)
120 `{` PropertyDefinitionList[?Yield, ?Await] `,` `}`
121 => object_literal($0, $1, $2)
123 @returns ObjectExpression
124 PropertyDefinitionList[Yield, Await] :
125 PropertyDefinition[?Yield, ?Await]
126 => property_definition_list_single($0)
127 PropertyDefinitionList[?Yield, ?Await] `,` PropertyDefinition[?Yield, ?Await]
128 => property_definition_list_append($0, $2)
130 @returns ObjectProperty
131 PropertyDefinition[Yield, Await] :
132 IdentifierReference[?Yield, ?Await]
133 => shorthand_property($0)
134 CoverInitializedName[?Yield, ?Await]
136 PropertyName[?Yield, ?Await] `:` AssignmentExpression[+In, ?Yield, ?Await]
137 => property_definition($0, $2)
138 MethodDefinition[?Yield, ?Await]
139 => property_definition_method($0)
140 `...` AssignmentExpression[+In, ?Yield, ?Await]
141 => property_definition_spread($1)
143 @returns PropertyName
144 PropertyName[Yield, Await] :
147 ComputedPropertyName[?Yield, ?Await]
150 @returns PropertyName
151 LiteralPropertyName :
153 => property_name_identifier($0)
155 => property_name_string($0)
157 => property_name_numeric($0)
159 => property_name_bigint($0)
161 @returns PropertyName
162 ComputedPropertyName[Yield, Await] :
163 `[` AssignmentExpression[+In, ?Yield, ?Await] `]`
164 => computed_property_name($0, $1, $2)
166 @returns ObjectProperty
167 CoverInitializedName[Yield, Await] :
168 IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]
169 => cover_initialized_name($0, $1)
172 Initializer[In, Yield, Await] :
173 `=` AssignmentExpression[?In, ?Yield, ?Await]
177 @returns TemplateExpression
178 TemplateLiteral[Yield, Await, Tagged] :
179 NoSubstitutionTemplate
180 => template_literal($0)
181 SubstitutionTemplate[?Yield, ?Await, ?Tagged]
184 @returns TemplateExpression
185 SubstitutionTemplate[Yield, Await, Tagged] :
186 TemplateHead Expression[+In, ?Yield, ?Await] TemplateSpans[?Yield, ?Await, ?Tagged]
187 => substitution_template($0, $1, $2)
190 TemplateSpans[Yield, Await, Tagged] :
192 => template_spans(None, $0)
193 TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateTail
194 => template_spans(Some($0), $1)
197 TemplateMiddleList[Yield, Await, Tagged] :
198 TemplateMiddle Expression[+In, ?Yield, ?Await]
199 => template_middle_list_single($0, $1)
200 TemplateMiddleList[?Yield, ?Await, ?Tagged] TemplateMiddle Expression[+In, ?Yield, ?Await]
201 => template_middle_list_append($0, $1, $2)
204 MemberExpression[Yield, Await] :
205 PrimaryExpression[?Yield, ?Await]
207 MemberExpression[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
208 => computed_member_expr($0, $2, $3)
209 MemberExpression[?Yield, ?Await] `.` IdentifierName
210 => static_member_expr($0, $2)
211 MemberExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
212 => tagged_template_expr($0, $1)
213 SuperProperty[?Yield, ?Await]
217 `new` MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
218 => new_expr_with_arguments($0, $1, $2)
219 MemberExpression[?Yield, ?Await] `.` PrivateIdentifier
220 => private_field_expr($0, $2)
223 SuperProperty[Yield, Await] :
224 `super` `[` Expression[+In, ?Yield, ?Await] `]`
225 => super_property_computed($0, $2, $3)
226 `super` `.` IdentifierName
227 => super_property_static($0, $2)
237 => new_target_expr($0, $2)
240 NewExpression[Yield, Await] :
241 MemberExpression[?Yield, ?Await]
243 `new` NewExpression[?Yield, ?Await]
244 => new_expr_without_arguments($0, $1)
247 CallExpression[Yield, Await] :
248 CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await]
250 SuperCall[?Yield, ?Await]
252 ImportCall[?Yield, ?Await]
254 CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
256 CallExpression[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
257 => computed_member_expr($0, $2, $3)
258 CallExpression[?Yield, ?Await] `.` IdentifierName
259 => static_member_expr($0, $2)
260 CallExpression[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
261 => tagged_template_expr($0, $1)
262 CallExpression[?Yield, ?Await] `.` PrivateIdentifier
263 => private_field_expr($0, $2)
266 SuperCall[Yield, Await] :
267 `super` Arguments[?Yield, ?Await]
268 => super_call($0, $1)
271 ImportCall[Yield, Await] :
272 `import` `(` AssignmentExpression[+In, ?Yield, ?Await] `)`
273 => import_call($0, $2, $3)
276 Arguments[Yield, Await] :
278 => arguments_empty($0, $1)
279 `(` ArgumentList[?Yield, ?Await] `)`
280 => arguments($0, $1, $2)
281 `(` ArgumentList[?Yield, ?Await] `,` `)`
282 => arguments($0, $1, $3)
285 ArgumentList[Yield, Await] :
286 AssignmentExpression[+In, ?Yield, ?Await]
287 => arguments_single($0)
288 `...` AssignmentExpression[+In, ?Yield, ?Await]
289 => arguments_spread_single($1)
290 ArgumentList[?Yield, ?Await] `,` AssignmentExpression[+In, ?Yield, ?Await]
291 => arguments_append($0, $2)
292 ArgumentList[?Yield, ?Await] `,` `...` AssignmentExpression[+In, ?Yield, ?Await]
293 => arguments_append_spread($0, $3)
296 OptionalExpression[Yield, Await] :
297 MemberExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await]
298 => optional_expr($0, $1)
299 CallExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await]
300 => optional_expr($0, $1)
301 OptionalExpression[?Yield, ?Await] OptionalChain[?Yield, ?Await]
302 => optional_expr($0, $1)
305 OptionalChain[Yield, Await] :
306 `?.` `[` Expression[+In, ?Yield, ?Await] `]`
307 => optional_computed_member_expr_tail($0, $2, $3)
309 => optional_static_member_expr_tail($0, $1)
310 `?.` PrivateIdentifier
311 => optional_private_field_member_expr_tail($0, $1)
312 `?.` Arguments[?Yield, ?Await]
313 => optional_call_expr_tail($0, $1)
314 `?.` TemplateLiteral[?Yield, ?Await, +Tagged]
315 => error_optional_chain_with_template()
316 OptionalChain[?Yield, ?Await] `[` Expression[+In, ?Yield, ?Await] `]`
317 => optional_computed_member_expr($0, $2, $3)
318 OptionalChain[?Yield, ?Await] `.` IdentifierName
319 => optional_static_member_expr($0, $2)
320 OptionalChain[?Yield, ?Await] `.` PrivateIdentifier
321 => optional_private_field_member_expr($0, $2)
322 OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]
323 => optional_call_expr($0, $1)
324 OptionalChain[?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]
325 => error_optional_chain_with_template()
328 LeftHandSideExpression[Yield, Await] :
329 NewExpression[?Yield, ?Await]
331 CallExpression[?Yield, ?Await]
333 OptionalExpression[?Yield, ?Await]
338 CallMemberExpression[Yield, Await] :
339 MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
344 UpdateExpression[Yield, Await] :
345 LeftHandSideExpression[?Yield, ?Await]
347 LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] `++`
348 => post_increment_expr($0, $1)
349 LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] `--`
350 => post_decrement_expr($0, $1)
351 `++` UnaryExpression[?Yield, ?Await]
352 => pre_decrement_expr($0, $1)
353 `--` UnaryExpression[?Yield, ?Await]
354 => pre_decrement_expr($0, $1)
358 UnaryExpression[Yield, Await] :
359 UpdateExpression[?Yield, ?Await]
361 `delete` UnaryExpression[?Yield, ?Await]
362 => delete_expr($0, $1)
363 `void` UnaryExpression[?Yield, ?Await]
365 `typeof` UnaryExpression[?Yield, ?Await]
366 => typeof_expr($0, $1)
367 `+` UnaryExpression[?Yield, ?Await]
368 => unary_plus_expr($0, $1)
369 `-` UnaryExpression[?Yield, ?Await]
370 => unary_minus_expr($0, $1)
371 `~` UnaryExpression[?Yield, ?Await]
372 => bitwise_not_expr($0, $1)
373 `!` UnaryExpression[?Yield, ?Await]
374 => logical_not_expr($0, $1)
375 [+Await] AwaitExpression[?Yield]
380 ExponentiationExpression[Yield, Await] :
381 UnaryExpression[?Yield, ?Await]
383 UpdateExpression[?Yield, ?Await] `**` ExponentiationExpression[?Yield, ?Await]
384 => binary_expr(pow_op($1), $0, $2)
388 MultiplicativeExpression[Yield, Await] :
389 ExponentiationExpression[?Yield, ?Await]
391 MultiplicativeExpression[?Yield, ?Await] MultiplicativeOperator ExponentiationExpression[?Yield, ?Await]
392 => multiplicative_expr($0, $1, $2)
394 @returns BinaryOperator
395 MultiplicativeOperator :
397 => box_op(mul_op($0))
399 => box_op(div_op($0))
401 => box_op(mod_op($0))
405 AdditiveExpression[Yield, Await] :
406 MultiplicativeExpression[?Yield, ?Await]
408 AdditiveExpression[?Yield, ?Await] `+` MultiplicativeExpression[?Yield, ?Await]
409 => binary_expr(add_op($1), $0, $2)
410 AdditiveExpression[?Yield, ?Await] `-` MultiplicativeExpression[?Yield, ?Await]
411 => binary_expr(sub_op($1), $0, $2)
415 ShiftExpression[Yield, Await] :
416 AdditiveExpression[?Yield, ?Await]
418 ShiftExpression[?Yield, ?Await] `<<` AdditiveExpression[?Yield, ?Await]
419 => binary_expr(left_shift_op($1), $0, $2)
420 ShiftExpression[?Yield, ?Await] `>>` AdditiveExpression[?Yield, ?Await]
421 => binary_expr(right_shift_op($1), $0, $2)
422 ShiftExpression[?Yield, ?Await] `>>>` AdditiveExpression[?Yield, ?Await]
423 => binary_expr(right_shift_ext_op($1), $0, $2)
427 RelationalExpression[In, Yield, Await] :
428 ShiftExpression[?Yield, ?Await]
430 RelationalExpression[?In, ?Yield, ?Await] `<` ShiftExpression[?Yield, ?Await]
431 => binary_expr(less_than_op($1), $0, $2)
432 RelationalExpression[?In, ?Yield, ?Await] `>` ShiftExpression[?Yield, ?Await]
433 => binary_expr(greater_than_op($1), $0, $2)
434 RelationalExpression[?In, ?Yield, ?Await] `<=` ShiftExpression[?Yield, ?Await]
435 => binary_expr(less_than_or_equal_op($1), $0, $2)
436 RelationalExpression[?In, ?Yield, ?Await] `>=` ShiftExpression[?Yield, ?Await]
437 => binary_expr(greater_than_or_equal_op($1), $0, $2)
438 RelationalExpression[?In, ?Yield, ?Await] `instanceof` ShiftExpression[?Yield, ?Await]
439 => binary_expr(instanceof_op($1), $0, $2)
440 [+In] RelationalExpression[+In, ?Yield, ?Await] `in` ShiftExpression[?Yield, ?Await]
441 => binary_expr(in_op($1), $0, $2)
445 EqualityExpression[In, Yield, Await] :
446 RelationalExpression[?In, ?Yield, ?Await]
448 EqualityExpression[?In, ?Yield, ?Await] `==` RelationalExpression[?In, ?Yield, ?Await]
449 => binary_expr(equals_op($1), $0, $2)
450 EqualityExpression[?In, ?Yield, ?Await] `!=` RelationalExpression[?In, ?Yield, ?Await]
451 => binary_expr(not_equals_op($1), $0, $2)
452 EqualityExpression[?In, ?Yield, ?Await] `===` RelationalExpression[?In, ?Yield, ?Await]
453 => binary_expr(strict_equals_op($1), $0, $2)
454 EqualityExpression[?In, ?Yield, ?Await] `!==` RelationalExpression[?In, ?Yield, ?Await]
455 => binary_expr(strict_not_equals_op($1), $0, $2)
459 BitwiseANDExpression[In, Yield, Await] :
460 EqualityExpression[?In, ?Yield, ?Await]
462 BitwiseANDExpression[?In, ?Yield, ?Await] `&` EqualityExpression[?In, ?Yield, ?Await]
463 => binary_expr(bitwise_and_op($1), $0, $2)
466 BitwiseXORExpression[In, Yield, Await] :
467 BitwiseANDExpression[?In, ?Yield, ?Await]
469 BitwiseXORExpression[?In, ?Yield, ?Await] `^` BitwiseANDExpression[?In, ?Yield, ?Await]
470 => binary_expr(bitwise_xor_op($1), $0, $2)
473 BitwiseORExpression[In, Yield, Await] :
474 BitwiseXORExpression[?In, ?Yield, ?Await]
476 BitwiseORExpression[?In, ?Yield, ?Await] `|` BitwiseXORExpression[?In, ?Yield, ?Await]
477 => binary_expr(bitwise_or_op($1), $0, $2)
480 LogicalANDExpression[In, Yield, Await] :
481 BitwiseORExpression[?In, ?Yield, ?Await]
483 LogicalANDExpression[?In, ?Yield, ?Await] `&&` BitwiseORExpression[?In, ?Yield, ?Await]
484 => binary_expr(logical_and_op($1), $0, $2)
487 LogicalORExpression[In, Yield, Await] :
488 LogicalANDExpression[?In, ?Yield, ?Await]
490 LogicalORExpression[?In, ?Yield, ?Await] `||` LogicalANDExpression[?In, ?Yield, ?Await]
491 => binary_expr(logical_or_op($1), $0, $2)
494 ShortCircuitExpression[In, Yield, Await] :
495 LogicalORExpression[?In, ?Yield, ?Await]
497 CoalesceExpression[?In, ?Yield, ?Await]
501 CoalesceExpression[In, Yield, Await] :
502 CoalesceExpressionHead[?In, ?Yield, ?Await] `??` BitwiseORExpression[?In, ?Yield, ?Await]
503 => binary_expr(coalesce_op($1), $0, $2)
506 CoalesceExpressionHead[In, Yield, Await] :
507 CoalesceExpression[?In, ?Yield, ?Await]
509 BitwiseORExpression[?In, ?Yield, ?Await]
513 ConditionalExpression[In, Yield, Await] :
514 ShortCircuitExpression[?In, ?Yield, ?Await]
516 ShortCircuitExpression[?In, ?Yield, ?Await] `?` AssignmentExpression[+In, ?Yield, ?Await] `:` AssignmentExpression[?In, ?Yield, ?Await]
517 => conditional_expr($0, $2, $4)
521 AssignmentExpression[In, Yield, Await] :
522 ConditionalExpression[?In, ?Yield, ?Await]
524 [+Yield] YieldExpression[?In, ?Await]
526 ArrowFunction[?In, ?Yield, ?Await]
528 AsyncArrowFunction[?In, ?Yield, ?Await]
530 LeftHandSideExpression[?Yield, ?Await] `=` AssignmentExpression[?In, ?Yield, ?Await]
531 => assignment_expr($0, $2)
532 LeftHandSideExpression[?Yield, ?Await] AssignmentOperator AssignmentExpression[?In, ?Yield, ?Await]
533 => compound_assignment_expr($0, $1, $2)
534 LeftHandSideExpression[?Yield, ?Await] LogicalAssignmentOperator AssignmentExpression[?In, ?Yield, ?Await]
535 => compound_assignment_expr($0, $1, $2)
537 @returns CompoundAssignmentOperator
540 => box_assign_op(mul_assign_op($0))
542 => box_assign_op(div_assign_op($0))
544 => box_assign_op(mod_assign_op($0))
546 => box_assign_op(add_assign_op($0))
548 => box_assign_op(sub_assign_op($0))
550 => box_assign_op(left_shift_assign_op($0))
552 => box_assign_op(right_shift_assign_op($0))
554 => box_assign_op(right_shift_ext_assign_op($0))
556 => box_assign_op(bitwise_and_assign_op($0))
558 => box_assign_op(bitwise_xor_assign_op($0))
560 => box_assign_op(bitwise_or_assign_op($0))
562 => box_assign_op(pow_assign_op($0))
564 @returns CompoundAssignmentOperator
565 LogicalAssignmentOperator :
567 => box_assign_op(logical_and_assign_op($0))
569 => box_assign_op(logical_or_assign_op($0))
571 => box_assign_op(coalesce_assign_op($0))
573 AssignmentPattern[Yield, Await] :
574 ObjectAssignmentPattern[?Yield, ?Await]
575 ArrayAssignmentPattern[?Yield, ?Await]
577 ObjectAssignmentPattern[Yield, Await] :
579 `{` AssignmentRestProperty[?Yield, ?Await] `}`
580 `{` AssignmentPropertyList[?Yield, ?Await] `}`
581 `{` AssignmentPropertyList[?Yield, ?Await] `,` AssignmentRestProperty[?Yield, ?Await]? `}`
583 ArrayAssignmentPattern[Yield, Await] :
584 `[` Elision? AssignmentRestElement[?Yield, ?Await]? `]`
585 `[` AssignmentElementList[?Yield, ?Await] `]`
586 `[` AssignmentElementList[?Yield, ?Await] `,` Elision? AssignmentRestElement[?Yield, ?Await]? `]`
588 AssignmentRestProperty[Yield, Await] :
589 `...` DestructuringAssignmentTarget[?Yield, ?Await]
591 AssignmentPropertyList[Yield, Await] :
592 AssignmentProperty[?Yield, ?Await]
593 AssignmentPropertyList[?Yield, ?Await] `,` AssignmentProperty[?Yield, ?Await]
595 AssignmentElementList[Yield, Await] :
596 AssignmentElisionElement[?Yield, ?Await]
597 AssignmentElementList[?Yield, ?Await] `,` AssignmentElisionElement[?Yield, ?Await]
599 AssignmentElisionElement[Yield, Await] :
600 Elision? AssignmentElement[?Yield, ?Await]
602 AssignmentProperty[Yield, Await] :
603 IdentifierReference[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
604 PropertyName[?Yield, ?Await] `:` AssignmentElement[?Yield, ?Await]
606 AssignmentElement[Yield, Await] :
607 DestructuringAssignmentTarget[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
609 AssignmentRestElement[Yield, Await] :
610 `...` DestructuringAssignmentTarget[?Yield, ?Await]
612 DestructuringAssignmentTarget[Yield, Await] :
613 LeftHandSideExpression[?Yield, ?Await]
617 Expression[In, Yield, Await] :
618 AssignmentExpression[?In, ?Yield, ?Await]
620 Expression[?In, ?Yield, ?Await] `,` AssignmentExpression[?In, ?Yield, ?Await]
621 => binary_expr(comma_op($1), $0, $2)
625 Statement[Yield, Await, Return] :
626 BlockStatement[?Yield, ?Await, ?Return]
628 VariableStatement[?Yield, ?Await]
632 ExpressionStatement[?Yield, ?Await]
634 IfStatement[?Yield, ?Await, ?Return]
636 BreakableStatement[?Yield, ?Await, ?Return]
638 ContinueStatement[?Yield, ?Await]
640 BreakStatement[?Yield, ?Await]
642 [+Return] ReturnStatement[?Yield, ?Await]
644 WithStatement[?Yield, ?Await, ?Return]
646 LabelledStatement[?Yield, ?Await, ?Return]
648 ThrowStatement[?Yield, ?Await]
650 TryStatement[?Yield, ?Await, ?Return]
656 Declaration[Yield, Await] :
657 HoistableDeclaration[?Yield, ?Await, ~Default]
659 ClassDeclaration[?Yield, ?Await, ~Default]
661 LexicalDeclaration[+In, ?Yield, ?Await]
665 HoistableDeclaration[Yield, Await, Default] :
666 FunctionDeclaration[?Yield, ?Await, ?Default]
668 GeneratorDeclaration[?Yield, ?Await, ?Default]
670 AsyncFunctionDeclaration[?Yield, ?Await, ?Default]
672 AsyncGeneratorDeclaration[?Yield, ?Await, ?Default]
676 BreakableStatement[Yield, Await, Return] :
677 IterationStatement[?Yield, ?Await, ?Return]
679 SwitchStatement[?Yield, ?Await, ?Return]
684 BlockStatement[Yield, Await, Return] :
685 Block[?Yield, ?Await, ?Return]
686 => block_statement($0)
689 Block[Yield, Await, Return] :
690 `{` StatementList[?Yield, ?Await, ?Return]? `}`
693 @returns Vec<Statement>
694 StatementList[Yield, Await, Return] :
695 StatementListItem[?Yield, ?Await, ?Return]
696 => statement_list_single($0)
697 StatementList[?Yield, ?Await, ?Return] StatementListItem[?Yield, ?Await, ?Return]
698 => statement_list_append($0, $1)
701 StatementListItem[Yield, Await, Return] :
702 Statement[?Yield, ?Await, ?Return]
704 Declaration[?Yield, ?Await]
709 LexicalDeclaration[In, Yield, Await] :
710 LetOrConst BindingList[?In, ?Yield, ?Await] `;`
711 => lexical_declaration($0, $1)
713 @returns VariableDeclarationOrExpression
714 ForLexicalDeclaration[In, Yield, Await] :
715 LetOrConst BindingList[?In, ?Yield, ?Await] `;`
716 => for_lexical_declaration($0, $1)
718 @returns VariableDeclarationKind
725 @returns Vec<VariableDeclarator>
726 BindingList[In, Yield, Await] :
727 LexicalBinding[?In, ?Yield, ?Await]
728 => variable_declaration_list_single($0)
729 BindingList[?In, ?Yield, ?Await] `,` LexicalBinding[?In, ?Yield, ?Await]
730 => variable_declaration_list_append($0, $2)
732 @returns VariableDeclarator
733 LexicalBinding[In, Yield, Await] :
734 BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]?
735 => variable_declaration(binding_identifier_to_binding($0), $1)
736 BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
737 => variable_declaration($0, Some($1))
741 VariableStatement[Yield, Await] :
742 `var` VariableDeclarationList[+In, ?Yield, ?Await] `;`
743 => variable_statement($0, $1)
745 @returns Vec<VariableDeclarator>
746 VariableDeclarationList[In, Yield, Await] :
747 VariableDeclaration[?In, ?Yield, ?Await]
748 => variable_declaration_list_single($0)
749 VariableDeclarationList[?In, ?Yield, ?Await] `,` VariableDeclaration[?In, ?Yield, ?Await]
750 => variable_declaration_list_append($0, $2)
752 @returns VariableDeclarator
753 VariableDeclaration[In, Yield, Await] :
754 BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]?
755 => variable_declaration(binding_identifier_to_binding($0), $1)
756 BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
757 => variable_declaration($0, Some($1))
761 BindingPattern[Yield, Await] :
762 ObjectBindingPattern[?Yield, ?Await]
764 ArrayBindingPattern[?Yield, ?Await]
768 ObjectBindingPattern[Yield, Await] :
770 => object_binding_pattern($0, binding_property_list_empty(), None, $1)
771 `{` BindingRestProperty[?Yield, ?Await] `}`
772 => object_binding_pattern($0, binding_property_list_empty(), Some($1), $2)
773 `{` BindingPropertyList[?Yield, ?Await] `}`
774 => object_binding_pattern($0, $1, None, $2)
775 `{` BindingPropertyList[?Yield, ?Await] `,` BindingRestProperty[?Yield, ?Await]? `}`
776 => object_binding_pattern($0, $1, $3, $4)
779 ArrayBindingPattern[Yield, Await] :
780 `[` Elision? BindingRestElement[?Yield, ?Await]? `]`
781 => array_binding_pattern($0, binding_element_list_empty(), $1, $2, $3)
782 `[` BindingElementList[?Yield, ?Await] `]`
783 => array_binding_pattern($0, $1, None, None, $2)
784 `[` BindingElementList[?Yield, ?Await] `,` Elision? BindingRestElement[?Yield, ?Await]? `]`
785 => array_binding_pattern($0, $1, $3, $4, $5)
787 @returns BindingIdentifier
788 BindingRestProperty[Yield, Await] :
789 `...` BindingIdentifier[?Yield, ?Await]
792 @returns Vec<BindingProperty>
793 BindingPropertyList[Yield, Await] :
794 BindingProperty[?Yield, ?Await]
795 => binding_property_list_single($0)
796 BindingPropertyList[?Yield, ?Await] `,` BindingProperty[?Yield, ?Await]
797 => binding_property_list_append($0, $2)
799 @returns Vec<Option<Parameter>>
800 BindingElementList[Yield, Await] :
801 BindingElisionElement[?Yield, ?Await]
803 BindingElementList[?Yield, ?Await] `,` BindingElisionElement[?Yield, ?Await]
804 => binding_element_list_append($0, $2)
806 @returns Vec<Option<Parameter>>
807 BindingElisionElement[Yield, Await] :
808 Elision? BindingElement[?Yield, ?Await]
809 => binding_elision_element($0, $1)
811 @returns BindingProperty
812 BindingProperty[Yield, Await] :
813 SingleNameBinding[?Yield, ?Await]
814 => binding_property_shorthand($0)
815 PropertyName[?Yield, ?Await] `:` BindingElement[?Yield, ?Await]
816 => binding_property($0, $2)
819 BindingElement[Yield, Await] :
820 SingleNameBinding[?Yield, ?Await]
822 BindingPattern[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
823 => binding_element_pattern($0, $1)
826 SingleNameBinding[Yield, Await] :
827 BindingIdentifier[?Yield, ?Await] Initializer[+In, ?Yield, ?Await]?
828 => single_name_binding($0, $1)
831 BindingRestElement[Yield, Await] :
832 `...` BindingIdentifier[?Yield, ?Await]
833 => binding_identifier_to_binding($1)
834 `...` BindingPattern[?Yield, ?Await]
841 => empty_statement($0)
844 ExpressionStatement[Yield, Await] :
845 [lookahead <! {`{`, `function`, `async`, `class`, `let`}] Expression[+In, ?Yield, ?Await] `;`
846 => expression_statement($0)
850 IfStatement[Yield, Await, Return] :
851 `if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] `else` Statement[?Yield, ?Await, ?Return]
852 => if_statement($0, $2, $4, Some($6))
853 `if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] [lookahead != `else`]
854 => if_statement($0, $2, $4, None)
855 `if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] `else` Statement[?Yield, ?Await, ?Return]
856 => if_statement($0, $2, make_block_stmt_from_function_decl($4), Some($6))
857 `if` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return] `else` FunctionDeclaration[?Yield, ?Await, ~Default]
858 => if_statement($0, $2, $4, Some(make_block_stmt_from_function_decl($6)))
859 `if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] `else` FunctionDeclaration[?Yield, ?Await, ~Default]
860 => if_statement($0, $2, make_block_stmt_from_function_decl($4), Some(make_block_stmt_from_function_decl($6)))
861 `if` `(` Expression[+In, ?Yield, ?Await] `)` FunctionDeclaration[?Yield, ?Await, ~Default] [lookahead != `else`]
862 => if_statement($0, $2, make_block_stmt_from_function_decl($4), None)
866 IterationStatement[Yield, Await, Return] :
867 `do` Statement[?Yield, ?Await, ?Return] `while` `(` Expression[+In, ?Yield, ?Await] `)` `;`
868 => do_while_statement($0, $1, $4, $5)
869 `while` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
870 => while_statement($0, $2, $4)
871 `for` `(` [lookahead != `let`] Expression[~In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return]
872 => for_statement($0, for_expression($2), $4, $6, $8)
873 `for` `(` `var` VariableDeclarationList[~In, ?Yield, ?Await] `;` Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return]
874 => for_statement($0, Some(for_var_declaration($2, $3)), $5, $7, $9)
875 `for` `(` ForLexicalDeclaration[~In, ?Yield, ?Await] Expression[+In, ?Yield, ?Await]? `;` Expression[+In, ?Yield, ?Await]? `)` Statement[?Yield, ?Await, ?Return]
876 => for_statement_lexical($0, unbox_for_lexical_declaration($2), $3, $5, $7)
877 `for` `(` [lookahead != `let`] LeftHandSideExpression[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
878 => for_in_statement($0, for_assignment_target($2), $4, $6)
879 `for` `(` `var` ForBinding[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
880 => for_in_statement($0, for_in_or_of_var_declaration($2, $3, None), $5, $7)
881 `for` `(` `var` BindingIdentifier[?Yield, ?Await] Initializer[~In, ?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
882 => for_in_statement($0, for_in_or_of_var_declaration($2, binding_identifier_to_binding($3), Some($4)), $6, $8)
883 `for` `(` ForDeclaration[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
884 => for_in_statement_lexical($0, unbox_for_declaration($2), $4, $6)
885 `for` `(` [lookahead <! {`async`, `let`} ] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
886 => for_of_statement($0, for_assignment_target($2), $4, $6)
887 `for` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
888 => for_of_statement($0, for_in_or_of_var_declaration($2, $3, None), $5, $7)
889 `for` `(` ForDeclaration[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
890 => for_of_statement_lexical($0, unbox_for_declaration($2), $4, $6)
891 [+Await] `for` `await` `(` [lookahead <! {`async`, `let`} ] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
892 => for_await_of_statement($0, for_assignment_target($3), $5, $7)
893 [+Await] `for` `await` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
894 => for_await_of_statement($0, for_in_or_of_var_declaration($3, $4, None), $6, $8)
895 [+Await] `for` `await` `(` ForDeclaration[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
896 => for_await_of_statement_lexical($0, unbox_for_declaration($3), $5, $7)
898 @returns VariableDeclarationOrAssignmentTarget
899 ForDeclaration[Yield, Await] :
900 LetOrConst ForBinding[?Yield, ?Await]
901 => for_declaration($0, $1)
904 ForBinding[Yield, Await] :
905 BindingIdentifier[?Yield, ?Await]
906 => binding_identifier_to_binding($0)
907 BindingPattern[?Yield, ?Await]
912 ContinueStatement[Yield, Await] :
914 => continue_statement($0, None)
915 `continue` [no LineTerminator here] LabelIdentifier[?Yield, ?Await] `;`
916 => continue_statement($0, Some($1))
920 BreakStatement[Yield, Await] :
922 => break_statement($0, None)
923 `break` [no LineTerminator here] LabelIdentifier[?Yield, ?Await] `;`
924 => break_statement($0, Some($1))
928 ReturnStatement[Yield, Await] :
930 => return_statement($0, None)
931 `return` [no LineTerminator here] Expression[+In, ?Yield, ?Await] `;`
932 => return_statement($0, Some($1))
936 WithStatement[Yield, Await, Return] :
937 `with` `(` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
938 => with_statement($0, $2, $4)
942 SwitchStatement[Yield, Await, Return] :
943 `switch` `(` Expression[+In, ?Yield, ?Await] `)` CaseBlock[?Yield, ?Await, ?Return]
944 => switch_statement($0, $2, $4)
947 CaseBlock[Yield, Await, Return] :
948 `{` CaseClauses[?Yield, ?Await, ?Return]? `}`
949 => case_block($0, $1, $2)
950 `{` CaseClauses[?Yield, ?Await, ?Return]? DefaultClause[?Yield, ?Await, ?Return] CaseClauses[?Yield, ?Await, ?Return]? `}`
951 => case_block_with_default($0, $1, $2, $3, $4)
953 @returns Vec<SwitchCase>
954 CaseClauses[Yield, Await, Return] :
955 CaseClause[?Yield, ?Await, ?Return]
956 => case_clauses_single($0)
957 CaseClauses[?Yield, ?Await, ?Return] CaseClause[?Yield, ?Await, ?Return]
958 => case_clauses_append($0, $1)
961 CaseClause[Yield, Await, Return] :
962 `case` Expression[+In, ?Yield, ?Await] `:` StatementList[?Yield, ?Await, ?Return]?
963 => case_clause($0, $1, $2, $3)
965 @returns SwitchDefault
966 DefaultClause[Yield, Await, Return] :
967 `default` `:` StatementList[?Yield, ?Await, ?Return]?
968 => default_clause($0, $1, $2)
972 LabelledStatement[Yield, Await, Return] :
973 LabelIdentifier[?Yield, ?Await] `:` LabelledItem[?Yield, ?Await, ?Return]
974 => labelled_statement($0, $2)
977 LabelledItem[Yield, Await, Return] :
978 Statement[?Yield, ?Await, ?Return]
980 FunctionDeclaration[?Yield, ?Await, ~Default]
985 ThrowStatement[Yield, Await] :
986 `throw` [no LineTerminator here] Expression[+In, ?Yield, ?Await] `;`
987 => throw_statement($0, $1)
990 TryStatement[Yield, Await, Return] :
991 `try` Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return]
992 => try_statement($0, $1, Some($2), None)
993 `try` Block[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return]
994 => try_statement($0, $1, None, Some($2))
995 `try` Block[?Yield, ?Await, ?Return] Catch[?Yield, ?Await, ?Return] Finally[?Yield, ?Await, ?Return]
996 => try_statement($0, $1, Some($2), Some($3))
999 Catch[Yield, Await, Return] :
1000 `catch` `(` CatchParameter[?Yield, ?Await] `)` CatchBlock[?Yield, ?Await, ?Return]
1001 => catch($0, $2, $4)
1002 `catch` Block[?Yield, ?Await, ?Return]
1003 => catch_no_param($0, $1)
1006 CatchBlock[Yield, Await, Return] :
1007 `{` StatementList[?Yield, ?Await, ?Return]? `}`
1008 => catch_block($0, $1, $2)
1011 Finally[Yield, Await, Return] :
1012 `finally` Block[?Yield, ?Await, ?Return]
1016 CatchParameter[Yield, Await] :
1017 BindingIdentifier[?Yield, ?Await]
1018 => binding_identifier_to_binding($0)
1019 BindingPattern[?Yield, ?Await]
1026 => debugger_statement($0)
1030 FunctionDeclaration[Yield, Await, Default] :
1031 `function` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
1032 => function_decl(function($0, Some($1), $2, $3, $4, $5, $6, $7))
1033 [+Default] `function` `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
1034 => function_decl(function($0, None, $1, $2, $3, $4, $5, $6))
1037 FunctionExpression :
1038 `function` BindingIdentifier[~Yield, ~Await]? `(` FormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
1039 => function_expr(function($0, $1, $2, $3, $4, $5, $6, $7))
1041 @returns FormalParameters
1042 UniqueFormalParameters[Yield, Await] :
1043 FormalParameters[?Yield, ?Await]
1044 => unique_formal_parameters($0)
1046 @returns FormalParameters
1047 FormalParameters[Yield, Await] :
1049 => empty_formal_parameters()
1050 FunctionRestParameter[?Yield, ?Await]
1051 => with_rest_parameter(empty_formal_parameters(), $0)
1052 FormalParameterList[?Yield, ?Await]
1054 FormalParameterList[?Yield, ?Await] `,`
1056 FormalParameterList[?Yield, ?Await] `,` FunctionRestParameter[?Yield, ?Await]
1057 => with_rest_parameter($0, $2)
1059 @returns FormalParameters
1060 FormalParameterList[Yield, Await] :
1061 FormalParameter[?Yield, ?Await]
1062 => formal_parameter_list_single($0)
1063 FormalParameterList[?Yield, ?Await] `,` FormalParameter[?Yield, ?Await]
1064 => formal_parameter_list_append($0, $2)
1067 FunctionRestParameter[Yield, Await] :
1068 BindingRestElement[?Yield, ?Await]
1072 FormalParameter[Yield, Await] :
1073 BindingElement[?Yield, ?Await]
1076 @returns FunctionBody
1077 FunctionBody[Yield, Await] :
1078 FunctionStatementList[?Yield, ?Await]
1079 => function_body($0)
1081 @returns Vec<Statement>
1082 FunctionStatementList[Yield, Await] :
1083 StatementList[?Yield, ?Await, +Return]?
1084 => function_statement_list($0)
1088 ArrowFunction[In, Yield, Await] :
1089 ArrowParameters[?Yield, ?Await] [no LineTerminator here] `=>` ConciseBody[?In]
1090 => arrow_function($0, $2)
1092 @returns FormalParameters
1093 ArrowParameters[Yield, Await] :
1094 BindingIdentifier[?Yield, ?Await]
1095 => arrow_parameters_bare($0)
1096 CoverParenthesizedExpressionAndArrowParameterList[?Yield, ?Await]
1097 => uncover_arrow_parameters($0)
1099 @returns ArrowExpressionBody
1101 [lookahead != `{` ] AssignmentExpression[?In, ~Yield, ~Await]
1102 => concise_body_expression($0)
1103 `{` FunctionBody[~Yield, ~Await] `}`
1104 => concise_body_block($0, $1, $2)
1107 ArrowFormalParameters[Yield, Await] :
1108 `(` UniqueFormalParameters[?Yield, ?Await] `)`
1111 @returns MethodDefinition
1112 MethodDefinition[Yield, Await] :
1113 ClassElementName[?Yield, ?Await] `(` UniqueFormalParameters[~Yield, ~Await] `)` `{` FunctionBody[~Yield, ~Await] `}`
1114 => method_definition($0, $1, $2, $3, $4, $5, $6)
1115 GeneratorMethod[?Yield, ?Await]
1117 AsyncMethod[?Yield, ?Await]
1119 AsyncGeneratorMethod[?Yield, ?Await]
1121 `get` ClassElementName[?Yield, ?Await] `(` `)` `{` FunctionBody[~Yield, ~Await] `}`
1122 => getter($0, $1, $4, $5, $6)
1123 `set` ClassElementName[?Yield, ?Await] `(` PropertySetParameterList `)` `{` FunctionBody[~Yield, ~Await] `}`
1124 => setter($0, $1, $2, $3, $4, $5, $6, $7)
1127 PropertySetParameterList :
1128 FormalParameter[~Yield, ~Await]
1132 @returns MethodDefinition
1133 GeneratorMethod[Yield, Await] :
1134 `*` ClassElementName[?Yield, ?Await] `(` UniqueFormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
1135 => generator_method($0, $1, $2, $3, $4, $5, $6, $7)
1138 GeneratorDeclaration[Yield, Await, Default] :
1139 `function` `*` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
1140 => function_decl(generator($0, Some($2), $3, $4, $5, $6, $7, $8))
1141 [+Default] `function` `*` `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
1142 => function_decl(generator($0, None, $2, $3, $4, $5, $6, $7))
1145 GeneratorExpression :
1146 `function` `*` BindingIdentifier[+Yield, ~Await]? `(` FormalParameters[+Yield, ~Await] `)` `{` GeneratorBody `}`
1147 => function_expr(generator($0, $2, $3, $4, $5, $6, $7, $8))
1149 @returns FunctionBody
1151 FunctionBody[+Yield, ~Await]
1155 YieldExpression[In, Await] :
1157 => yield_expr($0, None)
1158 `yield` [no LineTerminator here] AssignmentExpression[?In, +Yield, ?Await]
1159 => yield_expr($0, Some($1))
1160 `yield` [no LineTerminator here] `*` AssignmentExpression[?In, +Yield, ?Await]
1161 => yield_star_expr($0, $2)
1164 @returns MethodDefinition
1165 AsyncGeneratorMethod[Yield, Await] :
1166 `async` [no LineTerminator here] `*` ClassElementName[?Yield, ?Await] `(` UniqueFormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
1167 => async_generator_method($0, $2, $3, $4, $5, $6, $7, $8)
1170 AsyncGeneratorDeclaration[Yield, Await, Default] :
1171 `async` [no LineTerminator here] `function` `*` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
1172 => function_decl(async_generator($0, Some($3), $4, $5, $6, $7, $8, $9))
1173 [+Default] `async` [no LineTerminator here] `function` `*` `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
1174 => function_decl(async_generator($0, None, $3, $4, $5, $6, $7, $8))
1177 AsyncGeneratorExpression :
1178 `async` [no LineTerminator here] `function` `*` BindingIdentifier[+Yield, +Await]? `(` FormalParameters[+Yield, +Await] `)` `{` AsyncGeneratorBody `}`
1179 => function_expr(async_function($0, $3, $4, $5, $6, $7, $8, $9))
1181 @returns FunctionBody
1182 AsyncGeneratorBody :
1183 FunctionBody[+Yield, +Await]
1188 ClassDeclaration[Yield, Await, Default] :
1189 `class` BindingIdentifier[?Yield, ?Await] ClassTail[?Yield, ?Await]
1190 => class_declaration($0, Some($1), $2)
1191 [+Default] `class` ClassTail[?Yield, ?Await]
1192 => class_declaration($0, None, $1)
1195 ClassExpression[Yield, Await] :
1196 `class` BindingIdentifier[?Yield, ?Await]? ClassTail[?Yield, ?Await]
1197 => class_expression($0, $1, $2)
1199 @returns ClassExpression
1200 ClassTail[Yield, Await] :
1201 ClassHeritage[?Yield, ?Await]? `{` ClassBody[?Yield, ?Await]? `}`
1202 => class_tail($0, $2, $3)
1205 ClassHeritage[Yield, Await] :
1206 `extends` LeftHandSideExpression[?Yield, ?Await]
1209 @returns Vec<Box<ClassElement>>
1210 ClassBody[Yield, Await] :
1211 ClassElementList[?Yield, ?Await]
1214 @returns Vec<Box<ClassElement>>
1215 ClassElementList[Yield, Await] :
1216 ClassElement[?Yield, ?Await]
1218 ClassElementList[?Yield, ?Await] ClassElement[?Yield, ?Await]
1219 => class_element_list_append($0, $1)
1221 @returns ClassElement
1222 FieldDefinition[Yield, Await] :
1223 ClassElementName[?Yield, ?Await] Initializer[+In, ~Yield, ~Await]?
1224 => class_field_definition($0, $1)
1226 @returns ClassElementName
1227 ClassElementName[Yield, Await] :
1228 PropertyName[?Yield, ?Await]
1229 => property_name_to_class_element_name($0)
1231 => class_element_name_private($0)
1233 @returns Vec<Box<ClassElement>>
1234 ClassElement[Yield, Await] :
1235 MethodDefinition[?Yield, ?Await]
1236 => class_element($0)
1237 `static` MethodDefinition[?Yield, ?Await]
1238 => class_element_static($0, $1)
1239 FieldDefinition[?Yield, ?Await] `;`
1240 => class_element_to_vec($0)
1241 `static` FieldDefinition[?Yield, ?Await] `;`
1242 => class_element_static_field($0, $1)
1244 => class_element_empty()
1248 AsyncFunctionDeclaration[Yield, Await, Default] :
1249 `async` [no LineTerminator here] `function` BindingIdentifier[?Yield, ?Await] `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
1250 => function_decl(async_function($0, Some($2), $3, $4, $5, $6, $7, $8))
1251 [+Default] `async` [no LineTerminator here] `function` `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
1252 => function_decl(async_function($0, None, $2, $3, $4, $5, $6, $7))
1255 AsyncFunctionExpression :
1256 `async` [no LineTerminator here] `function` `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
1257 => function_expr(async_function($0, None, $2, $3, $4, $5, $6, $7))
1258 `async` [no LineTerminator here] `function` BindingIdentifier[~Yield, +Await] `(` FormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
1259 => function_expr(async_function($0, Some($2), $3, $4, $5, $6, $7, $8))
1261 @returns MethodDefinition
1262 AsyncMethod[Yield, Await] :
1263 `async` [no LineTerminator here] PropertyName[?Yield, ?Await] `(` UniqueFormalParameters[~Yield, +Await] `)` `{` AsyncFunctionBody `}`
1264 => async_method($0, $1, $2, $3, $4, $5, $6, $7)
1266 @returns FunctionBody
1268 FunctionBody[~Yield, +Await]
1272 AwaitExpression[Yield] :
1273 `await` UnaryExpression[?Yield, +Await]
1274 => await_expr($0, $1)
1278 AsyncArrowFunction[In, Yield, Await] :
1279 `async` [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] `=>` AsyncConciseBody[?In]
1280 => async_arrow_function_bare($0, $1, $3)
1281 CoverCallExpressionAndAsyncArrowHead[?Yield, ?Await] [no LineTerminator here] `=>` AsyncConciseBody[?In]
1282 => async_arrow_function($0, $2)
1284 @returns ArrowExpressionBody
1285 AsyncConciseBody[In] :
1286 [lookahead != `{`] AssignmentExpression[?In, ~Yield, +Await]
1287 => concise_body_expression($0)
1288 `{` AsyncFunctionBody `}`
1289 => concise_body_block($0, $1, $2)
1291 @returns BindingIdentifier
1292 AsyncArrowBindingIdentifier[Yield] :
1293 BindingIdentifier[?Yield, +Await]
1297 CoverCallExpressionAndAsyncArrowHead[Yield, Await] :
1298 MemberExpression[?Yield, ?Await] Arguments[?Yield, ?Await]
1299 => call_expr($0, $1)
1303 `async` [no LineTerminator here] ArrowFormalParameters[~Yield, +Await]
1313 StatementList[~Yield, ~Await, ~Return]
1316 @returns Vec<Statement>
1321 @returns Vec<Statement>
1326 @returns Vec<Statement>
1329 => module_item_list_single($0)
1330 ModuleItemList ModuleItem
1331 => module_item_list_append($0, $1)
1339 StatementListItem[~Yield, ~Await, ~Return]
1345 `import` ImportClause FromClause `;`
1346 => import_declaration(Some($1), $2)
1347 `import` ModuleSpecifier `;`
1348 => import_declaration(None, $1)
1352 ImportedDefaultBinding
1353 => import_clause(Some($0), None, None)
1355 => import_clause(None, Some($0), None)
1357 => import_clause(None, None, Some($0))
1358 ImportedDefaultBinding `,` NameSpaceImport
1359 => import_clause(Some($0), Some($2), None)
1360 ImportedDefaultBinding `,` NamedImports
1361 => import_clause(Some($0), None, Some($2))
1363 @returns BindingIdentifier
1364 ImportedDefaultBinding :
1370 `*` `as` ImportedBinding
1371 => name_space_import($2)
1376 => imports_list_empty()
1379 `{` ImportsList `,` `}`
1384 `from` ModuleSpecifier
1390 => imports_list_append(imports_list_empty(), $0)
1391 ImportsList `,` ImportSpecifier
1392 => imports_list_append($0, $2)
1397 => import_specifier($0)
1398 IdentifierName `as` ImportedBinding
1399 => import_specifier_renaming($0, $2)
1404 => module_specifier($0)
1406 @returns BindingIdentifier
1408 BindingIdentifier[~Yield, ~Await]
1414 `export` `*` FromClause `;`
1415 => export_all_from($2)
1416 `export` ExportClause FromClause `;`
1417 => export_set_from($1, $2)
1418 `export` ExportClause `;`
1420 `export` VariableStatement[~Yield, ~Await]
1422 `export` Declaration[~Yield, ~Await]
1423 => export_declaration($1)
1424 `export` `default` HoistableDeclaration[~Yield, ~Await, +Default]
1425 => export_default_hoistable($2)
1426 `export` `default` ClassDeclaration[~Yield, ~Await, +Default]
1427 => export_default_class($2)
1428 `export` `default` [lookahead <! {`function`, `async`, `class`}] AssignmentExpression[+In, ~Yield, ~Await] `;`
1429 => export_default_value($2)
1434 => exports_list_empty()
1437 `{` ExportsList `,` `}`
1443 => exports_list_append(exports_list_empty(), $0)
1444 ExportsList `,` ExportSpecifier
1445 => exports_list_append($0, $2)
1450 => export_specifier($0)
1451 IdentifierName `as` IdentifierName
1452 => export_specifier_renaming($0, $2)