syntax: move expand_generic_deriving to be a method on TraitDef
This commit is contained in:
parent
43e52e4bf1
commit
6d5beda677
@ -38,9 +38,7 @@ pub fn expand_deriving_clone(cx: @ExtCtxt,
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span,
|
||||
mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
pub fn expand_deriving_deep_clone(cx: @ExtCtxt,
|
||||
@ -67,9 +65,7 @@ pub fn expand_deriving_deep_clone(cx: @ExtCtxt,
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span,
|
||||
mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
fn cs_clone(
|
||||
|
@ -54,7 +54,5 @@ pub fn expand_deriving_eq(cx: @ExtCtxt,
|
||||
md!("ne", cs_ne)
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
@ -49,9 +49,7 @@ pub fn expand_deriving_ord(cx: @ExtCtxt,
|
||||
md!("ge", false, true)
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
/// `less`: is this `lt` or `le`? `equal`: is this `le` or `ge`?
|
||||
|
@ -42,7 +42,5 @@ pub fn expand_deriving_totaleq(cx: @ExtCtxt,
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
@ -38,8 +38,7 @@ pub fn expand_deriving_totalord(cx: @ExtCtxt,
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,8 +49,7 @@ pub fn expand_deriving_decodable(cx: @ExtCtxt,
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
fn decodable_substructure(cx: @ExtCtxt, span: span,
|
||||
|
@ -109,8 +109,7 @@ pub fn expand_deriving_encodable(cx: @ExtCtxt,
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items,
|
||||
&trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
fn encodable_substructure(cx: @ExtCtxt, span: span,
|
||||
|
@ -178,35 +178,6 @@ use core::vec;
|
||||
pub use self::ty::*;
|
||||
mod ty;
|
||||
|
||||
pub fn expand_deriving_generic(cx: @ExtCtxt,
|
||||
span: span,
|
||||
_mitem: @ast::meta_item,
|
||||
in_items: ~[@ast::item],
|
||||
trait_def: &TraitDef) -> ~[@ast::item] {
|
||||
let mut result = ~[];
|
||||
for in_items.each |item| {
|
||||
result.push(*item);
|
||||
match item.node {
|
||||
ast::item_struct(struct_def, ref generics) => {
|
||||
result.push(trait_def.expand_struct_def(cx,
|
||||
span,
|
||||
struct_def,
|
||||
item.ident,
|
||||
generics));
|
||||
}
|
||||
ast::item_enum(ref enum_definition, ref generics) => {
|
||||
result.push(trait_def.expand_enum_def(cx,
|
||||
span,
|
||||
enum_definition,
|
||||
item.ident,
|
||||
generics));
|
||||
}
|
||||
_ => ()
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
pub struct TraitDef<'self> {
|
||||
/// Path of the trait, including any type parameters
|
||||
path: Path<'self>,
|
||||
@ -310,6 +281,32 @@ pub type EnumNonMatchFunc<'self> =
|
||||
|
||||
|
||||
impl<'self> TraitDef<'self> {
|
||||
pub fn expand(&self, cx: @ExtCtxt,
|
||||
span: span,
|
||||
_mitem: @ast::meta_item,
|
||||
in_items: ~[@ast::item]) -> ~[@ast::item] {
|
||||
let mut result = ~[];
|
||||
for in_items.each |item| {
|
||||
result.push(*item);
|
||||
match item.node {
|
||||
ast::item_struct(struct_def, ref generics) => {
|
||||
result.push(self.expand_struct_def(cx, span,
|
||||
struct_def,
|
||||
item.ident,
|
||||
generics));
|
||||
}
|
||||
ast::item_enum(ref enum_def, ref generics) => {
|
||||
result.push(self.expand_enum_def(cx, span,
|
||||
enum_def,
|
||||
item.ident,
|
||||
generics));
|
||||
}
|
||||
_ => ()
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Given that we are deriving a trait `Tr` for a type `T<'a, ...,
|
||||
|
@ -42,7 +42,7 @@ pub fn expand_deriving_iter_bytes(cx: @ExtCtxt,
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items, &trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
fn iter_bytes_substructure(cx: @ExtCtxt, span: span, substr: &Substructure) -> @expr {
|
||||
|
@ -47,8 +47,7 @@ pub fn expand_deriving_rand(cx: @ExtCtxt,
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items, &trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
fn rand_substructure(cx: @ExtCtxt, span: span, substr: &Substructure) -> @expr {
|
||||
|
@ -37,8 +37,7 @@ pub fn expand_deriving_to_str(cx: @ExtCtxt,
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
expand_deriving_generic(cx, span, mitem, in_items, &trait_def)
|
||||
trait_def.expand(cx, span, mitem, in_items)
|
||||
}
|
||||
|
||||
fn to_str_substructure(cx: @ExtCtxt, span: span, substr: &Substructure) -> @expr {
|
||||
|
Loading…
x
Reference in New Issue
Block a user