diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-20 20:42:11 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-20 20:42:11 +0800 |
commit | 150aa5de75f69ba2d91360a51a8aaf5e4b5a2a03 (patch) | |
tree | 41a800ec4b87852d8ff027c23755130e1e8a625b | |
parent | e4437d90f3839e5731d29bb56202a800d78c7d18 (diff) | |
download | mrust-150aa5de75f69ba2d91360a51a8aaf5e4b5a2a03.tar.gz |
Parse - More HRTBs
-rw-r--r-- | src/parse/common.hpp | 1 | ||||
-rw-r--r-- | src/parse/types.cpp | 12 |
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 ); |