syntax: move expand_generic_deriving to be a method on TraitDef

This commit is contained in:
Huon Wilson 2013-06-07 17:46:44 +10:00
parent 43e52e4bf1
commit 6d5beda677
11 changed files with 37 additions and 55 deletions

View File

@ -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(

View File

@ -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)
}

View File

@ -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`?

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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,

View File

@ -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,

View File

@ -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, ...,

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {