/src/libsyntax_ext/lib.rs

https://gitlab.com/0072016/0072016-rusty · Rust · 74 lines · 50 code · 11 blank · 13 comment · 0 complexity · 298dfe95d33969f1deebccf772e58305 MD5 · raw file

  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.
  4. //
  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.
  10. //! Syntax extensions in the Rust compiler.
  11. #![crate_name = "syntax_ext"]
  12. #![unstable(feature = "rustc_private", issue = "27812")]
  13. #![crate_type = "dylib"]
  14. #![crate_type = "rlib"]
  15. #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
  16. html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
  17. html_root_url = "https://doc.rust-lang.org/nightly/")]
  18. #![cfg_attr(not(stage0), deny(warnings))]
  19. #![feature(rustc_private)]
  20. #![feature(staged_api)]
  21. #![feature(str_char)]
  22. extern crate fmt_macros;
  23. #[macro_use]
  24. extern crate syntax;
  25. use syntax::ext::base::{MacroExpanderFn, NormalTT};
  26. use syntax::ext::base::{SyntaxEnv, SyntaxExtension};
  27. use syntax::parse::token::intern;
  28. mod asm;
  29. mod cfg;
  30. mod concat;
  31. mod concat_idents;
  32. mod env;
  33. mod format;
  34. mod log_syntax;
  35. mod trace_macros;
  36. // for custom_derive
  37. pub mod deriving;
  38. pub fn register_builtins(env: &mut SyntaxEnv) {
  39. // utility function to simplify creating NormalTT syntax extensions
  40. fn builtin_normal_expander(f: MacroExpanderFn) -> SyntaxExtension {
  41. NormalTT(Box::new(f), None, false)
  42. }
  43. env.insert(intern("asm"),
  44. builtin_normal_expander(asm::expand_asm));
  45. env.insert(intern("cfg"),
  46. builtin_normal_expander(cfg::expand_cfg));
  47. env.insert(intern("concat"),
  48. builtin_normal_expander(concat::expand_syntax_ext));
  49. env.insert(intern("concat_idents"),
  50. builtin_normal_expander(concat_idents::expand_syntax_ext));
  51. env.insert(intern("env"),
  52. builtin_normal_expander(env::expand_env));
  53. env.insert(intern("option_env"),
  54. builtin_normal_expander(env::expand_option_env));
  55. env.insert(intern("format_args"),
  56. // format_args uses `unstable` things internally.
  57. NormalTT(Box::new(format::expand_format_args), None, true));
  58. env.insert(intern("log_syntax"),
  59. builtin_normal_expander(log_syntax::expand_syntax_ext));
  60. env.insert(intern("trace_macros"),
  61. builtin_normal_expander(trace_macros::expand_trace_macros));
  62. deriving::register_all(env);
  63. }