@@ -685,8 +685,7 @@ expression* parser::parse_primary_expression(parse_visitor_base& v,
685685 expression* arrow_function = this ->parse_arrow_function_body (
686686 v, function_attributes::normal,
687687 /* parameter_list_begin=*/ arrow_span.begin (),
688- /* allow_in_operator=*/ prec.in_operator ,
689- expression_arena::array_ptr<expression*>(),
688+ /* prec=*/ prec, expression_arena::array_ptr<expression*>(),
690689 /* return_type_visits=*/ nullptr );
691690 return arrow_function;
692691 }
@@ -747,17 +746,16 @@ expression* parser::parse_primary_expression(parse_visitor_base& v,
747746expression* parser::parse_async_expression (parse_visitor_base& v,
748747 const token& async_token,
749748 precedence prec) {
750- expression* ast = this -> parse_async_expression_only (
751- v, async_token, /* allow_in_operator =*/ prec. in_operator );
749+ expression* ast =
750+ this -> parse_async_expression_only ( v, async_token, /* prec =*/ prec);
752751 if (!prec.binary_operators ) {
753752 return ast;
754753 }
755754 return this ->parse_expression_remainder (v, ast, prec);
756755}
757756
758757expression* parser::parse_async_expression_only (
759- parse_visitor_base& v, const token& async_or_await_token,
760- bool allow_in_operator) {
758+ parse_visitor_base& v, const token& async_or_await_token, precedence prec) {
761759 bool is_async = async_or_await_token.type == token_type::kw_async;
762760 bool is_await = async_or_await_token.type == token_type::kw_await;
763761 QLJS_ASSERT (is_async || is_await);
@@ -786,8 +784,7 @@ expression* parser::parse_async_expression_only(
786784 }
787785 expression* ast = this ->parse_arrow_function_body_no_scope (
788786 v, function_attributes::async, async_begin,
789- /* allow_in_operator=*/ allow_in_operator,
790- this ->expressions_ .make_array (std::move (parameters)),
787+ /* prec=*/ prec, this ->expressions_ .make_array (std::move (parameters)),
791788 /* return_type_visits=*/ return_type_visits);
792789 v.visit_exit_function_scope ();
793790 return ast;
@@ -1251,8 +1248,7 @@ expression* parser::parse_await_expression(parse_visitor_base& v,
12511248 return this ->make_expression <expression::variable>(
12521249 await_token.identifier_name (), await_token.type );
12531250 } else {
1254- return this ->parse_async_expression_only (
1255- v, await_token, /* allow_in_operator=*/ prec.in_operator );
1251+ return this ->parse_async_expression_only (v, await_token, /* prec=*/ prec);
12561252 }
12571253}
12581254
@@ -1490,7 +1486,7 @@ expression* parser::parse_expression_remainder(parse_visitor_base& v,
14901486 expression* arrow_function = this ->parse_arrow_function_body (
14911487 v, /* attributes=*/ function_attributes::async,
14921488 /* parameter_list_begin=*/ call->left_paren_span ().begin (),
1493- /* allow_in_operator =*/ prec. in_operator ,
1489+ /* prec =*/ prec,
14941490 /* parameters=*/
14951491 expression_arena::array_ptr<expression*>(
14961492 call->children_ .begin () + 1 , // Drop the callee.
@@ -1911,7 +1907,7 @@ expression* parser::parse_expression_remainder(parse_visitor_base& v,
19111907 binary_builder.replace_last (this ->parse_arrow_function_expression_remainder (
19121908 v, /* generic_parameter_visits=*/ nullptr , lhs,
19131909 /* return_type_visits=*/ return_type_visits,
1914- /* allow_in_operator =*/ prec. in_operator ));
1910+ /* prec =*/ prec));
19151911 goto next;
19161912 }
19171913
@@ -1976,7 +1972,7 @@ expression* parser::parse_expression_remainder(parse_visitor_base& v,
19761972 /* generic_parameter_visits=*/ nullptr ,
19771973 binary_builder.last_expression (),
19781974 /* return_type_visits=*/ nullptr ,
1979- /* allow_in_operator =*/ prec. in_operator ));
1975+ /* prec =*/ prec));
19801976 }
19811977 break ;
19821978 }
@@ -2139,7 +2135,7 @@ expression* parser::parse_expression_remainder(parse_visitor_base& v,
21392135expression* parser::parse_arrow_function_expression_remainder (
21402136 parse_visitor_base& v, buffering_visitor* generic_parameter_visits,
21412137 expression* parameters_expression, buffering_visitor* return_type_visits,
2142- bool allow_in_operator ) {
2138+ precedence prec ) {
21432139 const char8* parameter_list_begin = nullptr ;
21442140 if (parameters_expression->kind () == expression_kind::paren) {
21452141 parameter_list_begin = parameters_expression->span ().begin ();
@@ -2312,8 +2308,7 @@ expression* parser::parse_arrow_function_expression_remainder(
23122308 expression* arrow_function = this ->parse_arrow_function_body_no_scope (
23132309 v, /* attributes=*/ function_attributes::normal,
23142310 /* parameter_list_begin=*/ parameter_list_begin,
2315- /* allow_in_operator=*/ allow_in_operator,
2316- this ->expressions_ .make_array (std::move (parameters)),
2311+ /* prec=*/ prec, this ->expressions_ .make_array (std::move (parameters)),
23172312 /* return_type_visits=*/ return_type_visits);
23182313 arrow_function = this ->maybe_wrap_erroneous_arrow_function (
23192314 arrow_function, /* parameters_expression=*/ parameters_expression);
@@ -2430,20 +2425,20 @@ parser::parse_arrow_function_parameters_or_call_arguments(
24302425
24312426expression* parser::parse_arrow_function_body (
24322427 parse_visitor_base& v, function_attributes attributes,
2433- const char8* parameter_list_begin, bool allow_in_operator ,
2428+ const char8* parameter_list_begin, precedence prec ,
24342429 expression_arena::array_ptr<expression*>&& parameters,
24352430 buffering_visitor* return_type_visits) {
24362431 v.visit_enter_function_scope ();
24372432 expression* arrow = this ->parse_arrow_function_body_no_scope (
2438- v, attributes, parameter_list_begin, allow_in_operator ,
2439- std::move (parameters), return_type_visits);
2433+ v, attributes, parameter_list_begin, prec, std::move (parameters) ,
2434+ return_type_visits);
24402435 v.visit_exit_function_scope ();
24412436 return arrow;
24422437}
24432438
24442439expression* parser::parse_arrow_function_body_no_scope (
24452440 parse_visitor_base& v, function_attributes attributes,
2446- const char8* parameter_list_begin, bool allow_in_operator ,
2441+ const char8* parameter_list_begin, precedence prec ,
24472442 expression_arena::array_ptr<expression*>&& parameters,
24482443 buffering_visitor* return_type_visits) {
24492444 function_guard guard = this ->enter_function (attributes);
@@ -2466,9 +2461,10 @@ expression* parser::parse_arrow_function_body_no_scope(
24662461 this ->parse_and_visit_statement_block_no_scope (v);
24672462 } else {
24682463 this ->parse_and_visit_expression (
2464+ // FIXME(strager): Should we inherit other things from prec?
24692465 v, precedence{
24702466 .commas = false ,
2471- .in_operator = allow_in_operator ,
2467+ .in_operator = prec. in_operator ,
24722468 .colon_type_annotation = allow_type_annotations::never,
24732469 });
24742470 }
@@ -3189,9 +3185,8 @@ expression* parser::parse_jsx_or_typescript_generic_expression(
31893185 case token_type::equal:
31903186 case token_type::kw_extends:
31913187 this ->lexer_ .roll_back_transaction (std::move (transaction));
3192- return this ->parse_typescript_generic_arrow_expression (
3193- v,
3194- /* allow_in_operator=*/ prec.in_operator );
3188+ return this ->parse_typescript_generic_arrow_expression (v,
3189+ /* prec=*/ prec);
31953190
31963191 // <T>() => {} // Generic arrow function.
31973192 // <T>expr // Cast.
@@ -3634,7 +3629,7 @@ expression* parser::parse_jsx_element_or_fragment(parse_visitor_base& v,
36343629}
36353630
36363631expression* parser::parse_typescript_generic_arrow_expression (
3637- parse_visitor_base& v, bool allow_in_operator ) {
3632+ parse_visitor_base& v, precedence prec ) {
36383633 const char8* begin = this ->peek ().begin ;
36393634
36403635 v.visit_enter_function_scope ();
@@ -3661,8 +3656,7 @@ expression* parser::parse_typescript_generic_arrow_expression(
36613656
36623657 expression* ast = this ->parse_arrow_function_body_no_scope (
36633658 v, function_attributes::normal, begin,
3664- /* allow_in_operator=*/ allow_in_operator,
3665- this ->expressions_ .make_array (std::move (parameters)),
3659+ /* prec=*/ prec, this ->expressions_ .make_array (std::move (parameters)),
36663660 /* return_type_visits=*/ &return_type_visits);
36673661
36683662 v.visit_exit_function_scope ();
@@ -3750,7 +3744,7 @@ expression* parser::parse_typescript_angle_type_assertion_expression(
37503744 v,
37513745 /* generic_parameter_visits=*/ &generic_parameter_visits, ast,
37523746 /* return_type_visits=*/ &return_type_visits,
3753- /* allow_in_operator =*/ prec. in_operator );
3747+ /* prec =*/ prec);
37543748 }
37553749 }
37563750
0 commit comments