Even more to aster

This commit is contained in:
Erick Tryzelaar
2015-03-08 18:33:23 -07:00
parent 2e8c70b833
commit cdb3ed30ab
+21 -26
View File
@@ -126,8 +126,7 @@ fn serialize_substructure(
substr: &Substructure, substr: &Substructure,
item: &Item, item: &Item,
) -> P<Expr> { ) -> P<Expr> {
let ctx = aster::Ctx::new(); let builder = aster::AstBuilder::new().span(span);
let builder = aster::AstBuilder::new(&ctx).span(span);
let visitor = substr.nonself_args[0].clone(); let visitor = substr.nonself_args[0].clone();
@@ -458,9 +457,9 @@ fn serialize_variant(
let visitor_ident = builder.id("__Visitor"); let visitor_ident = builder.id("__Visitor");
let visitor_struct = builder.item().struct_(visitor_ident) let visitor_struct = builder.item().struct_(visitor_ident)
.with_generics(generics.clone()) .generics().with(generics.clone()).build()
.field("state").usize() .field("state").usize()
.field("value").build_ty(value_ty) .field("value").build(value_ty)
.build(); .build();
let visitor_expr = builder.expr().struct_path(visitor_ident) let visitor_expr = builder.expr().struct_path(visitor_ident)
@@ -470,7 +469,7 @@ fn serialize_variant(
fields.iter().map(|field| { fields.iter().map(|field| {
builder.expr() builder.expr()
.addr_of() .addr_of()
.build_expr(field.self_.clone()) .build(field.self_.clone())
}) })
) )
.build() .build()
@@ -651,8 +650,7 @@ fn deserialize_substructure(
substr: &Substructure, substr: &Substructure,
item: &Item, item: &Item,
) -> P<Expr> { ) -> P<Expr> {
let ctx = aster::Ctx::new(); let builder = aster::AstBuilder::new().span(span);
let builder = aster::AstBuilder::new(&ctx).span(span);
let state = substr.nonself_args[0].clone(); let state = substr.nonself_args[0].clone();
@@ -674,7 +672,6 @@ fn deserialize_substructure(
(&ast::ItemEnum(_, ref generics), &StaticEnum(ref enum_def, ref fields)) => { (&ast::ItemEnum(_, ref generics), &StaticEnum(ref enum_def, ref fields)) => {
deserialize_enum( deserialize_enum(
cx, cx,
span,
&builder, &builder,
substr.type_ident, substr.type_ident,
&fields, &fields,
@@ -712,7 +709,6 @@ fn deserialize_struct(
} else { } else {
deserialize_struct_unnamed_fields( deserialize_struct_unnamed_fields(
cx, cx,
span,
builder, builder,
type_ident, type_ident,
struct_ident, struct_ident,
@@ -789,7 +785,6 @@ fn deserialize_struct_empty_fields(
fn deserialize_struct_unnamed_fields( fn deserialize_struct_unnamed_fields(
cx: &ExtCtxt, cx: &ExtCtxt,
span: Span,
builder: &aster::AstBuilder, builder: &aster::AstBuilder,
type_ident: Ident, type_ident: Ident,
struct_ident: Ident, struct_ident: Ident,
@@ -810,7 +805,6 @@ fn deserialize_struct_unnamed_fields(
let visit_seq_expr = declare_visit_seq( let visit_seq_expr = declare_visit_seq(
cx, cx,
span,
builder, builder,
struct_path, struct_path,
&field_names, &field_names,
@@ -826,7 +820,7 @@ fn deserialize_struct_unnamed_fields(
} else { } else {
( (
builder.item().tuple_struct("__Visitor") builder.item().tuple_struct("__Visitor")
.with_generics(generics.clone()) .generics().with(generics.clone()).build()
.with_tys( .with_tys(
generics.ty_params.iter().map(|ty_param| { generics.ty_params.iter().map(|ty_param| {
builder.ty().phantom_data().id(ty_param.ident) builder.ty().phantom_data().id(ty_param.ident)
@@ -936,6 +930,7 @@ fn deserialize_struct_named_fields(
let field_deserializer = declare_map_field_deserializer( let field_deserializer = declare_map_field_deserializer(
cx, cx,
span, span,
builder,
&field_names, &field_names,
fields, fields,
struct_def, struct_def,
@@ -943,7 +938,7 @@ fn deserialize_struct_named_fields(
let visit_map_expr = declare_visit_map( let visit_map_expr = declare_visit_map(
cx, cx,
span, builder,
struct_path, struct_path,
&field_names, &field_names,
fields, fields,
@@ -1013,6 +1008,7 @@ fn field_alias(field: &ast::StructField) -> Option<&ast::Lit> {
fn declare_map_field_deserializer( fn declare_map_field_deserializer(
cx: &ExtCtxt, cx: &ExtCtxt,
span: Span, span: Span,
_builder: &aster::AstBuilder,
field_names: &[ast::Ident], field_names: &[ast::Ident],
fields: &[(Ident, Span)], fields: &[(Ident, Span)],
struct_def: &StructDef, struct_def: &StructDef,
@@ -1121,7 +1117,7 @@ fn default_value(field: &ast::StructField) -> bool {
fn declare_visit_map( fn declare_visit_map(
cx: &ExtCtxt, cx: &ExtCtxt,
span: Span, builder: &aster::AstBuilder,
struct_path: ast::Path, struct_path: ast::Path,
field_names: &[Ident], field_names: &[Ident],
fields: &[(Ident, Span)], fields: &[(Ident, Span)],
@@ -1166,16 +1162,15 @@ fn declare_visit_map(
}) })
.collect(); .collect();
let result = cx.expr_struct( let result = builder.expr().struct_path(struct_path)
span, .with_id_exprs(
struct_path, fields.iter()
fields.iter() .zip(field_names.iter())
.zip(field_names.iter()) .map(|(&(name, _), field)| {
.map(|(&(name, span), field)| { (name, builder.expr().id(field))
cx.field_imm(span, name, cx.expr_ident(span, *field)) })
}) )
.collect() .build();
);
quote_expr!(cx, { quote_expr!(cx, {
$let_values $let_values
@@ -1286,7 +1281,6 @@ fn deserialize_enum_variant(
let visit_seq_expr = declare_visit_seq( let visit_seq_expr = declare_visit_seq(
cx, cx,
span,
builder, builder,
variant_path, variant_path,
&field_names, &field_names,
@@ -1318,6 +1312,7 @@ fn deserialize_enum_variant(
let field_deserializer = declare_map_field_deserializer( let field_deserializer = declare_map_field_deserializer(
cx, cx,
span, span,
builder,
&field_names, &field_names,
fields, fields,
match variant_ptr.node.kind { match variant_ptr.node.kind {
@@ -1328,7 +1323,7 @@ fn deserialize_enum_variant(
let visit_map_expr = declare_visit_map( let visit_map_expr = declare_visit_map(
cx, cx,
span, builder,
variant_path, variant_path,
&field_names, &field_names,
fields, fields,