diff options
author | John Hodge <tpg@mutabah.net> | 2016-05-20 16:04:56 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-05-20 16:04:56 +0800 |
commit | edc9df13c48e6358518f66153cce7e8cfca28a2b (patch) | |
tree | e4f311747ff6c228c8d5429ff08a22191a59e14a /src/parse | |
parent | 91e4ab1921467783122eff292359e7e9784508c7 (diff) | |
download | mrust-edc9df13c48e6358518f66153cce7e8cfca28a2b.tar.gz |
Parse - Fix bug which made `<_ as Item>` parse as `<_ as ::Item>`
Diffstat (limited to 'src/parse')
-rw-r--r-- | src/parse/paths.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/parse/paths.cpp b/src/parse/paths.cpp index 2e463060..06545b7e 100644 --- a/src/parse/paths.cpp +++ b/src/parse/paths.cpp @@ -22,6 +22,7 @@ AST::Path Parse_Path(TokenStream& lex, eParsePathGenericMode generic_mode) case TOK_RWORD_SELF: GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); return Parse_Path(lex, false, generic_mode); + case TOK_RWORD_SUPER: { GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); unsigned int count = 1; @@ -32,8 +33,10 @@ AST::Path Parse_Path(TokenStream& lex, eParsePathGenericMode generic_mode) } return AST::Path(AST::Path::TagSuper(), count, Parse_PathNodes(lex, generic_mode)); } + case TOK_DOUBLE_COLON: return Parse_Path(lex, true, generic_mode); + case TOK_DOUBLE_LT: lex.putback( Token(TOK_LT) ); case TOK_LT: { @@ -41,11 +44,11 @@ AST::Path Parse_Path(TokenStream& lex, eParsePathGenericMode generic_mode) if( GET_TOK(tok, lex) == TOK_RWORD_AS ) { ::AST::Path trait; if( GET_TOK(tok, lex) == TOK_DOUBLE_COLON ) { - trait = Parse_Path(lex, false, PATH_GENERIC_TYPE); + trait = Parse_Path(lex, true, PATH_GENERIC_TYPE); } else { lex.putback(tok); - trait = Parse_Path(lex, true, PATH_GENERIC_TYPE); + trait = Parse_Path(lex, false, PATH_GENERIC_TYPE); } GET_CHECK_TOK(tok, lex, TOK_GT); GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); @@ -58,7 +61,8 @@ AST::Path Parse_Path(TokenStream& lex, eParsePathGenericMode generic_mode) GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); return AST::Path(AST::Path::TagUfcs(), ty, Parse_PathNodes(lex, generic_mode)); } - } + throw ""; } + default: lex.putback(tok); return Parse_Path(lex, false, generic_mode); |