use ext::deriving::generic::ty::*;
use ptr::P;
-pub fn expand_deriving_unsafe_bound<F>(cx: &mut ExtCtxt,
- span: Span,
- _: &MetaItem,
- _: &Item,
- _: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_unsafe_bound(cx: &mut ExtCtxt,
+ span: Span,
+ _: &MetaItem,
+ _: &Item,
+ _: &mut FnMut(P<Item>))
{
cx.span_err(span, "this unsafe trait should be implemented explicitly");
}
-pub fn expand_deriving_copy<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_copy(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
let path = Path::new(vec![
if cx.use_std { "std" } else { "core" },
associated_types: Vec::new(),
};
- trait_def.expand(cx, mitem, item, push)
+ trait_def.expand(cx, mitem, item, push);
}
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_clone<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_clone(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_eq<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_eq(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
fn cs_total_eq_assert(cx: &mut ExtCtxt, span: Span, substr: &Substructure) -> P<Expr> {
cs_same_method(|cx, span, exprs| {
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_totalord<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_ord(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_partial_eq<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_partial_eq(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
// structures are equal if all fields are equal, and non equal, if
// any fields are not equal or if the enum variants are different
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_partial_ord<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_partial_ord(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
macro_rules! md {
($name:expr, $op:expr, $equal:expr) => { {
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: &Item,
+ push: &mut FnMut(P<Item>))
{
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: &Item,
+ push: &mut FnMut(P<Item>))
{
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: &Item,
+ push: &mut FnMut(P<Item>),
+ krate: &'static str)
{
if !cx.use_std {
// FIXME(#21880): lift this requirement.
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_default<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_default(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
use parse::token;
use ptr::P;
-pub fn expand_deriving_rustc_encodable<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_rustc_encodable(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
expand_deriving_encodable_imp(cx, span, mitem, item, push, "rustc_serialize")
}
-pub fn expand_deriving_encodable<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_encodable(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
expand_deriving_encodable_imp(cx, span, mitem, item, push, "serialize")
}
-fn expand_deriving_encodable_imp<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F,
- krate: &'static str) where
- F: FnOnce(P<Item>),
+fn expand_deriving_encodable_imp(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>),
+ krate: &'static str)
{
if !cx.use_std {
// FIXME(#21880): lift this requirement.
}
impl<'a> TraitDef<'a> {
- pub fn expand<F>(&self,
- cx: &mut ExtCtxt,
- mitem: &ast::MetaItem,
- item: &ast::Item,
- push: F) where
- F: FnOnce(P<ast::Item>),
+ pub fn expand(&self,
+ cx: &mut ExtCtxt,
+ mitem: &ast::MetaItem,
+ item: &ast::Item,
+ push: &mut FnMut(P<ast::Item>))
{
let newitem = match item.node {
ast::ItemStruct(ref struct_def, ref generics) => {
use ext::deriving::generic::ty::*;
use ptr::P;
-pub fn expand_deriving_hash<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_hash(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
let path = Path::new_(pathvec_std!(cx, core::hash::Hash), None,
}
macro_rules! derive_traits {
- ($( $name:expr => $func:path, )*) => {
+ ($( $name:expr => $func:path, )+) => {
pub fn register_all(env: &mut SyntaxEnv) {
// Define the #[derive_*] extensions.
$({
item: &Item,
push: &mut FnMut(P<Item>)) {
warn_if_deprecated(ecx, sp, $name);
- $func(ecx, sp, mitem, item, |i| push(i));
+ $func(ecx, sp, mitem, item, push);
}
}
env.insert(intern(concat!("derive_", $name)),
Decorator(Box::new(DeriveExtension)));
- })*
+ })+
env.insert(intern("derive"),
Modifier(Box::new(expand_derive)));
fn is_builtin_trait(name: &str) -> bool {
match name {
- $( $name )|* => true,
+ $( $name )|+ => true,
_ => false,
}
}
use parse::token::InternedString;
use ptr::P;
-pub fn expand_deriving_from_primitive<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_from_primitive(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
let inline = cx.meta_word(span, InternedString::new("inline"));
let attrs = vec!(cx.attribute(span, inline));
use parse::token;
use ptr::P;
-pub fn expand_deriving_show<F>(cx: &mut ExtCtxt,
- span: Span,
- mitem: &MetaItem,
- item: &Item,
- push: F) where
- F: FnOnce(P<Item>),
+pub fn expand_deriving_show(cx: &mut ExtCtxt,
+ span: Span,
+ mitem: &MetaItem,
+ item: &Item,
+ push: &mut FnMut(P<Item>))
{
// &mut ::std::fmt::Formatter
let fmtr = Ptr(box Literal(path_std!(cx, core::fmt::Formatter)),
],
};
- trait_def.expand(cx, mitem, item, |i| push(i))
+ trait_def.expand(cx, mitem, item, push)
}