summaryrefslogtreecommitdiff
path: root/src/macro_rules/eval.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-01-21 08:15:58 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-01-21 08:15:58 +0800
commit048666d6415bf8dfff11ddbf287fc488833ab609 (patch)
tree43d68cb92b17d1398e068077733543363bd4af3b /src/macro_rules/eval.cpp
parent86f47abeb42c98d450c9ff4c0418320077b3f0cd (diff)
downloadmrust-048666d6415bf8dfff11ddbf287fc488833ab609.tar.gz
macro_rules - :lifetime fragment
Diffstat (limited to 'src/macro_rules/eval.cpp')
-rw-r--r--src/macro_rules/eval.cpp9
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;
}