about summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorSteven Fackler <sfackler@gmail.com>2014-09-24 20:22:57 -0700
committerSteven Fackler <sfackler@gmail.com>2014-09-27 22:59:26 -0700
commit9519abecfb727d71bd8209ffd94816b2cb87180f (patch)
treec287f36d9735cff0510c4aa8d0b33468714deb33 /src/libsyntax/ext
parentdcdbdc10036b444ef39c329e9440d4acc6975fda (diff)
downloadrust-9519abecfb727d71bd8209ffd94816b2cb87180f.tar.gz
rust-9519abecfb727d71bd8209ffd94816b2cb87180f.zip
Convert cfg syntax to new system
This removes the ability to use `foo(bar)` style cfgs. Switch them to
`foo_bar` or `foo="bar"` instead.

[breaking-change]
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/cfg.rs19
-rw-r--r--src/libsyntax/ext/cfg_attr.rs25
2 files changed, 13 insertions, 31 deletions
diff --git a/src/libsyntax/ext/cfg.rs b/src/libsyntax/ext/cfg.rs
index 79cb47fee7b..342e7e6d52e 100644
--- a/src/libsyntax/ext/cfg.rs
+++ b/src/libsyntax/ext/cfg.rs
@@ -22,7 +22,6 @@ use ext::build::AstBuilder;
 use attr;
 use attr::*;
 use parse::attr::ParserAttr;
-use parse::token::InternedString;
 use parse::token;
 
 
@@ -39,11 +38,17 @@ pub fn expand_cfg<'cx>(cx: &mut ExtCtxt,
         p.expect(&token::COMMA);
     }
 
-    // test_cfg searches for meta items looking like `cfg(foo, ...)`
-    let in_cfg = Some(cx.meta_list(sp, InternedString::new("cfg"), cfgs));
+    // NOTE: turn on after snapshot
+    /*
+    if cfgs.len() != 1 {
+        cx.span_warn(sp, "The use of multiple cfgs at the top level of `cfg!` \
+                          is deprecated. Change `cfg!(a, b)` to \
+                          `cfg!(all(a, b))`.");
+    }
+    */
+
+    let matches_cfg = cfgs.iter().all(|cfg| attr::cfg_matches(&cx.parse_sess.span_diagnostic,
+                                                              cx.cfg.as_slice(), &**cfg));
 
-    let matches_cfg = attr::test_cfg(cx.cfg().as_slice(),
-                                     in_cfg.iter());
-    let e = cx.expr_bool(sp, matches_cfg);
-    MacExpr::new(e)
+    MacExpr::new(cx.expr_bool(sp, matches_cfg))
 }
diff --git a/src/libsyntax/ext/cfg_attr.rs b/src/libsyntax/ext/cfg_attr.rs
index ad02b50f248..a85f12edb22 100644
--- a/src/libsyntax/ext/cfg_attr.rs
+++ b/src/libsyntax/ext/cfg_attr.rs
@@ -25,33 +25,10 @@ pub fn expand(cx: &mut ExtCtxt, sp: Span, mi: &ast::MetaItem, it: P<ast::Item>)
     };
 
     let mut out = (*it).clone();
-    if cfg_matches(cx, &**cfg) {
+    if attr::cfg_matches(&cx.parse_sess.span_diagnostic, cx.cfg.as_slice(), &**cfg) {
         out.attrs.push(cx.attribute(attr.span, attr.clone()));
     }
 
     P(out)
 }
 
-fn cfg_matches(cx: &mut ExtCtxt, cfg: &ast::MetaItem) -> bool {
-    match cfg.node {
-        ast::MetaList(ref pred, ref mis) if pred.get() == "any" =>
-            mis.iter().any(|mi| cfg_matches(cx, &**mi)),
-        ast::MetaList(ref pred, ref mis) if pred.get() == "all" =>
-            mis.iter().all(|mi| cfg_matches(cx, &**mi)),
-        ast::MetaList(ref pred, ref mis) if pred.get() == "not" => {
-            if mis.len() != 1 {
-                cx.span_err(cfg.span, format!("expected 1 value, got {}",
-                                              mis.len()).as_slice());
-                return false;
-            }
-            !cfg_matches(cx, &*mis[0])
-        }
-        ast::MetaList(ref pred, _) => {
-            cx.span_err(cfg.span,
-                        format!("invalid predicate `{}`", pred).as_slice());
-            false
-        },
-        ast::MetaWord(_) | ast::MetaNameValue(..) =>
-            attr::contains(cx.cfg.as_slice(), cfg),
-    }
-}