switch (token->get_id ())
{
case LIFETIME: {
- auto lifetime = parse_lifetime ();
+ auto lifetime = parse_lifetime (false);
if (lifetime.is_error ())
{
rust_error_at (
std::unique_ptr<AST::LifetimeWhereClauseItem>
Parser<ManagedTokenSource>::parse_lifetime_where_clause_item ()
{
- AST::Lifetime lifetime = parse_lifetime ();
+ AST::Lifetime lifetime = parse_lifetime (false);
if (lifetime.is_error ())
{
// TODO: error here?
{
case LIFETIME:
return std::unique_ptr<AST::Lifetime> (
- new AST::Lifetime (parse_lifetime ()));
+ new AST::Lifetime (parse_lifetime (false)));
case LEFT_PAREN:
case QUESTION_MARK:
case FOR:
while (true)
{
- AST::Lifetime lifetime = parse_lifetime ();
+ AST::Lifetime lifetime = parse_lifetime (false);
// quick exit for parsing failure
if (lifetime.is_error ())
while (!is_end_token (lexer.peek_token ()->get_id ()))
{
- AST::Lifetime lifetime = parse_lifetime ();
+ AST::Lifetime lifetime = parse_lifetime (false);
if (lifetime.is_error ())
{
* existing. */
template <typename ManagedTokenSource>
AST::Lifetime
-Parser<ManagedTokenSource>::parse_lifetime ()
+Parser<ManagedTokenSource>::parse_lifetime (bool allow_elided)
{
const_TokenPtr lifetime_tok = lexer.peek_token ();
if (lifetime_tok->get_id () != LIFETIME)
{
- return AST::Lifetime::elided ();
+ return (allow_elided) ? AST::Lifetime::elided ()
+ : AST::Lifetime::error ();
}
lexer.skip_token ();
location_t locus = t->get_locus ();
while (!is_right_angle_tok (t->get_id ()))
{
- AST::Lifetime lifetime = parse_lifetime ();
+ AST::Lifetime lifetime = parse_lifetime (false);
if (lifetime.is_error ())
{
// not necessarily an error
// now test whether it has a lifetime
if (lexer.peek_token ()->get_id () == LIFETIME)
{
- lifetime = parse_lifetime ();
+ lifetime = parse_lifetime (true);
// something went wrong somehow
if (lifetime.is_error ())
AST::Lifetime label = AST::Lifetime::error ();
if (lexer.peek_token ()->get_id () == LIFETIME)
{
- label = parse_lifetime ();
+ label = parse_lifetime (false);
}
// parse break return expression if it exists
AST::Lifetime label = AST::Lifetime::error ();
if (lexer.peek_token ()->get_id () == LIFETIME)
{
- label = parse_lifetime ();
+ label = parse_lifetime (false);
}
return std::unique_ptr<AST::ContinueExpr> (
AST::Lifetime lifetime = AST::Lifetime::elided ();
if (lexer.peek_token ()->get_id () == LIFETIME)
{
- lifetime = parse_lifetime ();
+ lifetime = parse_lifetime (true);
if (lifetime.is_error ())
{
Error error (lexer.peek_token ()->get_locus (),