Skip to content

Commit c599752

Browse files
committed
Use error collector in the parser
Errors in the parser needs to be collected instead of emitted directly. gcc/rust/ChangeLog: * parse/rust-parse-impl.hxx: Collect errors instead of emitting them. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
1 parent fcb9873 commit c599752

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

gcc/rust/parse/rust-parse-impl.hxx

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,9 +1749,10 @@ Parser<ManagedTokenSource>::parse_generic_param (EndTokenPred is_end_token)
17491749
auto lifetime = parse_lifetime (false);
17501750
if (!lifetime)
17511751
{
1752-
rust_error_at (
1753-
token->get_locus (),
1754-
"failed to parse lifetime in generic parameter list");
1752+
Error error (token->get_locus (),
1753+
"failed to parse lifetime in generic parameter list");
1754+
add_error (std::move (error));
1755+
17551756
return nullptr;
17561757
}
17571758

@@ -1794,9 +1795,11 @@ Parser<ManagedTokenSource>::parse_generic_param (EndTokenPred is_end_token)
17941795
type = parse_type ();
17951796
if (!type)
17961797
{
1797-
rust_error_at (
1798+
Error error (
17981799
lexer.peek_token ()->get_locus (),
17991800
"failed to parse type in type param in generic params");
1801+
add_error (std::move (error));
1802+
18001803
return nullptr;
18011804
}
18021805
}
@@ -1830,11 +1833,13 @@ Parser<ManagedTokenSource>::parse_generic_param (EndTokenPred is_end_token)
18301833

18311834
if (!default_expr)
18321835
{
1833-
rust_error_at (tok->get_locus (),
1834-
"invalid token for start of default value for "
1835-
"const generic parameter: expected %<block%>, "
1836-
"%<identifier%> or %<literal%>, got %qs",
1837-
token_id_to_str (tok->get_id ()));
1836+
Error error (tok->get_locus (),
1837+
"invalid token for start of default value for "
1838+
"const generic parameter: expected %<block%>, "
1839+
"%<identifier%> or %<literal%>, got %qs",
1840+
token_id_to_str (tok->get_id ()));
1841+
1842+
add_error (std::move (error));
18381843
return nullptr;
18391844
}
18401845

@@ -1854,9 +1859,11 @@ Parser<ManagedTokenSource>::parse_generic_param (EndTokenPred is_end_token)
18541859
}
18551860
default:
18561861
// FIXME: Can we clean this last call with a method call?
1857-
rust_error_at (token->get_locus (),
1858-
"unexpected token when parsing generic parameters: %qs",
1859-
token->as_string ().c_str ());
1862+
Error error (token->get_locus (),
1863+
"unexpected token when parsing generic parameters: %qs",
1864+
token->as_string ().c_str ());
1865+
add_error (std::move (error));
1866+
18601867
return nullptr;
18611868
}
18621869

@@ -5154,8 +5161,9 @@ Parser<ManagedTokenSource>::parse_self_param ()
51545161
break;
51555162
if (i == s.size ())
51565163
{
5157-
rust_error_at (lexer.peek_token ()->get_locus (),
5158-
"cannot pass %<self%> by raw pointer");
5164+
Error error (lexer.peek_token ()->get_locus (),
5165+
"cannot pass %<self%> by raw pointer");
5166+
add_error (std::move (error));
51595167
return Parse::Error::Self::make_self_raw_pointer ();
51605168
}
51615169
}
@@ -5242,7 +5250,7 @@ Parser<ManagedTokenSource>::parse_self_param ()
52425250
}
52435251

52445252
// ensure that cannot have both type and reference
5245-
if (type != nullptr && has_reference)
5253+
if (type && has_reference)
52465254
{
52475255
Error error (
52485256
lexer.peek_token ()->get_locus (),

0 commit comments

Comments
 (0)