diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2016-04-16 01:16:44 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2016-04-16 01:18:07 +0530 |
| commit | 90c8d81ee4da99c59aba79e24aca257e81dbbbf1 (patch) | |
| tree | 8f5f45a4012b76f4431fa12fa2b37d6267573913 | |
| parent | fbbe85c6bafce59e1be4a966c1529f396bd546f0 (diff) | |
| parent | 01aebf01bc0cd0d95e02cc4c91059f02e4b03b13 (diff) | |
| download | rust-90c8d81ee4da99c59aba79e24aca257e81dbbbf1.tar.gz rust-90c8d81ee4da99c59aba79e24aca257e81dbbbf1.zip | |
Rollup merge of #32945 - durka:rfc1494, r=pnkfelix
implement RFC amendment 1494 Adds `:block` to the follow set for `:ty` and `:path`. See rust-lang/rfcs#1494.
| -rw-r--r-- | src/libsyntax/ext/tt/macro_rules.rs | 1 | ||||
| -rw-r--r-- | src/test/compile-fail/macro-follow.rs | 6 | ||||
| -rw-r--r-- | src/test/run-pass/macro-follow.rs | 4 |
3 files changed, 7 insertions, 4 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs index 77bae4cb3f6..87ab3dad50c 100644 --- a/src/libsyntax/ext/tt/macro_rules.rs +++ b/src/libsyntax/ext/tt/macro_rules.rs @@ -1014,6 +1014,7 @@ fn is_in_follow(_: &ExtCtxt, tok: &Token, frag: &str) -> Result<bool, String> { match *tok { OpenDelim(token::DelimToken::Brace) | OpenDelim(token::DelimToken::Bracket) | Comma | FatArrow | Colon | Eq | Gt | Semi | BinOp(token::Or) => Ok(true), + MatchNt(_, ref frag, _, _) if frag.name.as_str() == "block" => Ok(true), Ident(i, _) if (i.name.as_str() == "as" || i.name.as_str() == "where") => Ok(true), _ => Ok(false) diff --git a/src/test/compile-fail/macro-follow.rs b/src/test/compile-fail/macro-follow.rs index 35944bada4d..f985340c524 100644 --- a/src/test/compile-fail/macro-follow.rs +++ b/src/test/compile-fail/macro-follow.rs @@ -55,7 +55,7 @@ macro_rules! follow_expr { ($e:expr $m:meta) => {}; //~ERROR `$e:expr` is followed by `$m:meta` } // FOLLOW(ty) = {OpenDelim(Brace), Comma, FatArrow, Colon, Eq, Gt, Semi, Or, -// Ident(as), Ident(where), OpenDelim(Bracket)} +// Ident(as), Ident(where), OpenDelim(Bracket), Nonterminal(Block)} macro_rules! follow_ty { ($t:ty ()) => {}; //~WARN `$t:ty` is followed by `(` ($t:ty []) => {}; // ok (RFC 1462) @@ -67,7 +67,7 @@ macro_rules! follow_ty { ($t:ty $t:ty) => {}; //~ERROR `$t:ty` is followed by `$t:ty` ($t:ty $s:stmt) => {}; //~ERROR `$t:ty` is followed by `$s:stmt` ($t:ty $p:path) => {}; //~ERROR `$t:ty` is followed by `$p:path` - ($t:ty $b:block) => {}; //~ERROR `$t:ty` is followed by `$b:block` + ($t:ty $b:block) => {}; // ok (RFC 1494) ($t:ty $i:ident) => {}; //~ERROR `$t:ty` is followed by `$i:ident` ($t:ty $t:tt) => {}; //~ERROR `$t:ty` is followed by `$t:tt` ($t:ty $i:item) => {}; //~ERROR `$t:ty` is followed by `$i:item` @@ -109,7 +109,7 @@ macro_rules! follow_path { ($p:path $t:ty) => {}; //~ERROR `$p:path` is followed by `$t:ty` ($p:path $s:stmt) => {}; //~ERROR `$p:path` is followed by `$s:stmt` ($p:path $p:path) => {}; //~ERROR `$p:path` is followed by `$p:path` - ($p:path $b:block) => {}; //~ERROR `$p:path` is followed by `$b:block` + ($p:path $b:block) => {}; // ok (RFC 1494) ($p:path $i:ident) => {}; //~ERROR `$p:path` is followed by `$i:ident` ($p:path $t:tt) => {}; //~ERROR `$p:path` is followed by `$t:tt` ($p:path $i:item) => {}; //~ERROR `$p:path` is followed by `$i:item` diff --git a/src/test/run-pass/macro-follow.rs b/src/test/run-pass/macro-follow.rs index ce6498f67f9..dca676f8cf9 100644 --- a/src/test/run-pass/macro-follow.rs +++ b/src/test/run-pass/macro-follow.rs @@ -26,7 +26,7 @@ macro_rules! follow_expr { ($e:expr ;) => {}; } // FOLLOW(ty) = {OpenDelim(Brace), Comma, FatArrow, Colon, Eq, Gt, Semi, Or, -// Ident(as), Ident(where), OpenDelim(Bracket)} +// Ident(as), Ident(where), OpenDelim(Bracket), Nonterminal(Block)} macro_rules! follow_ty { ($t:ty {}) => {}; ($t:ty ,) => {}; @@ -39,6 +39,7 @@ macro_rules! follow_ty { ($t:ty as) => {}; ($t:ty where) => {}; ($t:ty []) => {}; + ($t:ty $b:block) => {}; } // FOLLOW(stmt) = FOLLOW(expr) macro_rules! follow_stmt { @@ -59,6 +60,7 @@ macro_rules! follow_path { ($p:path as) => {}; ($p:path where) => {}; ($p:path []) => {}; + ($p:path $b:block) => {}; } // FOLLOW(block) = any token macro_rules! follow_block { |
