@@ -1855,15 +1855,7 @@ Parser<ManagedTokenSource>::parse_macro_invocation_semi (
18551855 std::unique_ptr<AST::TokenTree> tree = parse_token_tree ();
18561856
18571857 if (tree == nullptr )
1858- {
1859- Error error (t->get_locus (),
1860- " failed to parse token tree for macro invocation semi "
1861- " - found %qs" ,
1862- t->get_token_description ());
1863- add_error (std::move (error));
1864-
1865- return nullptr ;
1866- }
1858+ return nullptr ;
18671859
18681860 token_trees.push_back (std::move (tree));
18691861
@@ -2999,8 +2991,9 @@ Parser<ManagedTokenSource>::parse_function (AST::Visibility vis,
29992991 else
30002992 {
30012993 std::unique_ptr<AST::BlockExpr> block_expr = parse_block_expr ();
3002- if (block_expr != nullptr )
3003- body = std::move (block_expr);
2994+ if (block_expr == nullptr )
2995+ return nullptr ;
2996+ body = std::move (block_expr);
30042997 }
30052998
30062999 return std::unique_ptr<AST::Function> (
@@ -6226,10 +6219,6 @@ Parser<ManagedTokenSource>::parse_let_stmt (AST::AttrVec outer_attrs,
62266219 expr = parse_expr ();
62276220 if (expr == nullptr )
62286221 {
6229- Error error (lexer.peek_token ()->get_locus (),
6230- " failed to parse expression in let statement" );
6231- add_error (std::move (error));
6232-
62336222 skip_after_semicolon ();
62346223 return nullptr ;
62356224 }
@@ -7256,11 +7245,7 @@ Parser<ManagedTokenSource>::parse_block_expr (
72567245 ExprOrStmt expr_or_stmt = parse_stmt_or_expr ();
72577246 if (expr_or_stmt.is_error ())
72587247 {
7259- Error error (
7260- t->get_locus (),
7261- " failed to parse statement or expression in block expression" );
7262- add_error (std::move (error));
7263-
7248+ skip_after_end_block ();
72647249 return nullptr ;
72657250 }
72667251
@@ -7783,14 +7768,7 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec outer_attrs,
77837768 // parse required block expr
77847769 std::unique_ptr<AST::BlockExpr> if_body = parse_block_expr ();
77857770 if (if_body == nullptr )
7786- {
7787- Error error (lexer.peek_token ()->get_locus (),
7788- " failed to parse if body block expression in if expression" );
7789- add_error (std::move (error));
7790-
7791- // skip somewhere?
7792- return nullptr ;
7793- }
7771+ return nullptr ;
77947772
77957773 // branch to parse end or else (and then else, else if, or else if let)
77967774 if (lexer.peek_token ()->get_id () != ELSE)
@@ -8113,13 +8091,7 @@ Parser<ManagedTokenSource>::parse_loop_expr (AST::AttrVec outer_attrs,
81138091 // parse loop body, which is required
81148092 std::unique_ptr<AST::BlockExpr> loop_body = parse_block_expr ();
81158093 if (loop_body == nullptr )
8116- {
8117- Error error (lexer.peek_token ()->get_locus (),
8118- " could not parse loop body in (infinite) loop expression" );
8119- add_error (std::move (error));
8120-
8121- return nullptr ;
8122- }
8094+ return nullptr ;
81238095
81248096 return std::unique_ptr<AST::LoopExpr> (
81258097 new AST::LoopExpr (std::move (loop_body), locus, std::move (label),
@@ -12198,6 +12170,8 @@ Parser<ManagedTokenSource>::parse_expr (int right_binding_power,
1219812170 // parse null denotation (unary part of expression)
1219912171 std::unique_ptr<AST::Expr> expr
1220012172 = null_denotation ({}, null_denotation_restrictions);
12173+ if (expr == nullptr )
12174+ return nullptr ;
1220112175
1220212176 return left_denotations (std::move (expr), right_binding_power,
1220312177 std::move (outer_attrs), restrictions);
0 commit comments