summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-01-20 20:42:11 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-01-20 20:42:11 +0800
commit150aa5de75f69ba2d91360a51a8aaf5e4b5a2a03 (patch)
tree41a800ec4b87852d8ff027c23755130e1e8a625b
parente4437d90f3839e5731d29bb56202a800d78c7d18 (diff)
downloadmrust-150aa5de75f69ba2d91360a51a8aaf5e4b5a2a03.tar.gz
Parse - More HRTBs
-rw-r--r--src/parse/common.hpp1
-rw-r--r--src/parse/types.cpp12
2 files changed, 6 insertions, 7 deletions
diff --git a/src/parse/common.hpp b/src/parse/common.hpp
index c8f51520..6ee0d3f4 100644
--- a/src/parse/common.hpp
+++ b/src/parse/common.hpp
@@ -42,6 +42,7 @@ extern AST::PathParams Parse_Path_GenericList(TokenStream& lex);
extern AST::Visibility Parse_Publicity(TokenStream& lex, bool allow_restricted=true);
extern AST::HigherRankedBounds Parse_HRB(TokenStream& lex);
+extern ::AST::HigherRankedBounds Parse_HRB_Opt(TokenStream& lex);
extern AST::AttributeList Parse_ItemAttrs(TokenStream& lex);
extern void Parse_ParentAttrs(TokenStream& lex, AST::AttributeList& out);
extern AST::Attribute Parse_MetaItem(TokenStream& lex);
diff --git a/src/parse/types.cpp b/src/parse/types.cpp
index bbcff489..d261c403 100644
--- a/src/parse/types.cpp
+++ b/src/parse/types.cpp
@@ -94,7 +94,8 @@ TypeRef Parse_Type_Int(TokenStream& lex, bool allow_trait_list)
return rv;
}
else {
- return Parse_Type_TraitObject(lex, {});
+ ::AST::HigherRankedBounds hrbs = Parse_HRB_Opt(lex);
+ return Parse_Type_TraitObject(lex, mv$(hrbs));
}
}
// or a primitive
@@ -198,7 +199,8 @@ TypeRef Parse_Type_Int(TokenStream& lex, bool allow_trait_list)
types.push_back( Parse_Type(lex) );
}
CHECK_TOK(tok, TOK_PAREN_CLOSE);
- return TypeRef(TypeRef::TagTuple(), lex.end_span(ps), mv$(types)); }
+ return TypeRef(TypeRef::TagTuple(), lex.end_span(ps), mv$(types));
+ }
}
default:
throw ParseError::Unexpected(lex, tok);
@@ -369,11 +371,7 @@ TypeRef Parse_Type_ErasedType(TokenStream& lex, bool allow_trait_list)
}
else
{
- AST::HigherRankedBounds hrbs;
- if( lex.lookahead(0) == TOK_RWORD_FOR )
- {
- hrbs = Parse_HRB(lex);
- }
+ AST::HigherRankedBounds hrbs = Parse_HRB_Opt(lex);
traits.push_back({ mv$(hrbs), Parse_Path(lex, PATH_GENERIC_TYPE) });
}
} while( GET_TOK(tok, lex) == TOK_PLUS );