summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2018-12-30 15:08:38 +0800
committerJohn Hodge <tpg@ucc.asn.au>2018-12-30 15:08:38 +0800
commit44d040f6d4325f713b9fefeadb1ee533a0fd5294 (patch)
tree5224110d351c7b7158c72d2119e19f0f6041dcf0 /src
parent852050a97d8304d30d1ea51b7acacf1ece387973 (diff)
downloadmrust-44d040f6d4325f713b9fefeadb1ee533a0fd5294.tar.gz
Parse/Macro - Handle `crate` as a visibility specifier
Diffstat (limited to 'src')
-rw-r--r--src/macro_rules/eval.cpp4
-rw-r--r--src/macro_rules/mod.cpp1
-rw-r--r--src/parse/root.cpp7
3 files changed, 9 insertions, 3 deletions
diff --git a/src/macro_rules/eval.cpp b/src/macro_rules/eval.cpp
index 558f26b3..23ffab77 100644
--- a/src/macro_rules/eval.cpp
+++ b/src/macro_rules/eval.cpp
@@ -1824,7 +1824,7 @@ namespace
bool consume_vis(TokenStreamRO& lex)
{
TRACE_FUNCTION;
- if( lex.consume_if(TOK_INTERPOLATED_VIS) )
+ if( lex.consume_if(TOK_INTERPOLATED_VIS) || lex.consume_if(TOK_RWORD_CRATE) )
{
return true;
}
@@ -2065,7 +2065,7 @@ unsigned int Macro_InvokeRules_MatchPattern(const Span& sp, const MacroRules& ru
DEBUG(i << " ExpectTok(" << *e << ") == " << tok);
if( tok != *e )
{
- ERROR(sp, E0000, "Expected token in match arm");
+ ERROR(sp, E0000, "Expected token " << *e << " in match arm, got " << tok);
break;
}
}
diff --git a/src/macro_rules/mod.cpp b/src/macro_rules/mod.cpp
index fcea5b25..3297a139 100644
--- a/src/macro_rules/mod.cpp
+++ b/src/macro_rules/mod.cpp
@@ -160,6 +160,7 @@ bool is_token_vis(eTokenType tt) {
switch(tt)
{
case TOK_RWORD_PUB:
+ case TOK_RWORD_CRATE:
case TOK_INTERPOLATED_VIS:
return true;
default:
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index 61218326..5fc90f0c 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -48,7 +48,6 @@ AST::Attribute Parse_MetaItem(TokenStream& lex);
void Parse_ModRoot(TokenStream& lex, AST::Module& mod, AST::AttributeList& mod_attrs);
bool Parse_MacroInvocation_Opt(TokenStream& lex, AST::MacroInvocation& out_inv);
-//::AST::Path Parse_Publicity(TokenStream& lex)
::AST::Visibility Parse_Publicity(TokenStream& lex, bool allow_restricted/*=true*/)
{
Token tok;
@@ -57,6 +56,12 @@ bool Parse_MacroInvocation_Opt(TokenStream& lex, AST::MacroInvocation& out_inv)
GET_TOK(tok, lex);
return tok.take_frag_vis();
}
+ if( LOOK_AHEAD(lex) == TOK_RWORD_CRATE )
+ {
+ // TODO: Return a path that indicates the entire current crate
+ GET_TOK(tok, lex);
+ return true;
+ }
if( LOOK_AHEAD(lex) == TOK_RWORD_PUB )
{
GET_TOK(tok, lex);