//! The compiler code necessary for `#[derive(Decodable)]`. See encodable.rs for more.
use ast;
-use ast::{MetaItem, Item, Expr, MutMutable};
+use ast::{MetaItem, Expr, MutMutable};
use codemap::Span;
-use ext::base::ExtCtxt;
+use ext::base::{ExtCtxt, Annotatable};
use ext::build::AstBuilder;
use ext::deriving::generic::*;
use ext::deriving::generic::ty::*;
use parse::token;
use ptr::P;
-pub fn expand_deriving_rustc_decodable<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_rustc_decodable(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: Annotatable,
+ push: &mut FnMut(Annotatable))
{
expand_deriving_decodable_imp(cx, span, mitem, item, push, "rustc_serialize")
}
-pub fn expand_deriving_decodable<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_decodable(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: Annotatable,
+ push: &mut FnMut(Annotatable))
{
expand_deriving_decodable_imp(cx, span, mitem, item, push, "serialize")
}
-fn expand_deriving_decodable_imp<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F,
- krate: &'static str) where
- F: FnOnce(P<Item>),
+fn expand_deriving_decodable_imp(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: Annotatable,
+ push: &mut FnMut(Annotatable),
+ krate: &'static str)
{
if !cx.use_std {
// FIXME(#21880): lift this requirement.
vec!(), true))))
},
explicit_self: None,
- args: vec!(Ptr(box Literal(Path::new_local("__D")),
+ args: vec!(Ptr(Box::new(Literal(Path::new_local("__D"))),
Borrowed(None, MutMutable))),
ret_ty: Literal(Path::new_(
pathvec_std!(cx, core::result::Result),
None,
- vec!(box Self_, box Literal(Path::new_(
+ vec!(Box::new(Self_), Box::new(Literal(Path::new_(
vec!["__D", "Error"], None, vec![], false
- ))),
+ )))),
true
)),
attributes: Vec::new(),
associated_types: Vec::new(),
};
- trait_def.expand(cx, mitem, item, push)
+ trait_def.expand(cx, mitem, &item, push)
}
fn decodable_substructure(cx: &mut ExtCtxt, trait_span: Span,