]>
git.proxmox.com Git - rustc.git/blob - src/libsyntax/ext/cfg.rs
1 // Copyright 2013 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 /// The compiler code necessary to support the cfg! extension, which expands to
12 /// a literal `true` or `false` based on whether the given cfg matches the
13 /// current compilation environment.
19 use ext
::build
::AstBuilder
;
22 use parse
::attr
::ParserAttr
;
25 pub fn expand_cfg
<'cx
>(cx
: &mut ExtCtxt
,
27 tts
: &[ast
::TokenTree
])
28 -> Box
<base
::MacResult
+'
static> {
29 let mut p
= cx
.new_parser_from_tts(tts
);
30 let cfg
= p
.parse_meta_item();
32 if !panictry
!(p
.eat(&token
::Eof
)){
33 cx
.span_err(sp
, "expected 1 cfg-pattern");
34 return DummyResult
::expr(sp
);
37 let matches_cfg
= attr
::cfg_matches(&cx
.parse_sess
.span_diagnostic
, &cx
.cfg
, &*cfg
,
38 cx
.feature_gated_cfgs
);
39 MacEager
::expr(cx
.expr_bool(sp
, matches_cfg
))