aboutsummaryrefslogtreecommitdiffstats
path: root/components/plugins/heap_size.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/plugins/heap_size.rs')
-rw-r--r--components/plugins/heap_size.rs82
1 files changed, 0 insertions, 82 deletions
diff --git a/components/plugins/heap_size.rs b/components/plugins/heap_size.rs
deleted file mode 100644
index 0f8ea67fa62..00000000000
--- a/components/plugins/heap_size.rs
+++ /dev/null
@@ -1,82 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-//! Handles the auto-deriving for `#[derive(HeapSizeOf)]`
-//!
-//! This provides the `#[derive(HeapSizeOf)]` decorator, which
-//! generates a `HeapSizeOf` implementation that adds up
-//! calls to heap_size_of_children() for all the fields
-//! of a struct or enum variant.
-//!
-//! Fields marked `#[ignore_heap_size_of = "reason"]` will
-//! be ignored in this calculation. Providing a reason is compulsory.
-
-
-use syntax::ast::*;
-use syntax::attr::AttrMetaMethods;
-use syntax::codemap::Span;
-use syntax::ext::base::{Annotatable, ExtCtxt};
-use syntax::ext::build::AstBuilder;
-use syntax::ptr::P;
-use syntax_ext::deriving::generic::*;
-
-pub fn expand_heap_size(cx: &mut ExtCtxt, span: Span, mitem: &MetaItem,
- item: &Annotatable, push: &mut FnMut(Annotatable)) {
- let trait_def = TraitDef {
- is_unsafe: false,
- span: span,
- attributes: Vec::new(),
- path: ty::Path::new(vec!("util", "mem", "HeapSizeOf")),
- additional_bounds: Vec::new(),
- generics: ty::LifetimeBounds::empty(),
- methods: vec![
- MethodDef {
- name: "heap_size_of_children",
- generics: ty::LifetimeBounds::empty(),
- explicit_self: ty::borrowed_explicit_self(),
- args: vec!(),
- ret_ty: ty::Literal(ty::Path::new_local("usize")),
- attributes: vec!(),
- is_unsafe: false,
- combine_substructure: combine_substructure(Box::new(heap_size_substructure))
- }
- ],
- associated_types: vec![],
- };
- trait_def.expand(cx, mitem, item, push)
-}
-
-/// Defines how the implementation for `heap_size_of_children()` is to be generated.
-fn heap_size_substructure(cx: &mut ExtCtxt, trait_span: Span, substr: &Substructure) -> P<Expr> {
- let fields = match *substr.fields {
- Struct(ref fs) | EnumMatching(_, _, ref fs) => fs,
- _ => cx.span_bug(trait_span, "impossible substructure in `#[derive(HeapSizeOf)]`")
- };
-
- fields.iter().fold(cx.expr_usize(trait_span, 0), |acc, ref item| {
- if item.attrs.iter()
- .find(|ref a| {
- if a.check_name("ignore_heap_size_of") {
- match a.node.value.node {
- MetaNameValue(..) => (),
- _ => cx.span_err(a.span, "#[ignore_heap_size_of] \
- should have an explanation, \
- e.g. #[ignore_heap_size_of = \"\"]")
- }
- true
- } else {
- false
- }
- })
- .is_some() {
- acc
- } else {
- cx.expr_binary(item.span, BiAdd, acc,
- cx.expr_method_call(item.span,
- item.self_.clone(),
- substr.method_ident,
- Vec::new()))
- }
- })
-}