// Copyright 2012-2013 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. /*! * Infrastructure for compiler plugins. * * Plugins are Rust libraries which extend the behavior of `rustc` * in various ways. * * Plugin authors will use the `Registry` type re-exported by * this module, along with its methods. The rest of the module * is for use by `rustc` itself. * * To define a plugin, build a dylib crate with a * `#[plugin_registrar]` function: * * ```rust,ignore * #![crate_name = "myplugin"] * #![crate_type = "dylib"] * #![feature(plugin_registrar)] * * extern crate rustc; * * use rustc::plugin::Registry; * * #[plugin_registrar] * pub fn plugin_registrar(reg: &mut Registry) { * reg.register_macro("mymacro", expand_mymacro); * } * * fn expand_mymacro(...) { // details elided * ``` * * WARNING: We currently don't check that the registrar function * has the appropriate type! * * To use a plugin while compiling another crate: * * ```rust * #![feature(phase)] * * #[phase(plugin)] * extern crate myplugin; * ``` * * If you also need the plugin crate available at runtime, use * `phase(plugin, link)`. * * See `src/test/auxiliary/macro_crate_test.rs` and `src/libfourcc` * for examples of syntax extension plugins. */ pub use self::registry::Registry; pub mod registry; pub mod load; pub mod build;