diff options
-rw-r--r-- | src/hir/from_ast.cpp | 2 | ||||
-rw-r--r-- | src/parse/paths.cpp | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 3acb64ac..4752d000 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -367,7 +367,7 @@ return ::HIR::GenericPath(mv$(sp), mv$(params)); ) else { - throw "BUG: Encountered non-Absolute path when creating ::HIR::GenericPath"; + BUG(Span(), "Encountered non-Absolute path when creating ::HIR::GenericPath - " << path); } } ::HIR::Path LowerHIR_Path(const ::AST::Path& path) 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); |