diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-01-21 08:15:58 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-01-21 08:15:58 +0800 |
commit | 048666d6415bf8dfff11ddbf287fc488833ab609 (patch) | |
tree | 43d68cb92b17d1398e068077733543363bd4af3b /src/macro_rules/eval.cpp | |
parent | 86f47abeb42c98d450c9ff4c0418320077b3f0cd (diff) | |
download | mrust-048666d6415bf8dfff11ddbf287fc488833ab609.tar.gz |
macro_rules - :lifetime fragment
Diffstat (limited to 'src/macro_rules/eval.cpp')
-rw-r--r-- | src/macro_rules/eval.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/macro_rules/eval.cpp b/src/macro_rules/eval.cpp index e864537c..fd0f5648 100644 --- a/src/macro_rules/eval.cpp +++ b/src/macro_rules/eval.cpp @@ -654,9 +654,11 @@ bool Macro_TryPatternCap(TokenStream& lex, MacroPatEnt::Type type) case MacroPatEnt::PAT_META: return LOOK_AHEAD(lex) == TOK_IDENT || LOOK_AHEAD(lex) == TOK_INTERPOLATED_META; case MacroPatEnt::PAT_ITEM: - return is_token_item( LOOK_AHEAD(lex) ) || LOOK_AHEAD(lex) == TOK_IDENT; + return is_token_item( LOOK_AHEAD(lex) ) || LOOK_AHEAD(lex) == TOK_IDENT; // Huh? Ident? case MacroPatEnt::PAT_VIS: return is_token_vis( LOOK_AHEAD(lex) ); + case MacroPatEnt::PAT_LIFETIME: + return LOOK_AHEAD(lex) == TOK_LIFETIME; } BUG(lex.point_span(), "Fell through"); } @@ -727,6 +729,9 @@ InterpolatedFragment Macro_HandlePatternCap(TokenStream& lex, MacroPatEnt::Type return InterpolatedFragment( TokenTree(lex.getHygiene(), tok) ); case MacroPatEnt::PAT_VIS: return InterpolatedFragment( Parse_Publicity(lex, /*allow_restricted=*/true) ); + case MacroPatEnt::PAT_LIFETIME: + GET_CHECK_TOK(tok, lex, TOK_LIFETIME); + return InterpolatedFragment( TokenTree(lex.getHygiene(), tok) ); } throw ""; } @@ -1950,6 +1955,8 @@ namespace return consume_item(lex); case MacroPatEnt::PAT_VIS: return consume_vis(lex); + case MacroPatEnt::PAT_LIFETIME: + return lex.consume_if(TOK_LIFETIME); } return true; } |