From cfee4a1bc22a3bf4f9c2e8f2afd06fc84ddb8278 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Tue, 1 Jan 2019 13:14:54 +0800 Subject: Parse Path - Slight tweaks for 1.29 --- src/parse/paths.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/parse/paths.cpp b/src/parse/paths.cpp index 26311d83..2a2437ca 100644 --- a/src/parse/paths.cpp +++ b/src/parse/paths.cpp @@ -41,6 +41,7 @@ AST::Path Parse_Path(TokenStream& lex, eParsePathGenericMode generic_mode) case TOK_RWORD_CRATE: GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); + return Parse_Path(lex, true, generic_mode); case TOK_DOUBLE_COLON: return Parse_Path(lex, true, generic_mode); @@ -82,7 +83,13 @@ AST::Path Parse_Path(TokenStream& lex, bool is_abs, eParsePathGenericMode generi Token tok; if( is_abs ) { - if( GET_TOK(tok, lex) == TOK_STRING ) { + // QUIRK: `::crate::foo` is valid (semi-surprisingly) + if( LOOK_AHEAD(lex) == TOK_RWORD_CRATE ) { + GET_CHECK_TOK(tok, lex, TOK_RWORD_CRATE); + GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); + return AST::Path("", Parse_PathNodes(lex, generic_mode)); + } + else if( GET_TOK(tok, lex) == TOK_STRING ) { ::std::string cratename = tok.str(); GET_CHECK_TOK(tok, lex, TOK_DOUBLE_COLON); return AST::Path(cratename, Parse_PathNodes(lex, generic_mode)); -- cgit v1.2.3