summary refs log tree commit diff
path: root/src/libsyntax_ext
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2019-01-17 07:28:39 +0100
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2019-01-28 05:46:53 +0100
commit1bdd2f699beb6249a97aac3e2007401b37b6f273 (patch)
tree588467272c41fde89c39948b50cf1c78bf99c9ef /src/libsyntax_ext
parentec504def3665b0bc2ec80bede6dba2c603928315 (diff)
downloadrust-1bdd2f699beb6249a97aac3e2007401b37b6f273.tar.gz
rust-1bdd2f699beb6249a97aac3e2007401b37b6f273.zip
Conditionally skip two passes if their related attributes were not found
Diffstat (limited to 'src/libsyntax_ext')
-rw-r--r--src/libsyntax_ext/proc_macro_decls.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libsyntax_ext/proc_macro_decls.rs b/src/libsyntax_ext/proc_macro_decls.rs
index 1d272712cac..46c502965ee 100644
--- a/src/libsyntax_ext/proc_macro_decls.rs
+++ b/src/libsyntax_ext/proc_macro_decls.rs
@@ -48,6 +48,7 @@ pub fn modify(sess: &ParseSess,
               resolver: &mut dyn (::syntax::ext::base::Resolver),
               mut krate: ast::Crate,
               is_proc_macro_crate: bool,
+              has_proc_macro_decls: bool,
               is_test_crate: bool,
               num_crate_types: usize,
               handler: &errors::Handler) -> ast::Crate {
@@ -64,7 +65,9 @@ pub fn modify(sess: &ParseSess,
             is_proc_macro_crate,
             is_test_crate,
         };
-        visit::walk_crate(&mut collect, &krate);
+        if has_proc_macro_decls || is_proc_macro_crate {
+            visit::walk_crate(&mut collect, &krate);
+        }
         (collect.derives, collect.attr_macros, collect.bang_macros)
     };
 
@@ -85,7 +88,7 @@ pub fn modify(sess: &ParseSess,
     krate
 }
 
-fn is_proc_macro_attr(attr: &ast::Attribute) -> bool {
+pub fn is_proc_macro_attr(attr: &ast::Attribute) -> bool {
     PROC_MACRO_KINDS.iter().any(|kind| attr.check_name(kind))
 }