summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2019-01-27 11:08:55 +0800
committerJohn Hodge <tpg@ucc.asn.au>2019-01-27 11:08:55 +0800
commit098e210150f071d5cb7d8761f79dd3e8046bc829 (patch)
tree21813f65f6d73604ab7819c9ae45d16dd85588f9
parentd47282806d50359851a92bf72fdf5253574d2e17 (diff)
downloadmrust-098e210150f071d5cb7d8761f79dd3e8046bc829.tar.gz
Parse - A few more TOK_INTERPOLATED_* instances
-rw-r--r--src/parse/expr.cpp7
-rw-r--r--src/parse/root.cpp9
2 files changed, 13 insertions, 3 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index 5e38ca81..6e18f0eb 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -57,13 +57,18 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex, bool is_unsafe/*=false*/)
::std::shared_ptr<AST::Module> local_mod;
+ if( LOOK_AHEAD(lex) == TOK_INTERPOLATED_BLOCK )
+ {
+ GET_TOK(tok, lex);
+ return tok.take_frag_node();
+ }
+
GET_CHECK_TOK(tok, lex, TOK_BRACE_OPEN);
bool last_value_yielded = false;
while( LOOK_AHEAD(lex) != TOK_BRACE_CLOSE )
{
last_value_yielded = false;
- DEBUG("tok = " << tok);
// NOTE: Doc comments can appear within a function and apply to the function
if( lex.parse_state().parent_attrs )
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index a58e05d5..d79df434 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -1499,14 +1499,19 @@ bool Parse_MacroInvocation_Opt(TokenStream& lex, AST::MacroInvocation& out_inv)
{
// Good
}
+ else if( lex.lookahead(0) == TOK_INTERPOLATED_PATH && lex.lookahead(1) == TOK_EXCLAM )
+ {
+ // Also good.
+ }
else
{
return false;
}
auto ps = lex.start_span();
- GET_CHECK_TOK(tok, lex, TOK_IDENT);
- auto name = tok.str();
+ auto name_path = Parse_Path(lex, PATH_GENERIC_NONE);
+ ASSERT_BUG(lex.point_span(), name_path.nodes().size() == 1, "TODO: Support multi-component paths in macro invocations");
+ auto name = name_path.nodes()[0].name();
GET_CHECK_TOK(tok, lex, TOK_EXCLAM);
bool is_braced = (lex.lookahead(0) == TOK_BRACE_OPEN || (lex.lookahead(0) == TOK_IDENT && lex.lookahead(1) == TOK_BRACE_OPEN));