diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-01 13:14:54 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-01 13:14:54 +0800 |
commit | cfee4a1bc22a3bf4f9c2e8f2afd06fc84ddb8278 (patch) | |
tree | ccff47f241af40709463a3a994cd23c3a284cca7 /src/parse | |
parent | 95d725d80a76e74549329dfdb74f8147c1b075e7 (diff) | |
download | mrust-cfee4a1bc22a3bf4f9c2e8f2afd06fc84ddb8278.tar.gz |
Parse Path - Slight tweaks for 1.29
Diffstat (limited to 'src/parse')
-rw-r--r-- | src/parse/paths.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
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)); |