summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-05-20 16:04:56 +0800
committerJohn Hodge <tpg@mutabah.net>2016-05-20 16:04:56 +0800
commitedc9df13c48e6358518f66153cce7e8cfca28a2b (patch)
treee4f311747ff6c228c8d5429ff08a22191a59e14a /src/parse
parent91e4ab1921467783122eff292359e7e9784508c7 (diff)
downloadmrust-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.cpp10
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);