mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Say farewell to in-tree HeapSizeOf
This commit is contained in:
parent
9932a5cf82
commit
cb5cd8d881
80 changed files with 245 additions and 733 deletions
|
@ -17,7 +17,7 @@ rev = "9dca15de3e8ea266d3e7e868c0f358ed4fa5f195"
|
|||
optional = true
|
||||
|
||||
[dependencies]
|
||||
url = "0.5.4"
|
||||
url = {version = "0.5.4", features = ["heap_size"]}
|
||||
|
||||
[features]
|
||||
default = []
|
||||
|
|
|
@ -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()))
|
||||
}
|
||||
})
|
||||
}
|
|
@ -36,8 +36,6 @@ use syntax::parse::token::intern;
|
|||
// Public for documentation to show up
|
||||
/// Handles the auto-deriving for `#[derive(JSTraceable)]`
|
||||
pub mod jstraceable;
|
||||
/// Handles the auto-deriving for `#[derive(HeapSizeOf)]`
|
||||
pub mod heap_size;
|
||||
pub mod lints;
|
||||
/// Autogenerates implementations of Reflectable on DOM structs
|
||||
pub mod reflector;
|
||||
|
@ -51,7 +49,6 @@ pub fn plugin_registrar(reg: &mut Registry) {
|
|||
reg.register_syntax_extension(intern("dom_struct"), MultiModifier(box jstraceable::expand_dom_struct));
|
||||
reg.register_syntax_extension(intern("derive_JSTraceable"), MultiDecorator(box jstraceable::expand_jstraceable));
|
||||
reg.register_syntax_extension(intern("_generate_reflector"), MultiDecorator(box reflector::expand_reflector));
|
||||
reg.register_syntax_extension(intern("derive_HeapSizeOf"), MultiDecorator(box heap_size::expand_heap_size));
|
||||
reg.register_macro("to_lower", casing::expand_lower);
|
||||
reg.register_macro("to_upper", casing::expand_upper);
|
||||
reg.register_macro("url", url_plugin::expand_url);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue