about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/tt/macro_rules.rs23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/libsyntax/ext/tt/macro_rules.rs b/src/libsyntax/ext/tt/macro_rules.rs
index fc341e3bd85..270df72eb0e 100644
--- a/src/libsyntax/ext/tt/macro_rules.rs
+++ b/src/libsyntax/ext/tt/macro_rules.rs
@@ -281,19 +281,22 @@ pub fn compile<'cx>(cx: &'cx mut ExtCtxt,
 }
 
 fn check_lhs_nt_follows(cx: &mut ExtCtxt, lhs: &NamedMatch, sp: Span) {
-    // lhs is going to be like MatchedNonterminal(NtTT(TtDelimited(...))), where
-    // the entire lhs is those tts.
-    // if ever we get box/deref patterns, this could turn into an `if let
-    // &MatchedNonterminal(NtTT(box TtDelimited(...))) = lhs`
-    let matcher = match lhs {
+    // lhs is going to be like MatchedNonterminal(NtTT(TtDelimited(...))), where the entire lhs is
+    // those tts. Or, it can be a "bare sequence", not wrapped in parens.
+    match lhs {
         &MatchedNonterminal(NtTT(ref inner)) => match &**inner {
-            &TtDelimited(_, ref tts) => tts.tts.as_slice(),
-            _ => cx.span_bug(sp, "wrong-structured lhs for follow check")
+            &TtDelimited(_, ref tts) => {
+                check_matcher(cx, tts.tts.iter(), &Eof);
+            },
+            tt @ &TtSequence(..) => {
+                check_matcher(cx, Some(tt).into_iter(), &Eof);
+            },
+            _ => cx.span_bug(sp, "wrong-structured lhs for follow check (didn't find \
+            a TtDelimited or TtSequence)")
         },
-        _ => cx.span_bug(sp, "wrong-structured lhs for follow check")
+        _ => cx.span_bug(sp, "wrong-structured lhs for follow check (didn't find a \
+           MatchedNonterminal)")
     };
-
-    check_matcher(cx, matcher.iter(), &Eof);
     // we don't abort on errors on rejection, the driver will do that for us
     // after parsing/expansion. we can report every error in every macro this way.
 }