about summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/deriving/mod.rs2
-rw-r--r--src/libsyntax/ext/deriving/zero.rs102
2 files changed, 0 insertions, 104 deletions
diff --git a/src/libsyntax/ext/deriving/mod.rs b/src/libsyntax/ext/deriving/mod.rs
index 57d66f0e355..14b19fee3df 100644
--- a/src/libsyntax/ext/deriving/mod.rs
+++ b/src/libsyntax/ext/deriving/mod.rs
@@ -25,7 +25,6 @@ pub mod decodable;
 pub mod hash;
 pub mod rand;
 pub mod show;
-pub mod zero;
 pub mod default;
 pub mod primitive;
 
@@ -110,7 +109,6 @@ pub fn expand_meta_derive(cx: &mut ExtCtxt,
 
                             "Show" => expand!(show::expand_deriving_show),
 
-                            "Zero" => expand!(zero::expand_deriving_zero),
                             "Default" => expand!(default::expand_deriving_default),
 
                             "FromPrimitive" => expand!(primitive::expand_deriving_from_primitive),
diff --git a/src/libsyntax/ext/deriving/zero.rs b/src/libsyntax/ext/deriving/zero.rs
deleted file mode 100644
index 73331f06aa4..00000000000
--- a/src/libsyntax/ext/deriving/zero.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-// 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.
-
-use ast::{MetaItem, Item, Expr};
-use codemap::Span;
-use ext::base::ExtCtxt;
-use ext::build::AstBuilder;
-use ext::deriving::generic::*;
-use ext::deriving::generic::ty::*;
-use parse::token::InternedString;
-use ptr::P;
-
-pub fn expand_deriving_zero<F>(cx: &mut ExtCtxt,
-                               span: Span,
-                               mitem: &MetaItem,
-                               item: &Item,
-                               push: F) where
-    F: FnOnce(P<Item>),
-{
-    let inline = cx.meta_word(span, InternedString::new("inline"));
-    let attrs = vec!(cx.attribute(span, inline));
-    let trait_def = TraitDef {
-        span: span,
-        attributes: Vec::new(),
-        path: Path::new(vec!("std", "num", "Zero")),
-        additional_bounds: Vec::new(),
-        generics: LifetimeBounds::empty(),
-        methods: vec!(
-            MethodDef {
-                name: "zero",
-                generics: LifetimeBounds::empty(),
-                explicit_self: None,
-                args: Vec::new(),
-                ret_ty: Self,
-                attributes: attrs.clone(),
-                combine_substructure: combine_substructure(|a, b, c| {
-                    zero_substructure(a, b, c)
-                })
-            },
-            MethodDef {
-                name: "is_zero",
-                generics: LifetimeBounds::empty(),
-                explicit_self: borrowed_explicit_self(),
-                args: Vec::new(),
-                ret_ty: Literal(Path::new(vec!("bool"))),
-                attributes: attrs,
-                combine_substructure: combine_substructure(|cx, span, substr| {
-                    cs_and(|cx, span, _, _| cx.span_bug(span,
-                                                        "Non-matching enum \
-                                                         variant in \
-                                                         deriving(Zero)"),
-                           cx, span, substr)
-                })
-            }
-        )
-    };
-    trait_def.expand(cx, mitem, item, push)
-}
-
-fn zero_substructure(cx: &mut ExtCtxt, trait_span: Span, substr: &Substructure) -> P<Expr> {
-    let zero_ident = vec!(
-        cx.ident_of("std"),
-        cx.ident_of("num"),
-        cx.ident_of("Zero"),
-        cx.ident_of("zero")
-    );
-    let zero_call = |&: span| cx.expr_call_global(span, zero_ident.clone(), Vec::new());
-
-    return match *substr.fields {
-        StaticStruct(_, ref summary) => {
-            match *summary {
-                Unnamed(ref fields) => {
-                    if fields.is_empty() {
-                        cx.expr_ident(trait_span, substr.type_ident)
-                    } else {
-                        let exprs = fields.iter().map(|sp| zero_call(*sp)).collect();
-                        cx.expr_call_ident(trait_span, substr.type_ident, exprs)
-                    }
-                }
-                Named(ref fields) => {
-                    let zero_fields = fields.iter().map(|&(ident, span)| {
-                        cx.field_imm(span, ident, zero_call(span))
-                    }).collect();
-                    cx.expr_struct_ident(trait_span, substr.type_ident, zero_fields)
-                }
-            }
-        }
-        StaticEnum(..) => {
-            cx.span_err(trait_span, "`Zero` cannot be derived for enums, only structs");
-            // let compilation continue
-            cx.expr_uint(trait_span, 0)
-        }
-        _ => cx.bug("Non-static method in `deriving(Zero)`")
-    };
-}