fn is_local(&self) -> bool {
self.normal_ancestor_id.is_local()
}
+
+ fn nearest_item_scope(&'a self) -> Module<'a> {
+ if self.is_trait() { self.parent.unwrap() } else { self }
+ }
}
impl<'a> fmt::Debug for ModuleData<'a> {
expansion: mark,
};
expansion.visit_with(&mut visitor);
- self.current_module.unresolved_invocations.borrow_mut().remove(&mark);
invocation.expansion.set(visitor.legacy_scope);
}
Err(Determinacy::Determined)
},
};
- self.current_module.macro_resolutions.borrow_mut()
+ self.current_module.nearest_item_scope().macro_resolutions.borrow_mut()
.push((path.into_boxed_slice(), span));
return def;
}
}
};
- self.current_module.legacy_macro_resolutions.borrow_mut()
+ self.current_module.nearest_item_scope().legacy_macro_resolutions.borrow_mut()
.push((scope, path[0], span, kind));
result
--- /dev/null
+// Copyright 2017 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+trait T { m!(); } //~ ERROR cannot find macro `m!` in this scope
+
+struct S;
+impl S { m!(); } //~ ERROR cannot find macro `m!` in this scope
+
+fn main() {}