aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle/metadata.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/middle/metadata.rs')
-rw-r--r--src/comp/middle/metadata.rs28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/comp/middle/metadata.rs b/src/comp/middle/metadata.rs
index 588a7d1c..4ace1f4a 100644
--- a/src/comp/middle/metadata.rs
+++ b/src/comp/middle/metadata.rs
@@ -30,6 +30,7 @@ const uint tag_items_type = 0x0au;
const uint tag_items_symbol = 0x0bu;
const uint tag_items_variant = 0x0cu;
const uint tag_items_tag_id = 0x0du;
+const uint tag_items_obj_type_id = 0x0eu;
// Type encoding
@@ -237,10 +238,11 @@ fn encode_module_item_paths(&ebml.writer ebml_w, &ast._mod module) {
encode_def_id(ebml_w, did);
ebml.end_tag(ebml_w);
}
- case (ast.item_obj(?id, _, ?tps, ?did, ?ann)) {
+ case (ast.item_obj(?id, _, ?tps, ?odid, ?ann)) {
ebml.start_tag(ebml_w, tag_paths_item);
encode_name(ebml_w, id);
- encode_def_id(ebml_w, did);
+ encode_def_id(ebml_w, odid.ctor);
+ encode_obj_type_id(ebml_w, odid.ty);
ebml.end_tag(ebml_w);
}
}
@@ -301,6 +303,12 @@ fn encode_tag_id(&ebml.writer ebml_w, &ast.def_id id) {
ebml.end_tag(ebml_w);
}
+fn encode_obj_type_id(&ebml.writer ebml_w, &ast.def_id id) {
+ ebml.start_tag(ebml_w, tag_items_obj_type_id);
+ ebml_w.writer.write(_str.bytes(def_to_str(id)));
+ ebml.end_tag(ebml_w);
+}
+
fn encode_tag_variant_info(@trans.crate_ctxt cx, &ebml.writer ebml_w,
ast.def_id did, vec[ast.variant] variants) {
@@ -367,13 +375,21 @@ fn encode_info_for_item(@trans.crate_ctxt cx, &ebml.writer ebml_w,
encode_tag_variant_info(cx, ebml_w, did, variants);
}
- case (ast.item_obj(?id, _, ?tps, ?did, ?ann)) {
+ case (ast.item_obj(?id, _, ?tps, ?odid, ?ann)) {
ebml.start_tag(ebml_w, tag_items_item);
- encode_def_id(ebml_w, did);
+ encode_def_id(ebml_w, odid.ctor);
encode_kind(ebml_w, 'o' as u8);
encode_type_params(ebml_w, tps);
- encode_type(ebml_w, trans.node_ann_type(cx, ann));
- encode_symbol(cx, ebml_w, did);
+ auto fn_ty = trans.node_ann_type(cx, ann);
+ encode_type(ebml_w, fn_ty);
+ encode_symbol(cx, ebml_w, odid.ctor);
+ ebml.end_tag(ebml_w);
+
+ ebml.start_tag(ebml_w, tag_items_item);
+ encode_def_id(ebml_w, odid.ty);
+ encode_kind(ebml_w, 'y' as u8);
+ encode_type_params(ebml_w, tps);
+ encode_type(ebml_w, ty.ty_fn_ret(fn_ty));
ebml.end_tag(ebml_w);
}
}