From 7b69088d15043ec466fde7960b59bc08c420dd7d Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sat, 15 Sep 2018 23:57:07 +0300 Subject: [PATCH] expansion: Expand attribute macros registered by legacy plugins in usual left-to-right order --- src/librustc_resolve/macros.rs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/librustc_resolve/macros.rs b/src/librustc_resolve/macros.rs index 44f95dd307e1e..1fc29a0bb7964 100644 --- a/src/librustc_resolve/macros.rs +++ b/src/librustc_resolve/macros.rs @@ -22,7 +22,7 @@ use rustc::{ty, lint}; use syntax::ast::{self, Name, Ident}; use syntax::attr; use syntax::errors::DiagnosticBuilder; -use syntax::ext::base::{self, Determinacy, MultiModifier, MultiDecorator}; +use syntax::ext::base::{self, Determinacy}; use syntax::ext::base::{MacroKind, SyntaxExtension, Resolver as SyntaxResolver}; use syntax::ext::expand::{AstFragment, Invocation, InvocationKind, TogetherWith}; use syntax::ext::hygiene::{self, Mark}; @@ -245,22 +245,10 @@ impl<'a, 'crateloader: 'a> base::Resolver for Resolver<'a, 'crateloader> { // Resolves attribute and derive legacy macros from `#![plugin(..)]`. fn find_legacy_attr_invoc(&mut self, attrs: &mut Vec, allow_derive: bool) -> Option { - for i in 0..attrs.len() { - let name = attrs[i].name(); - - match self.builtin_macros.get(&name).cloned() { - Some(binding) => match *binding.get_macro(self) { - MultiModifier(..) | MultiDecorator(..) | SyntaxExtension::AttrProcMacro(..) => { - return Some(attrs.remove(i)) - } - _ => {} - }, - None => {} - } + if !allow_derive { + return None; } - if !allow_derive { return None } - // Check for legacy derives for i in 0..attrs.len() { let name = attrs[i].name();