diff options
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/deriving/mod.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/deriving/zero.rs | 102 |
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)`") - }; -} |
