Switch from serialization to std::serialize. (snapshot)

This commit is contained in:
Erick Tryzelaar 2012-12-17 19:31:04 -08:00
parent ec9305802b
commit 8650c6f683
19 changed files with 422 additions and 431 deletions

View file

@ -10,15 +10,12 @@
// The Rust abstract syntax tree.
use std::serialization::{Serializable,
Deserializable,
Serializer,
Deserializer};
use std::serialize::{Encodable, Decodable, Encoder, Decoder};
use codemap::{span, FileName};
use parse::token;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type spanned<T> = {node: T, span: span};
@ -33,12 +30,12 @@ macro_rules! interner_key (
// implemented.
struct ident { repr: uint }
impl<S: Serializer> ident: Serializable<S> {
fn serialize(&self, s: &S) {
impl<S: Encoder> ident: Encodable<S> {
fn encode(&self, s: &S) {
let intr = match unsafe {
task::local_data::local_data_get(interner_key!())
} {
None => fail ~"serialization: TLS interner not set up",
None => fail ~"encode: TLS interner not set up",
Some(intr) => intr
};
@ -46,12 +43,12 @@ impl<S: Serializer> ident: Serializable<S> {
}
}
impl<D: Deserializer> ident: Deserializable<D> {
static fn deserialize(d: &D) -> ident {
impl<D: Decoder> ident: Decodable<D> {
static fn decode(d: &D) -> ident {
let intr = match unsafe {
task::local_data::local_data_get(interner_key!())
} {
None => fail ~"deserialization: TLS interner not set up",
None => fail ~"decode: TLS interner not set up",
Some(intr) => intr
};
@ -73,8 +70,8 @@ impl ident: to_bytes::IterBytes {
// Functions may or may not have names.
type fn_ident = Option<ident>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type path = {span: span,
global: bool,
idents: ~[ident],
@ -85,8 +82,8 @@ type crate_num = int;
type node_id = int;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type def_id = {crate: crate_num, node: node_id};
impl def_id : cmp::Eq {
@ -99,20 +96,20 @@ impl def_id : cmp::Eq {
const local_crate: crate_num = 0;
const crate_node_id: node_id = 0;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
// The AST represents all type param bounds as types.
// typeck::collect::compute_bounds matches these against
// the "special" built-in traits (see middle::lang_items) and
// detects Copy, Send, Owned, and Const.
enum ty_param_bound = @Ty;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type ty_param = {ident: ident, id: node_id, bounds: @~[ty_param_bound]};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum def {
def_fn(def_id, purity),
def_static_method(/* method */ def_id,
@ -284,8 +281,8 @@ type crate_ =
type meta_item = spanned<meta_item_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum meta_item_ {
meta_word(~str),
meta_list(~str, ~[@meta_item]),
@ -294,24 +291,24 @@ enum meta_item_ {
type blk = spanned<blk_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type blk_ = {view_items: ~[@view_item],
stmts: ~[@stmt],
expr: Option<@expr>,
id: node_id,
rules: blk_check_mode};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type pat = {id: node_id, node: pat_, span: span};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type field_pat = {ident: ident, pat: @pat};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum binding_mode {
bind_by_value,
bind_by_move,
@ -367,8 +364,8 @@ impl binding_mode : cmp::Eq {
pure fn ne(&self, other: &binding_mode) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum pat_ {
pat_wild,
// A pat_ident may either be a new bound variable,
@ -392,8 +389,8 @@ enum pat_ {
pat_vec(~[@pat], Option<@pat>)
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum mutability { m_mutbl, m_imm, m_const, }
impl mutability : to_bytes::IterBytes {
@ -409,8 +406,8 @@ impl mutability : cmp::Eq {
pure fn ne(&self, other: &mutability) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
pub enum Proto {
ProtoBare, // bare functions (deprecated)
ProtoUniq, // ~fn
@ -431,8 +428,8 @@ impl Proto : to_bytes::IterBytes {
}
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum vstore {
// FIXME (#3469): Change uint to @expr (actually only constant exprs)
vstore_fixed(Option<uint>), // [1,2,3,4]
@ -441,8 +438,8 @@ enum vstore {
vstore_slice(@region) // &[1,2,3,4](foo)?
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum expr_vstore {
// FIXME (#3469): Change uint to @expr (actually only constant exprs)
expr_vstore_fixed(Option<uint>), // [1,2,3,4]
@ -460,8 +457,8 @@ pure fn is_blockish(p: ast::Proto) -> bool {
}
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum binop {
add,
subtract,
@ -490,8 +487,8 @@ impl binop : cmp::Eq {
pure fn ne(&self, other: &binop) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum unop {
box(mutability),
uniq(mutability),
@ -542,8 +539,8 @@ impl unop : cmp::Eq {
// Generally, after typeck you can get the inferred value
// using ty::resolved_T(...).
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum inferable<T> {
expl(T),
infer(node_id)
@ -582,8 +579,8 @@ impl<T:cmp::Eq> inferable<T> : cmp::Eq {
}
// "resolved" mode: the real modes.
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum rmode { by_ref, by_val, by_move, by_copy }
impl rmode : to_bytes::IterBytes {
@ -605,8 +602,8 @@ type mode = inferable<rmode>;
type stmt = spanned<stmt_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum stmt_ {
stmt_decl(@decl, node_id),
@ -622,8 +619,8 @@ enum stmt_ {
// FIXME (pending discussion of #1697, #2178...): local should really be
// a refinement on pat.
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type local_ = {is_mutbl: bool, ty: @Ty, pat: @pat,
init: Option<@expr>, id: node_id};
@ -631,22 +628,22 @@ type local = spanned<local_>;
type decl = spanned<decl_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum decl_ { decl_local(~[@local]), decl_item(@item), }
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type arm = {pats: ~[@pat], guard: Option<@expr>, body: blk};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type field_ = {mutbl: mutability, ident: ident, expr: @expr};
type field = spanned<field_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum blk_check_mode { default_blk, unsafe_blk, }
impl blk_check_mode : cmp::Eq {
@ -661,18 +658,18 @@ impl blk_check_mode : cmp::Eq {
pure fn ne(&self, other: &blk_check_mode) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type expr = {id: node_id, callee_id: node_id, node: expr_, span: span};
// Extra node ID is only used for index, assign_op, unary, binary, method call
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum log_level { error, debug, log_other }
// 0 = error, 1 = debug, 2 = log_other
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum expr_ {
expr_vstore(@expr, expr_vstore),
expr_vec(~[@expr], mutability),
@ -731,8 +728,8 @@ enum expr_ {
expr_paren(@expr)
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type capture_item_ = {
id: int,
is_move: bool,
@ -760,8 +757,8 @@ type capture_clause = @~[capture_item];
// else knows what to do with them, so you'll probably get a syntax
// error.
//
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
#[doc="For macro invocations; parsing is delegated to the macro"]
enum token_tree {
tt_tok(span, token::Token),
@ -825,8 +822,8 @@ enum token_tree {
//
type matcher = spanned<matcher_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum matcher_ {
// match one token
match_tok(token::Token),
@ -839,16 +836,16 @@ enum matcher_ {
type mac = spanned<mac_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum mac_ {
mac_invoc_tt(@path,~[token_tree]), // new macro-invocation
}
type lit = spanned<lit_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum lit_ {
lit_str(@~str),
lit_int(i64, int_ty),
@ -892,24 +889,24 @@ impl ast::lit_: cmp::Eq {
// NB: If you change this, you'll probably want to change the corresponding
// type structure in middle/ty.rs as well.
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type mt = {ty: @Ty, mutbl: mutability};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type ty_field_ = {ident: ident, mt: mt};
type ty_field = spanned<ty_field_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type ty_method = {ident: ident, attrs: ~[attribute], purity: purity,
decl: fn_decl, tps: ~[ty_param], self_ty: self_ty,
id: node_id, span: span};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
// A trait method is either required (meaning it doesn't have an
// implementation, just a signature) or provided (meaning it has a default
// implementation).
@ -918,8 +915,8 @@ enum trait_method {
provided(@method),
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum int_ty { ty_i, ty_char, ty_i8, ty_i16, ty_i32, ty_i64, }
impl int_ty : to_bytes::IterBytes {
@ -948,8 +945,8 @@ impl int_ty : cmp::Eq {
pure fn ne(&self, other: &int_ty) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum uint_ty { ty_u, ty_u8, ty_u16, ty_u32, ty_u64, }
impl uint_ty : to_bytes::IterBytes {
@ -976,8 +973,8 @@ impl uint_ty : cmp::Eq {
pure fn ne(&self, other: &uint_ty) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum float_ty { ty_f, ty_f32, ty_f64, }
impl float_ty : to_bytes::IterBytes {
@ -996,13 +993,13 @@ impl float_ty : cmp::Eq {
pure fn ne(&self, other: &float_ty) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type Ty = {id: node_id, node: ty_, span: span};
// Not represented directly in the AST, referred to by name through a ty_path.
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum prim_ty {
ty_int(int_ty),
ty_uint(uint_ty),
@ -1049,12 +1046,12 @@ impl prim_ty : cmp::Eq {
pure fn ne(&self, other: &prim_ty) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type region = {id: node_id, node: region_};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum region_ {
re_anon,
re_static,
@ -1062,8 +1059,8 @@ enum region_ {
re_named(ident)
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum Onceness {
Once,
Many
@ -1081,8 +1078,8 @@ impl Onceness : cmp::Eq {
}
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
struct TyFn {
proto: Proto,
region: Option<@region>,
@ -1092,8 +1089,8 @@ struct TyFn {
decl: fn_decl
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum ty_ {
ty_nil,
ty_bot, /* bottom type */
@ -1132,19 +1129,19 @@ impl Ty : to_bytes::IterBytes {
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type arg = {mode: mode, ty: @Ty, pat: @pat, id: node_id};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type fn_decl =
{inputs: ~[arg],
output: @Ty,
cf: ret_style};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum purity {
pure_fn, // declared with "pure fn"
unsafe_fn, // declared with "unsafe fn"
@ -1165,8 +1162,8 @@ impl purity : cmp::Eq {
pure fn ne(&self, other: &purity) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum ret_style {
noreturn, // functions with return type _|_ that always
// raise an error or exit (i.e. never return to the caller)
@ -1191,8 +1188,8 @@ impl ret_style : cmp::Eq {
pure fn ne(&self, other: &ret_style) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum self_ty_ {
sty_static, // no self: static method
sty_by_ref, // old by-reference self: ``
@ -1248,20 +1245,20 @@ impl self_ty_ : cmp::Eq {
type self_ty = spanned<self_ty_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type method = {ident: ident, attrs: ~[attribute],
tps: ~[ty_param], self_ty: self_ty,
purity: purity, decl: fn_decl, body: blk,
id: node_id, span: span, self_id: node_id,
vis: visibility};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type _mod = {view_items: ~[@view_item], items: ~[@item]};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum foreign_abi {
foreign_abi_rust_intrinsic,
foreign_abi_cdecl,
@ -1269,8 +1266,8 @@ enum foreign_abi {
}
// Foreign mods can be named or anonymous
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum foreign_mod_sort { named, anonymous }
impl foreign_mod_sort : cmp::Eq {
@ -1294,49 +1291,49 @@ impl foreign_abi : cmp::Eq {
pure fn ne(&self, other: &foreign_abi) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type foreign_mod =
{sort: foreign_mod_sort,
abi: ident,
view_items: ~[@view_item],
items: ~[@foreign_item]};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type variant_arg = {ty: @Ty, id: node_id};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum variant_kind {
tuple_variant_kind(~[variant_arg]),
struct_variant_kind(@struct_def),
enum_variant_kind(enum_def)
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type enum_def_ = { variants: ~[variant], common: Option<@struct_def> };
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum enum_def = enum_def_;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type variant_ = {name: ident, attrs: ~[attribute], kind: variant_kind,
id: node_id, disr_expr: Option<@expr>, vis: visibility};
type variant = spanned<variant_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type path_list_ident_ = {name: ident, id: node_id};
type path_list_ident = spanned<path_list_ident_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum namespace { module_ns, type_value_ns }
impl namespace : cmp::Eq {
@ -1348,8 +1345,8 @@ impl namespace : cmp::Eq {
type view_path = spanned<view_path_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum view_path_ {
// quux = foo::bar::baz
@ -1366,13 +1363,13 @@ enum view_path_ {
view_path_list(@path, ~[path_list_ident], node_id)
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type view_item = {node: view_item_, attrs: ~[attribute],
vis: visibility, span: span};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum view_item_ {
view_item_use(ident, ~[@meta_item], node_id),
view_item_import(~[@view_path]),
@ -1385,8 +1382,8 @@ type attribute = spanned<attribute_>;
// Distinguishes between attributes that decorate items and attributes that
// are contained as statements within items. These two cases need to be
// distinguished for pretty-printing.
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum attr_style { attr_outer, attr_inner, }
impl attr_style : cmp::Eq {
@ -1397,8 +1394,8 @@ impl attr_style : cmp::Eq {
}
// doc-comments are promoted to attributes that have is_sugared_doc = true
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type attribute_ = {style: attr_style, value: meta_item, is_sugared_doc: bool};
/*
@ -1408,12 +1405,12 @@ type attribute_ = {style: attr_style, value: meta_item, is_sugared_doc: bool};
If this impl is an item_impl, the impl_id is redundant (it could be the
same as the impl's node id).
*/
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type trait_ref = {path: @path, ref_id: node_id};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum visibility { public, private, inherited }
impl visibility : cmp::Eq {
@ -1430,8 +1427,8 @@ impl visibility : cmp::Eq {
pure fn ne(&self, other: &visibility) -> bool { !(*self).eq(other) }
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type struct_field_ = {
kind: struct_field_kind,
id: node_id,
@ -1440,8 +1437,8 @@ type struct_field_ = {
type struct_field = spanned<struct_field_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum struct_field_kind {
named_field(ident, struct_mutability, visibility),
unnamed_field // element of a tuple-like struct
@ -1474,8 +1471,8 @@ impl struct_field_kind : cmp::Eq {
}
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type struct_def = {
fields: ~[@struct_field], /* fields */
/* (not including ctor or dtor) */
@ -1490,14 +1487,14 @@ type struct_def = {
FIXME (#3300): Should allow items to be anonymous. Right now
we just use dummy names for anon items.
*/
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type item = {ident: ident, attrs: ~[attribute],
id: node_id, node: item_,
vis: visibility, span: span};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum item_ {
item_const(@Ty, @expr),
item_fn(fn_decl, purity, ~[ty_param], blk),
@ -1514,8 +1511,8 @@ enum item_ {
item_mac(mac),
}
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum struct_mutability { struct_mutable, struct_immutable }
impl struct_mutability : to_bytes::IterBytes {
@ -1540,15 +1537,15 @@ impl struct_mutability : cmp::Eq {
type struct_dtor = spanned<struct_dtor_>;
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type struct_dtor_ = {id: node_id,
attrs: ~[attribute],
self_id: node_id,
body: blk};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
type foreign_item =
{ident: ident,
attrs: ~[attribute],
@ -1557,8 +1554,8 @@ type foreign_item =
span: span,
vis: visibility};
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum foreign_item_ {
foreign_item_fn(fn_decl, purity, ~[ty_param]),
foreign_item_const(@Ty)
@ -1567,8 +1564,8 @@ enum foreign_item_ {
// The data we save and restore about an inlined item or method. This is not
// part of the AST that we parse from a file, but it becomes part of the tree
// that we trans.
#[auto_serialize]
#[auto_deserialize]
#[auto_encode]
#[auto_decode]
enum inlined_item {
ii_item(@item),
ii_method(def_id /* impl id */, @method),