1 // Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 //! Syntax extensions in the Rust compiler.
13 #![crate_name = "syntax_ext"]
14 #![unstable(feature = "rustc_private", issue = "27812")]
15 #![crate_type = "dylib"]
16 #![crate_type = "rlib"]
17 #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
18 html_favicon_url
= "https://doc.rust-lang.org/favicon.ico",
19 html_root_url
= "https://doc.rust-lang.org/nightly/")]
22 #![feature(proc_macro_internals)]
23 #![feature(rustc_private)]
24 #![feature(staged_api)]
26 extern crate fmt_macros
;
30 extern crate syntax_pos
;
31 extern crate proc_macro
;
32 extern crate rustc_errors
as errors
;
44 pub mod proc_macro_registrar
;
49 pub mod proc_macro_impl
;
53 use syntax
::ext
::base
::{MacroExpanderFn, NormalTT, NamedSyntaxExtension}
;
54 use syntax
::symbol
::Symbol
;
56 pub fn register_builtins(resolver
: &mut syntax
::ext
::base
::Resolver
,
57 user_exts
: Vec
<NamedSyntaxExtension
>,
58 enable_quotes
: bool
) {
59 deriving
::register_builtin_derives(resolver
);
61 let mut register
= |name
, ext
| {
62 resolver
.add_builtin(ast
::Ident
::with_empty_ctxt(name
), Rc
::new(ext
));
65 macro_rules
! register
{
66 ($
( $name
:ident
: $f
:expr
, )*) => { $
(
67 register(Symbol
::intern(stringify
!($name
)),
68 NormalTT(Box
::new($f
as MacroExpanderFn
), None
, false));
73 use syntax
::ext
::quote
::*;
75 quote_tokens
: expand_quote_tokens
,
76 quote_expr
: expand_quote_expr
,
77 quote_ty
: expand_quote_ty
,
78 quote_item
: expand_quote_item
,
79 quote_pat
: expand_quote_pat
,
80 quote_arm
: expand_quote_arm
,
81 quote_stmt
: expand_quote_stmt
,
82 quote_attr
: expand_quote_attr
,
83 quote_arg
: expand_quote_arg
,
84 quote_block
: expand_quote_block
,
85 quote_meta_item
: expand_quote_meta_item
,
86 quote_path
: expand_quote_path
,
90 use syntax
::ext
::source_util
::*;
93 column
: expand_column
,
95 stringify
: expand_stringify
,
96 include
: expand_include
,
97 include_str
: expand_include_str
,
98 include_bytes
: expand_include_bytes
,
99 module_path
: expand_mod
,
101 asm
: asm
::expand_asm
,
102 cfg
: cfg
::expand_cfg
,
103 concat
: concat
::expand_syntax_ext
,
104 concat_idents
: concat_idents
::expand_syntax_ext
,
105 env
: env
::expand_env
,
106 option_env
: env
::expand_option_env
,
107 log_syntax
: log_syntax
::expand_syntax_ext
,
108 trace_macros
: trace_macros
::expand_trace_macros
,
111 // format_args uses `unstable` things internally.
112 register(Symbol
::intern("format_args"),
113 NormalTT(Box
::new(format
::expand_format_args
), None
, true));
115 for (name
, ext
) in user_exts
{