From: Pierre-Emmanuel Patry <[email protected]>
GCC5 does not infer correctly the type to use within the template.
gcc/rust/ChangeLog:
* parse/rust-parse-impl-expr.hxx: Use explicit template.
* parse/rust-parse-impl-path.hxx: Likewise.
* parse/rust-parse-impl-ttree.hxx: Likewise.
* parse/rust-parse-impl.hxx: Likewise.
Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github:
https://github.com/Rust-GCC/gccrs/commit/13d989d6723fd5489ca1df4cd91d985816903bd4
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4330
gcc/rust/parse/rust-parse-impl-expr.hxx | 429 ++++++++++++++---------
gcc/rust/parse/rust-parse-impl-path.hxx | 7 +-
gcc/rust/parse/rust-parse-impl-ttree.hxx | 12 +-
gcc/rust/parse/rust-parse-impl.hxx | 16 +-
4 files changed, 282 insertions(+), 182 deletions(-)
diff --git a/gcc/rust/parse/rust-parse-impl-expr.hxx
b/gcc/rust/parse/rust-parse-impl-expr.hxx
index 80a478036..96a2686df 100644
--- a/gcc/rust/parse/rust-parse-impl-expr.hxx
+++ b/gcc/rust/parse/rust-parse-impl-expr.hxx
@@ -38,7 +38,8 @@ Parser<ManagedTokenSource>::parse_block_expr (
if (!skip_token (LEFT_CURLY))
{
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
@@ -55,7 +56,8 @@ Parser<ManagedTokenSource>::parse_block_expr (
if (!expr_or_stmt)
{
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
t = lexer.peek_token ();
@@ -81,7 +83,7 @@ Parser<ManagedTokenSource>::parse_block_expr (
add_error (std::move (error));
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// grammar allows for empty block expressions
@@ -129,7 +131,8 @@ Parser<ManagedTokenSource>::parse_const_block_expr
(AST::AttrVec outer_attrs,
add_error (Error (locus, "failed to parse inner block in const block"));
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node{});
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
auto block = std::move (block_res.value ());
@@ -157,13 +160,14 @@ Parser<ManagedTokenSource>::parse_grouped_expr
(AST::AttrVec outer_attrs)
{
// skip after somewhere?
// error?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
if (!skip_token (RIGHT_PAREN))
{
// skip after somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
return std::unique_ptr<AST::GroupedExpr> (
@@ -234,7 +238,7 @@ Parser<ManagedTokenSource>::parse_closure_expr
(AST::AttrVec outer_attrs)
t->get_token_description ()));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// again branch based on next token
@@ -255,7 +259,8 @@ Parser<ManagedTokenSource>::parse_closure_expr
(AST::AttrVec outer_attrs)
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
// parse block expr, which is required
@@ -268,7 +273,8 @@ Parser<ManagedTokenSource>::parse_closure_expr
(AST::AttrVec outer_attrs)
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::ClosureExprInnerTyped> (
@@ -290,7 +296,8 @@ Parser<ManagedTokenSource>::parse_closure_expr
(AST::AttrVec outer_attrs)
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::ClosureExprInner> (
@@ -368,7 +375,7 @@ Parser<ManagedTokenSource>::parse_literal_expr
(AST::AttrVec outer_attrs)
t->get_token_description ()));
// skip?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// create literal based on stuff in switch
@@ -395,7 +402,7 @@ Parser<ManagedTokenSource>::parse_box_expr (AST::AttrVec
outer_attrs,
auto expr = parse_expr (AST::AttrVec (), restrictions);
if (!expr)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
return std::unique_ptr<AST::BoxExpr> (
new AST::BoxExpr (std::move (expr.value ()), std::move (outer_attrs),
@@ -443,7 +450,7 @@ Parser<ManagedTokenSource>::parse_try_expr (AST::AttrVec
outer_attrs,
auto block_expr = parse_block_expr ();
if (!block_expr)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
return std::unique_ptr<AST::TryExpr> (
new AST::TryExpr (std::move (block_expr.value ()), std::move (outer_attrs),
@@ -483,7 +490,7 @@ Parser<ManagedTokenSource>::parse_break_expr (AST::AttrVec
outer_attrs,
new AST::BreakExpr (std::move (label), tl::nullopt,
std::move (outer_attrs), locus));
else
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
}
// Parses a continue expression (including any label to continue from).
@@ -524,7 +531,8 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
if (!skip_token (IF))
{
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
@@ -537,7 +545,7 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
/* parse required condition expr - HACK to prevent struct expr from being
@@ -552,13 +560,14 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
// parse required block expr
auto if_body = parse_block_expr ();
if (!if_body)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
// branch to parse end or else (and then else, else if, or else if let)
if (lexer.peek_token ()->get_id () != ELSE)
@@ -593,7 +602,8 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::IfExprConseqElse> (
@@ -618,7 +628,8 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::IfExprConseqElse> (
@@ -639,7 +650,8 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::IfExprConseqElse> (
@@ -656,7 +668,8 @@ Parser<ManagedTokenSource>::parse_if_expr (AST::AttrVec
outer_attrs,
t->get_token_description ()));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
}
@@ -677,7 +690,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
if (!skip_token (IF))
{
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
@@ -690,7 +704,7 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
lexer.skip_token ();
@@ -705,13 +719,14 @@ Parser<ManagedTokenSource>::parse_if_let_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
if (!skip_token (EQUAL))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// parse expression (required) - HACK to prevent struct expr being parsed
@@ -725,7 +740,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
/* TODO: check for expression not being a struct expression or lazy boolean
* expression here? or actually probably in semantic analysis. */
@@ -740,7 +756,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
// branch to parse end or else (and then else, else if, or else if let)
@@ -775,7 +792,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::IfLetExprConseqElse> (
@@ -801,7 +819,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::IfLetExprConseqElse> (
@@ -824,7 +843,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::IfLetExprConseqElse> (
@@ -844,7 +864,8 @@ Parser<ManagedTokenSource>::parse_if_let_expr (AST::AttrVec
outer_attrs,
t->get_token_description ()));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
}
@@ -871,7 +892,8 @@ Parser<ManagedTokenSource>::parse_loop_expr (AST::AttrVec
outer_attrs,
if (!skip_token (LOOP))
{
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
else
@@ -883,7 +905,7 @@ Parser<ManagedTokenSource>::parse_loop_expr (AST::AttrVec
outer_attrs,
// parse loop body, which is required
auto loop_body = parse_block_expr ();
if (!loop_body)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
return std::unique_ptr<AST::LoopExpr> (
new AST::LoopExpr (std::move (loop_body.value ()), locus, std::move
(label),
@@ -909,7 +931,8 @@ Parser<ManagedTokenSource>::parse_while_loop_expr (
if (!skip_token (WHILE))
{
skip_after_end_block ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
else
@@ -927,7 +950,7 @@ Parser<ManagedTokenSource>::parse_while_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// parse loop predicate (required) with HACK to prevent struct expr parsing
@@ -941,7 +964,8 @@ Parser<ManagedTokenSource>::parse_while_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
/* TODO: check that it isn't struct expression here? actually, probably in
* semantic analysis */
@@ -955,7 +979,8 @@ Parser<ManagedTokenSource>::parse_while_loop_expr (
add_error (std::move (error));
// skip somewhere
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::WhileLoopExpr> (
@@ -988,7 +1013,7 @@ Parser<ManagedTokenSource>::parse_while_let_loop_expr (
add_error (std::move (error));
// skip somewhere
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// as this token is definitely let now, save the computation of comparison
lexer.skip_token ();
@@ -1002,13 +1027,13 @@ Parser<ManagedTokenSource>::parse_while_let_loop_expr (
Error error (lexer.peek_token ()->get_locus (),
"should be at least 1 pattern");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
if (!skip_token (EQUAL))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
/* parse predicate expression, which is required (and HACK to prevent struct
@@ -1023,7 +1048,8 @@ Parser<ManagedTokenSource>::parse_while_let_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
/* TODO: ensure that struct expression is not parsed? Actually, probably in
* semantic analysis. */
@@ -1037,7 +1063,8 @@ Parser<ManagedTokenSource>::parse_while_let_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::WhileLetLoopExpr> (
@@ -1070,13 +1097,14 @@ Parser<ManagedTokenSource>::parse_for_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
if (!skip_token (IN))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
/* parse iterator expression, which is required - also HACK to prevent
@@ -1091,7 +1119,8 @@ Parser<ManagedTokenSource>::parse_for_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
// TODO: check to ensure this isn't struct expr? Or in semantic analysis.
@@ -1104,7 +1133,8 @@ Parser<ManagedTokenSource>::parse_for_loop_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::ForLoopExpr> (
new AST::ForLoopExpr (std::move (pattern), std::move (expr.value ()),
@@ -1134,7 +1164,8 @@ Parser<ManagedTokenSource>::parse_labelled_loop_expr
(const_TokenPtr tok,
"label) - found %qs",
tok->get_token_description ());
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
else
@@ -1144,7 +1175,8 @@ Parser<ManagedTokenSource>::parse_labelled_loop_expr
(const_TokenPtr tok,
add_error (std::move (error));
// skip?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
}
@@ -1177,7 +1209,8 @@ Parser<ManagedTokenSource>::parse_labelled_loop_expr
(const_TokenPtr tok,
t->get_token_description ()));
// skip?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
}
@@ -1206,7 +1239,8 @@ Parser<ManagedTokenSource>::parse_match_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
/* TODO: check for scrutinee expr not being struct expr? or do so in
* semantic analysis */
@@ -1214,7 +1248,7 @@ Parser<ManagedTokenSource>::parse_match_expr
(AST::AttrVec outer_attrs,
if (!skip_token (LEFT_CURLY))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// parse inner attributes (if they exist)
@@ -1236,14 +1270,16 @@ Parser<ManagedTokenSource>::parse_match_expr
(AST::AttrVec outer_attrs,
"failed to parse match arm in match arms");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
if (!skip_token (MATCH_ARROW))
{
// skip after somewhere?
// TODO is returning here a good idea? or is break better?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
ParseRestrictions restrictions;
@@ -1258,7 +1294,8 @@ Parser<ManagedTokenSource>::parse_match_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
bool is_expr_without_block = expr.value ()->is_expr_without_block ();
@@ -1283,7 +1320,8 @@ Parser<ManagedTokenSource>::parse_match_expr
(AST::AttrVec outer_attrs,
"expression in match arm (if not final case)");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
else
{
@@ -1297,7 +1335,7 @@ Parser<ManagedTokenSource>::parse_match_expr
(AST::AttrVec outer_attrs,
if (!skip_token (RIGHT_CURLY))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
match_arms.shrink_to_fit ();
@@ -1334,7 +1372,8 @@ Parser<ManagedTokenSource>::parse_async_block_expr
(AST::AttrVec outer_attrs)
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::AsyncBlockExpr> (
@@ -1365,7 +1404,8 @@ Parser<ManagedTokenSource>::parse_unsafe_block_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
return std::unique_ptr<AST::UnsafeBlockExpr> (
new AST::UnsafeBlockExpr (std::move (block_expr.value ()),
@@ -1414,7 +1454,8 @@ Parser<ManagedTokenSource>::parse_array_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
if (lexer.peek_token ()->get_id () == SEMICOLON)
@@ -1432,7 +1473,8 @@ Parser<ManagedTokenSource>::parse_array_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
skip_token (RIGHT_SQUARE);
@@ -1487,7 +1529,8 @@ Parser<ManagedTokenSource>::parse_array_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
exprs.push_back (std::move (expr.value ()));
@@ -1514,7 +1557,8 @@ Parser<ManagedTokenSource>::parse_array_expr
(AST::AttrVec outer_attrs,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
}
}
@@ -1557,7 +1601,8 @@ Parser<ManagedTokenSource>::parse_grouped_or_tuple_expr (
add_error (std::move (error));
// skip after somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
// detect whether grouped expression with right parentheses as next token
@@ -1597,7 +1642,8 @@ Parser<ManagedTokenSource>::parse_grouped_or_tuple_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
exprs.push_back (std::move (expr.value ()));
@@ -1623,7 +1669,7 @@ Parser<ManagedTokenSource>::parse_grouped_or_tuple_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
}
@@ -1653,7 +1699,7 @@ Parser<ManagedTokenSource>::parse_struct_expr_field ()
"identifier and expression");
add_error (std::move (error));
- return tl::unexpected (
+ return tl::unexpected<Parse::Error::StructExprField> (
Parse::Error::StructExprField::CHILD_ERROR);
}
@@ -1683,7 +1729,8 @@ Parser<ManagedTokenSource>::parse_struct_expr_field ()
if (!skip_token (COLON))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::StructExprField::MALFORMED);
+ return tl::unexpected<Parse::Error::StructExprField> (
+ Parse::Error::StructExprField::MALFORMED);
}
// parse field expression (required)
@@ -1695,7 +1742,8 @@ Parser<ManagedTokenSource>::parse_struct_expr_field ()
"field with tuple index");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::StructExprField::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::StructExprField> (
+ Parse::Error::StructExprField::CHILD_ERROR);
}
return std::unique_ptr<AST::StructExprFieldIndexValue> (
@@ -1707,7 +1755,8 @@ Parser<ManagedTokenSource>::parse_struct_expr_field ()
/* this is a struct base and can't be parsed here, so just return
* nothing without erroring */
- return tl::unexpected (Parse::Error::StructExprField::STRUCT_BASE);
+ return tl::unexpected<Parse::Error::StructExprField> (
+ Parse::Error::StructExprField::STRUCT_BASE);
default:
add_error (
Error (t->get_locus (),
@@ -1715,7 +1764,8 @@ Parser<ManagedTokenSource>::parse_struct_expr_field ()
"expected identifier or integer literal",
t->get_token_description ()));
- return tl::unexpected (Parse::Error::StructExprField::MALFORMED);
+ return tl::unexpected<Parse::Error::StructExprField> (
+ Parse::Error::StructExprField::MALFORMED);
}
}
@@ -1738,7 +1788,8 @@ Parser<ManagedTokenSource>::parse_expr (int
right_binding_power,
TokenId id = current_token->get_id ();
if (id == SEMICOLON || id == RIGHT_PAREN || id == RIGHT_CURLY
|| id == RIGHT_SQUARE || id == COMMA || id == LEFT_CURLY)
- return tl::unexpected (Parse::Error::Expr::NULL_EXPR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::NULL_EXPR);
}
ParseRestrictions null_denotation_restrictions = restrictions;
@@ -1748,7 +1799,7 @@ Parser<ManagedTokenSource>::parse_expr (int
right_binding_power,
tl::expected<std::unique_ptr<AST::Expr>, Parse::Error::Expr> expr
= null_denotation ({}, null_denotation_restrictions);
if (!expr)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
return left_denotations (std::move (expr), right_binding_power,
std::move (outer_attrs), restrictions);
@@ -1774,7 +1825,8 @@ Parser<ManagedTokenSource>::left_denotations (
{
// DEBUG
rust_debug ("null denotation is null; returning null for parse_expr");
- return tl::unexpected (Parse::Error::Expr::NULL_DENOTATION);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::NULL_DENOTATION);
}
const_TokenPtr current_token = lexer.peek_token ();
@@ -1804,7 +1856,8 @@ Parser<ManagedTokenSource>::left_denotations (
// DEBUG
rust_debug ("left denotation is null; returning null for parse_expr");
- return tl::unexpected (Parse::Error::Expr::LEFT_DENOTATION);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::LEFT_DENOTATION);
}
current_token = lexer.peek_token ();
@@ -2026,7 +2079,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (grouped_or_tuple_expr)
return std::move (grouped_or_tuple_expr.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
/*case PLUS: { // unary plus operator
@@ -2054,7 +2108,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
auto expr = parse_expr (LBP_UNARY_MINUS, {}, entered_from_unary);
if (!expr)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
// can only apply to integer and float expressions
/*if (expr.get_type() != integer_type_node || expr.get_type() !=
float_type_node) { rust_error_at(tok->get_locus(), "operand of unary
@@ -2082,7 +2137,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
auto expr = parse_expr (LBP_UNARY_EXCLAM, {}, entered_from_unary);
if (!expr)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
// can only apply to boolean expressions
/*if (expr.get_type() != boolean_type_node) {
rust_error_at(tok->get_locus(),
@@ -2108,7 +2164,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
entered_from_unary.can_be_struct_expr = false;
auto expr = parse_expr (LBP_UNARY_ASTERISK, {}, entered_from_unary);
if (!expr)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
// FIXME: allow outer attributes on expression
return std::make_unique<AST::DereferenceExpr> (std::move (
expr.value ()),
@@ -2119,7 +2176,7 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
{
// (single) "borrow" expression - shared (mutable) or immutable
tl::expected<std::unique_ptr<AST::Expr>, Parse::Error::Expr> expr
- = tl::unexpected (Parse::Error::Expr::MALFORMED);
+ = tl::unexpected<Parse::Error::Expr> (Parse::Error::Expr::MALFORMED);
Mutability mutability = Mutability::Imm;
bool raw_borrow = false;
@@ -2158,7 +2215,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (expr_result)
expr = std::move (expr_result.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
raw_borrow = true;
}
else if (t->get_id () == MUT)
@@ -2169,7 +2227,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (expr_result)
expr = std::move (expr_result.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
mutability = Mutability::Mut;
raw_borrow = false;
}
@@ -2180,7 +2239,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (expr_result)
expr = std::move (expr_result.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
raw_borrow = false;
}
@@ -2205,7 +2265,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
auto expr_res
= parse_expr (LBP_UNARY_AMP_MUT, {}, entered_from_unary);
if (!expr_res)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
expr = std::move (expr_res.value ());
mutability = Mutability::Mut;
}
@@ -2216,7 +2277,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (expr_result)
expr = std::move (expr_result.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
mutability = Mutability::Imm;
}
@@ -2235,7 +2297,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case DOT_DOT:
// either "range to" or "range full" expressions
@@ -2245,7 +2308,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case DOT_DOT_EQ:
// range to inclusive expr
@@ -2254,7 +2318,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case RETURN_KW:
// FIXME: is this really a null denotation expression?
@@ -2264,7 +2329,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case TRY:
// FIXME: is this really a null denotation expression?
@@ -2273,7 +2339,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case BREAK:
// FIXME: is this really a null denotation expression?
@@ -2283,7 +2350,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case CONTINUE:
return parse_continue_expr (std::move (outer_attrs), tok->get_locus ());
@@ -2295,7 +2363,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case IF:
// if or if let, so more lookahead to find out
@@ -2307,7 +2376,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
else
{
@@ -2316,7 +2386,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case LIFETIME:
{
@@ -2324,7 +2395,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case LOOP:
{
@@ -2333,7 +2405,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case WHILE:
if (lexer.peek_token ()->get_id () == LET)
@@ -2342,7 +2415,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
else
{
@@ -2351,7 +2425,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case FOR:
{
@@ -2359,7 +2434,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case MATCH_KW:
// also an expression with block
@@ -2369,7 +2445,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case LEFT_SQUARE:
@@ -2380,7 +2457,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case UNSAFE:
{
@@ -2389,7 +2467,8 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case BOX:
{
@@ -2397,14 +2476,15 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
case UNDERSCORE:
add_error (
Error (tok->get_locus (),
"use of %qs is not allowed on the right-side of an assignment",
tok->get_token_description ()));
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
case CONST:
{
auto ret
@@ -2412,14 +2492,15 @@ Parser<ManagedTokenSource>::null_denotation_not_path (
if (ret)
return std::move (ret.value ());
else
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
default:
if (!restrictions.expr_can_be_null)
add_error (Error (tok->get_locus (),
"found unexpected token %qs in null denotation",
tok->get_token_description ()));
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
}
@@ -2690,7 +2771,7 @@ Parser<ManagedTokenSource>::left_denotation
(const_TokenPtr tok,
"found scope resolution operator in left denotation "
"function - this should probably be handled elsewhere"));
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
case DOT:
{
/* field expression or method call - relies on parentheses after next
@@ -2771,7 +2852,7 @@ Parser<ManagedTokenSource>::left_denotation
(const_TokenPtr tok,
"found unexpected token %qs in left denotation",
tok->get_token_description ()));
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
}
@@ -2823,7 +2904,7 @@
Parser<ManagedTokenSource>::parse_arithmetic_or_logical_expr (
auto right = parse_expr (get_lbp_for_arithmetic_or_logical_expr (expr_type),
AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2842,7 +2923,7 @@ Parser<ManagedTokenSource>::parse_binary_plus_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_PLUS, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2862,7 +2943,7 @@ Parser<ManagedTokenSource>::parse_binary_minus_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_MINUS, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2882,7 +2963,7 @@ Parser<ManagedTokenSource>::parse_binary_mult_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_MUL, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2902,7 +2983,7 @@ Parser<ManagedTokenSource>::parse_binary_div_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_DIV, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2922,7 +3003,7 @@ Parser<ManagedTokenSource>::parse_binary_mod_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_MOD, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2943,7 +3024,7 @@ Parser<ManagedTokenSource>::parse_bitwise_and_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_AMP, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2964,7 +3045,7 @@ Parser<ManagedTokenSource>::parse_bitwise_or_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_PIPE, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -2985,7 +3066,7 @@ Parser<ManagedTokenSource>::parse_bitwise_xor_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_CARET, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3005,7 +3086,7 @@ Parser<ManagedTokenSource>::parse_left_shift_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_L_SHIFT, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3025,7 +3106,7 @@ Parser<ManagedTokenSource>::parse_right_shift_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_R_SHIFT, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3075,7 +3156,7 @@ Parser<ManagedTokenSource>::parse_comparison_expr (
auto right = parse_expr (get_lbp_for_comparison_expr (expr_type),
AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3095,7 +3176,7 @@ Parser<ManagedTokenSource>::parse_binary_equal_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_EQUAL, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3116,7 +3197,7 @@ Parser<ManagedTokenSource>::parse_binary_not_equal_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_NOT_EQUAL, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3137,7 +3218,7 @@
Parser<ManagedTokenSource>::parse_binary_greater_than_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_GREATER_THAN, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3157,7 +3238,7 @@ Parser<ManagedTokenSource>::parse_binary_less_than_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_SMALLER_THAN, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3178,7 +3259,7 @@
Parser<ManagedTokenSource>::parse_binary_greater_equal_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_GREATER_EQUAL, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3198,7 +3279,7 @@ Parser<ManagedTokenSource>::parse_binary_less_equal_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_SMALLER_EQUAL, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3218,7 +3299,7 @@ Parser<ManagedTokenSource>::parse_lazy_or_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_LOGICAL_OR, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3238,7 +3319,7 @@ Parser<ManagedTokenSource>::parse_lazy_and_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_LOGICAL_AND, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// TODO: check types. actually, do so during semantic analysis
location_t locus = left->get_locus ();
@@ -3259,7 +3340,7 @@ Parser<ManagedTokenSource>::parse_type_cast_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto type = parse_type_no_bounds ();
if (!type)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: how do I get precedence put in here?
// TODO: check types. actually, do so during semantic analysis
@@ -3279,7 +3360,7 @@ Parser<ManagedTokenSource>::parse_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
location_t locus = left->get_locus ();
@@ -3337,7 +3418,7 @@
Parser<ManagedTokenSource>::parse_compound_assignment_expr (
auto right = parse_expr (get_lbp_for_compound_assignment_expr (expr_type) -
1,
AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3357,7 +3438,7 @@ Parser<ManagedTokenSource>::parse_plus_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_PLUS_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3378,7 +3459,7 @@ Parser<ManagedTokenSource>::parse_minus_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_MINUS_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3399,7 +3480,7 @@ Parser<ManagedTokenSource>::parse_mult_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_MULT_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3420,7 +3501,7 @@ Parser<ManagedTokenSource>::parse_div_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_DIV_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3441,7 +3522,7 @@ Parser<ManagedTokenSource>::parse_mod_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_MOD_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3462,7 +3543,7 @@ Parser<ManagedTokenSource>::parse_and_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_AMP_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3483,7 +3564,7 @@ Parser<ManagedTokenSource>::parse_or_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_PIPE_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3504,7 +3585,7 @@ Parser<ManagedTokenSource>::parse_xor_assig_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_CARET_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3526,7 +3607,7 @@ Parser<ManagedTokenSource>::parse_left_shift_assig_expr (
auto right
= parse_expr (LBP_L_SHIFT_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3548,7 +3629,7 @@ Parser<ManagedTokenSource>::parse_right_shift_assig_expr (
auto right
= parse_expr (LBP_R_SHIFT_ASSIG - 1, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: ensure right-associativity for this - 'LBP - 1' may do this?
// TODO: check types. actually, do so during semantic analysis
@@ -3576,7 +3657,7 @@ Parser<ManagedTokenSource>::parse_await_expr (
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// TODO: check inside async block in semantic analysis
@@ -3657,7 +3738,7 @@ Parser<ManagedTokenSource>::parse_range_inclusive_expr (
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_DOT_DOT_EQ, AST::AttrVec (), restrictions);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: make non-associative
// TODO: check types. actually, do so during semantic analysis
@@ -3677,7 +3758,7 @@ Parser<ManagedTokenSource>::parse_range_to_inclusive_expr
(
// parse RHS (as tok has already been consumed in parse_expression)
auto right = parse_expr (LBP_DOT_DOT_EQ);
if (!right)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// FIXME: make non-associative
// TODO: check types. actually, do so during semantic analysis
@@ -3696,7 +3777,7 @@ Parser<ManagedTokenSource>::parse_tuple_index_expr (
// parse int literal (as token already skipped)
const_TokenPtr index_tok = expect_token (INT_LITERAL);
if (index_tok == nullptr)
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr> (Parse::Error::Expr::MALFORMED);
std::string index = index_tok->get_str ();
@@ -3730,13 +3811,13 @@ Parser<ManagedTokenSource>::parse_index_expr (
// TODO: conceptually, should treat [] as brackets, so just parse all expr
auto index_expr = parse_expr ();
if (!index_expr)
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::CHILD_ERROR);
// skip ']' at end of array
if (!skip_token (RIGHT_SQUARE))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// TODO: check types. actually, do so during semantic analysis
@@ -3758,7 +3839,7 @@ Parser<ManagedTokenSource>::parse_field_access_expr (
* not await, for instance) */
const_TokenPtr ident_tok = expect_token (IDENTIFIER);
if (ident_tok == nullptr)
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr> (Parse::Error::Expr::MALFORMED);
Identifier ident{ident_tok};
@@ -3786,13 +3867,14 @@ Parser<ManagedTokenSource>::parse_method_call_expr (
"failed to parse path expr segment of method call expr");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
// skip left parentheses
if (!skip_token (LEFT_PAREN))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// parse method params (if they exist)
@@ -3808,7 +3890,8 @@ Parser<ManagedTokenSource>::parse_method_call_expr (
"failed to parse method param in method call");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
params.push_back (std::move (param.value ()));
@@ -3822,7 +3905,7 @@ Parser<ManagedTokenSource>::parse_method_call_expr (
// skip right paren
if (!skip_token (RIGHT_PAREN))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// TODO: check types. actually do so in semantic analysis pass.
@@ -3854,7 +3937,8 @@ Parser<ManagedTokenSource>::parse_function_call_expr (
"failed to parse function param in function call");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
params.push_back (std::move (param.value ()));
@@ -3869,7 +3953,7 @@ Parser<ManagedTokenSource>::parse_function_call_expr (
if (!skip_token (RIGHT_PAREN))
{
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// TODO: check types. actually, do so during semantic analysis
@@ -3892,7 +3976,7 @@
Parser<ManagedTokenSource>::parse_struct_expr_struct_partial (
// lookup) again, make statement if final ';'
if (!skip_token (LEFT_CURLY))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// parse inner attributes
@@ -3933,7 +4017,8 @@
Parser<ManagedTokenSource>::parse_struct_expr_struct_partial (
"failed to parse struct (or enum) expr field");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
// DEBUG:
@@ -3978,7 +4063,8 @@
Parser<ManagedTokenSource>::parse_struct_expr_struct_partial (
"expression");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
// DEBUG:
@@ -3993,7 +4079,8 @@
Parser<ManagedTokenSource>::parse_struct_expr_struct_partial (
if (!skip_token (RIGHT_CURLY))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::MALFORMED);
}
// DEBUG:
@@ -4012,7 +4099,7 @@
Parser<ManagedTokenSource>::parse_struct_expr_struct_partial (
"expected %<}%>, identifier, integer literal, or %<..%>",
t->get_token_description ()));
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
}
@@ -4029,7 +4116,7 @@
Parser<ManagedTokenSource>::parse_struct_expr_tuple_partial (
{
if (!skip_token (LEFT_PAREN))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
AST::AttrVec inner_attrs = parse_inner_attributes ();
@@ -4047,7 +4134,8 @@
Parser<ManagedTokenSource>::parse_struct_expr_tuple_partial (
"struct (or enum) expression tuple");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
exprs.push_back (std::move (expr.value ()));
@@ -4061,7 +4149,7 @@
Parser<ManagedTokenSource>::parse_struct_expr_tuple_partial (
if (!skip_token (RIGHT_PAREN))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
location_t path_locus = path.get_locus ();
@@ -4113,7 +4201,8 @@ Parser<ManagedTokenSource>::parse_closure_expr_pratt
(const_TokenPtr tok,
Error error (t->get_locus (), "could not parse closure param");
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
params.push_back (std::move (param));
@@ -4135,7 +4224,8 @@ Parser<ManagedTokenSource>::parse_closure_expr_pratt
(const_TokenPtr tok,
if (!skip_token (PIPE))
{
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::MALFORMED);
}
break;
}
@@ -4146,7 +4236,7 @@ Parser<ManagedTokenSource>::parse_closure_expr_pratt
(const_TokenPtr tok,
tok->get_token_description ()));
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::MALFORMED);
+ return tl::unexpected<Parse::Error::Expr>
(Parse::Error::Expr::MALFORMED);
}
// again branch based on next token
@@ -4167,7 +4257,8 @@ Parser<ManagedTokenSource>::parse_closure_expr_pratt
(const_TokenPtr tok,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
// parse block expr, which is required
@@ -4180,7 +4271,8 @@ Parser<ManagedTokenSource>::parse_closure_expr_pratt
(const_TokenPtr tok,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
return std::make_unique<AST::ClosureExprInnerTyped> (
@@ -4200,7 +4292,8 @@ Parser<ManagedTokenSource>::parse_closure_expr_pratt
(const_TokenPtr tok,
add_error (std::move (error));
// skip somewhere?
- return tl::unexpected (Parse::Error::Expr::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Expr> (
+ Parse::Error::Expr::CHILD_ERROR);
}
return std::make_unique<AST::ClosureExprInner> (std::move (expr.value
()),
diff --git a/gcc/rust/parse/rust-parse-impl-path.hxx
b/gcc/rust/parse/rust-parse-impl-path.hxx
index 53f4d6497..4ca12e988 100644
--- a/gcc/rust/parse/rust-parse-impl-path.hxx
+++ b/gcc/rust/parse/rust-parse-impl-path.hxx
@@ -37,7 +37,7 @@ Parser<ManagedTokenSource>::parse_simple_path ()
// don't parse anything if not a path upfront
if (!is_simple_path_segment (lexer.peek_token ()->get_id ())
&& !is_simple_path_segment (lexer.peek_token (1)->get_id ()))
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (Parse::Error::Node::MALFORMED);
/* Checks for opening scope resolution (i.e. global scope fully-qualified
* path) */
@@ -54,7 +54,7 @@ Parser<ManagedTokenSource>::parse_simple_path ()
auto segment = parse_simple_path_segment ();
if (!segment)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
// get location if not gotten already
if (locus == UNKNOWN_LOCATION)
@@ -75,7 +75,8 @@ Parser<ManagedTokenSource>::parse_simple_path ()
if (new_segment.error ().kind == Error::INVALID_SIMPLE_PATH_TOKEN)
break; /* Could be end of path */
else /* Any other error is an hard error */
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
segments.push_back (std::move (new_segment.value ()));
diff --git a/gcc/rust/parse/rust-parse-impl-ttree.hxx
b/gcc/rust/parse/rust-parse-impl-ttree.hxx
index 4c539d17e..5dd39a2a1 100644
--- a/gcc/rust/parse/rust-parse-impl-ttree.hxx
+++ b/gcc/rust/parse/rust-parse-impl-ttree.hxx
@@ -43,7 +43,8 @@ Parser<ManagedTokenSource>::parse_token_tree ()
// Parse delimited token tree
auto delim_token_tree = parse_delim_token_tree ();
if (!delim_token_tree)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
// TODO: use move rather than copy constructor
return std::unique_ptr<AST::DelimTokenTree> (
@@ -61,7 +62,7 @@ Parser<ManagedTokenSource>::parse_token_tree ()
"non-delimiter tokens"));
lexer.skip_token ();
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
default:
// parse token itself as TokenTree
lexer.skip_token ();
@@ -99,7 +100,7 @@ Parser<ManagedTokenSource>::parse_delim_token_tree ()
"delimited token tree)",
t->get_token_description ()));
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
// parse actual token tree vector - 0 or more
@@ -115,7 +116,8 @@ Parser<ManagedTokenSource>::parse_delim_token_tree ()
{
auto tok_tree = parse_token_tree ();
if (!tok_tree)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
token_trees_in_tree.push_back (std::move (tok_tree.value ()));
@@ -150,7 +152,7 @@ Parser<ManagedTokenSource>::parse_delim_token_tree ()
: (delim_type == AST::SQUARE ? "]" : "}")));
add_error (std::move (error));
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
}
diff --git a/gcc/rust/parse/rust-parse-impl.hxx
b/gcc/rust/parse/rust-parse-impl.hxx
index 9f4440ee3..96d1753d6 100644
--- a/gcc/rust/parse/rust-parse-impl.hxx
+++ b/gcc/rust/parse/rust-parse-impl.hxx
@@ -327,7 +327,7 @@
Parser<ManagedTokenSource>::parse_identifier_or_keyword_token ()
else
{
add_error (Error (t->get_locus (), "expected keyword or identifier"));
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::MALFORMED);
}
}
@@ -4904,7 +4904,8 @@ Parser<ManagedTokenSource>::parse_let_stmt (AST::AttrVec
outer_attrs,
{
auto block_expr = parse_block_expr ();
if (block_expr)
- else_expr = tl::optional{std::move (block_expr.value ())};
+ else_expr = tl::optional<std::unique_ptr<AST::Expr>>{
+ std::move (block_expr.value ())};
else
else_expr = tl::nullopt;
}
@@ -7081,7 +7082,8 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr ()
t->get_token_description ()));
// skip somewhere?
- return tl::unexpected (Parse::Error::Node::MALFORMED);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::MALFORMED);
}
break;
}
@@ -7125,7 +7127,8 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr ()
= parse_macro_invocation_partial (std::move (path),
std::move (outer_attrs));
if (invoc == nullptr)
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
if (restrictions.consume_semi && maybe_skip_token (SEMICOLON))
{
@@ -7182,7 +7185,8 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr ()
}
else
{
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node> (
+ Parse::Error::Node::CHILD_ERROR);
}
}
@@ -7200,7 +7204,7 @@ Parser<ManagedTokenSource>::parse_stmt_or_expr ()
if (expr)
return ExprOrStmt (std::move (expr.value ()));
else
- return tl::unexpected (Parse::Error::Node::CHILD_ERROR);
+ return tl::unexpected<Parse::Error::Node>
(Parse::Error::Node::CHILD_ERROR);
}
} // namespace Rust
--
2.52.0