about summary refs log tree commit diff
path: root/src/librustc_metadata
diff options
context:
space:
mode:
authorCorey Farwell <coreyf@rwell.org>2017-03-02 14:53:46 -0500
committerGitHub <noreply@github.com>2017-03-02 14:53:46 -0500
commitc883f4f584bf55ec3c3d0bbd22957a7e6654e3b9 (patch)
tree4f88f98fa7272576b878096fd4045c332599a4be /src/librustc_metadata
parent0536fd6396133189fb4a41377d3972cd312078a0 (diff)
parent2fcbb48c727e82ea8751d6476d86fd3c6fe16b42 (diff)
downloadrust-c883f4f584bf55ec3c3d0bbd22957a7e6654e3b9.tar.gz
rust-c883f4f584bf55ec3c3d0bbd22957a7e6654e3b9.zip
Rollup merge of #40129 - abonander:proc_macro_bang, r=jseyfried
Implement function-like procedural macros ( `#[proc_macro]`)

Adds the `#[proc_macro]` attribute, which expects bare functions of the kind `fn(TokenStream) -> TokenStream`, which can be invoked like `my_macro!()`.

cc rust-lang/rfcs#1913, #38356

r? @jseyfried
cc @nrc
Diffstat (limited to 'src/librustc_metadata')
-rw-r--r--src/librustc_metadata/creader.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/librustc_metadata/creader.rs b/src/librustc_metadata/creader.rs
index 4477488f6cb..49dcffb4830 100644
--- a/src/librustc_metadata/creader.rs
+++ b/src/librustc_metadata/creader.rs
@@ -586,7 +586,7 @@ impl<'a> CrateLoader<'a> {
         use proc_macro::__internal::Registry;
         use rustc_back::dynamic_lib::DynamicLibrary;
         use syntax_ext::deriving::custom::ProcMacroDerive;
-        use syntax_ext::proc_macro_impl::AttrProcMacro;
+        use syntax_ext::proc_macro_impl::{AttrProcMacro, BangProcMacro};
 
         let path = match dylib {
             Some(dylib) => dylib,
@@ -630,6 +630,15 @@ impl<'a> CrateLoader<'a> {
                 );
                 self.0.push((Symbol::intern(name), Rc::new(expand)));
             }
+
+            fn register_bang_proc_macro(&mut self,
+                                        name: &str,
+                                        expand: fn(TokenStream) -> TokenStream) {
+                let expand = SyntaxExtension::ProcMacro(
+                    Box::new(BangProcMacro { inner: expand })
+                );
+                self.0.push((Symbol::intern(name), Rc::new(expand)));
+            }
         }
 
         let mut my_registrar = MyRegistrar(Vec::new());