64 lines
1.7 KiB
Rust
64 lines
1.7 KiB
Rust
// 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 <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.
|
|
|
|
/*!
|
|
* 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_id = "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;
|