From be992b79609146335ae037a67b79df19ddb75119 Mon Sep 17 00:00:00 2001 From: Andy Caldwell Date: Fri, 19 Aug 2016 18:58:34 +0100 Subject: [PATCH] Allow [] for macro invocation --- src/libsyntax/parse/parser.rs | 9 ++++++--- .../macro-delimiters-in-item-position.rs | 20 +++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/test/run-pass/macro-delimiters-in-item-position.rs diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 126e8816d0559..b3b89f7d19c9b 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1216,7 +1216,8 @@ impl<'a> Parser<'a> { } else if !self.token.is_any_keyword() && self.look_ahead(1, |t| *t == token::Not) && (self.look_ahead(2, |t| *t == token::OpenDelim(token::Paren)) - || self.look_ahead(2, |t| *t == token::OpenDelim(token::Brace))) { + || self.look_ahead(2, |t| *t == token::OpenDelim(token::Brace)) + || self.look_ahead(2, |t| *t == token::OpenDelim(token::Bracket))) { // trait item macro. // code copied from parse_macro_use_or_failure... abstraction! let lo = self.span.lo; @@ -4840,7 +4841,8 @@ impl<'a> Parser<'a> { if !self.token.is_any_keyword() && self.look_ahead(1, |t| *t == token::Not) && (self.look_ahead(2, |t| *t == token::OpenDelim(token::Paren)) - || self.look_ahead(2, |t| *t == token::OpenDelim(token::Brace))) { + || self.look_ahead(2, |t| *t == token::OpenDelim(token::Brace)) + || self.look_ahead(2, |t| *t == token::OpenDelim(token::Bracket))) { // method macro. let last_span = self.last_span; @@ -5920,7 +5922,8 @@ impl<'a> Parser<'a> { && self.look_ahead(1, |t| *t == token::Not) && (self.look_ahead(2, |t| t.is_ident()) || self.look_ahead(2, |t| *t == token::OpenDelim(token::Paren)) - || self.look_ahead(2, |t| *t == token::OpenDelim(token::Brace))) { + || self.look_ahead(2, |t| *t == token::OpenDelim(token::Brace)) + || self.look_ahead(2, |t| *t == token::OpenDelim(token::Bracket))) { // MACRO INVOCATION ITEM let last_span = self.last_span; diff --git a/src/test/run-pass/macro-delimiters-in-item-position.rs b/src/test/run-pass/macro-delimiters-in-item-position.rs new file mode 100644 index 0000000000000..5bb7b94949033 --- /dev/null +++ b/src/test/run-pass/macro-delimiters-in-item-position.rs @@ -0,0 +1,20 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +macro_rules! unit { + ($name:ident) => { struct $name; } +} + +unit!(Parens); +unit!{Braces} +unit![Brackets]; + +pub fn main() { +}