@@ -641,25 +641,29 @@ impl Parser {
641641 lexer : & mut Lexer < ' a > ,
642642 ctx : & mut ExpressionContext < ' a , ' _ , ' _ > ,
643643 token : Option < TokenSpan < ' a > > ,
644+ expected_token : ExpectedToken < ' a > ,
644645 ) -> Result < ' a , Handle < ast:: Expression < ' a > > > {
645646 self . track_recursion ( |this| {
646647 this. push_rule_span ( Rule :: LhsExpr , lexer) ;
647648 let token = token. unwrap_or_else ( || lexer. next ( ) ) ;
648649 let expr = match token {
649650 ( Token :: Operation ( '*' ) , _) => {
650- let expr = this. lhs_expression ( lexer, ctx, None ) ?;
651+ let expr =
652+ this. lhs_expression ( lexer, ctx, None , ExpectedToken :: LhsExpression ) ?;
651653 let expr = ast:: Expression :: Deref ( expr) ;
652654 let span = this. peek_rule_span ( lexer) ;
653655 ctx. expressions . append ( expr, span)
654656 }
655657 ( Token :: Operation ( '&' ) , _) => {
656- let expr = this. lhs_expression ( lexer, ctx, None ) ?;
658+ let expr =
659+ this. lhs_expression ( lexer, ctx, None , ExpectedToken :: LhsExpression ) ?;
657660 let expr = ast:: Expression :: AddrOf ( expr) ;
658661 let span = this. peek_rule_span ( lexer) ;
659662 ctx. expressions . append ( expr, span)
660663 }
661664 ( Token :: Paren ( '(' ) , span) => {
662- let expr = this. lhs_expression ( lexer, ctx, None ) ?;
665+ let expr =
666+ this. lhs_expression ( lexer, ctx, None , ExpectedToken :: LhsExpression ) ?;
663667 lexer. expect ( Token :: Paren ( ')' ) ) ?;
664668 this. component_or_swizzle_specifier ( span, lexer, ctx, expr) ?
665669 }
@@ -675,10 +679,7 @@ impl Parser {
675679 this. component_or_swizzle_specifier ( span, lexer, ctx, ident) ?
676680 }
677681 ( _, span) => {
678- return Err ( Box :: new ( Error :: Unexpected (
679- span,
680- ExpectedToken :: LhsExpression ,
681- ) ) ) ;
682+ return Err ( Box :: new ( Error :: Unexpected ( span, expected_token) ) ) ;
682683 }
683684 } ;
684685
@@ -1032,6 +1033,7 @@ impl Parser {
10321033 ctx : & mut ExpressionContext < ' a , ' _ , ' _ > ,
10331034 block : & mut ast:: Block < ' a > ,
10341035 token : TokenSpan < ' a > ,
1036+ expected_token : ExpectedToken < ' a > ,
10351037 ) -> Result < ' a , ( ) > {
10361038 match token {
10371039 ( Token :: Word ( "_" ) , span) => {
@@ -1046,7 +1048,7 @@ impl Parser {
10461048 }
10471049 _ => { }
10481050 }
1049- let target = self . lhs_expression ( lexer, ctx, Some ( token) ) ?;
1051+ let target = self . lhs_expression ( lexer, ctx, Some ( token) , expected_token ) ?;
10501052
10511053 let ( op, value) = match lexer. next ( ) {
10521054 ( Token :: Operation ( '=' ) , _) => {
@@ -1146,9 +1148,10 @@ impl Parser {
11461148 context : & mut ExpressionContext < ' a , ' _ , ' _ > ,
11471149 block : & mut ast:: Block < ' a > ,
11481150 token : TokenSpan < ' a > ,
1151+ expected_token : ExpectedToken < ' a > ,
11491152 ) -> Result < ' a , ( ) > {
11501153 if !self . maybe_func_call_statement ( lexer, context, block, token) ? {
1151- self . variable_updating_statement ( lexer, context, block, token) ?;
1154+ self . variable_updating_statement ( lexer, context, block, token, expected_token ) ?;
11521155 }
11531156 Ok ( ( ) )
11541157 }
@@ -1164,6 +1167,7 @@ impl Parser {
11641167 ctx : & mut ExpressionContext < ' a , ' _ , ' _ > ,
11651168 block : & mut ast:: Block < ' a > ,
11661169 token : TokenSpan < ' a > ,
1170+ expected_token : ExpectedToken < ' a > ,
11671171 ) -> Result < ' a , ( ) > {
11681172 let local_decl = match token {
11691173 ( Token :: Word ( "let" ) , _) => {
@@ -1213,7 +1217,13 @@ impl Parser {
12131217 } )
12141218 }
12151219 token => {
1216- return self . func_call_or_variable_updating_statement ( lexer, ctx, block, token) ;
1220+ return self . func_call_or_variable_updating_statement (
1221+ lexer,
1222+ ctx,
1223+ block,
1224+ token,
1225+ expected_token,
1226+ ) ;
12171227 }
12181228 } ;
12191229
@@ -1420,7 +1430,11 @@ impl Parser {
14201430 if !lexer. next_if ( Token :: Separator ( ';' ) ) {
14211431 let token = lexer. next ( ) ;
14221432 this. variable_or_value_or_func_call_or_variable_updating_statement (
1423- lexer, ctx, block, token,
1433+ lexer,
1434+ ctx,
1435+ block,
1436+ token,
1437+ ExpectedToken :: ForInit ,
14241438 ) ?;
14251439 lexer. expect ( Token :: Separator ( ';' ) ) ?;
14261440 } ;
@@ -1455,6 +1469,7 @@ impl Parser {
14551469 ctx,
14561470 & mut continuing,
14571471 token,
1472+ ExpectedToken :: ForUpdate ,
14581473 ) ?;
14591474 lexer. expect ( Token :: Paren ( ')' ) ) ?;
14601475 }
@@ -1508,7 +1523,11 @@ impl Parser {
15081523 }
15091524 token => {
15101525 this. variable_or_value_or_func_call_or_variable_updating_statement (
1511- lexer, ctx, block, token,
1526+ lexer,
1527+ ctx,
1528+ block,
1529+ token,
1530+ ExpectedToken :: Statement ,
15121531 ) ?;
15131532 lexer. expect ( Token :: Separator ( ';' ) ) ?;
15141533 this. pop_rule_span ( lexer) ;
0 commit comments