about summary refs log tree commit diff
path: root/src/rustc/metadata
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-03-23 12:51:20 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-03-23 12:51:20 +0100
commit52d618a99a56cf536a6ec70e7aea7824533d1edd (patch)
tree2385a923907e7c3c8354237e442f88bdf9d30f16 /src/rustc/metadata
parentc704d5a5d308b5f655251bfdedafbbb969ca5f62 (diff)
downloadrust-52d618a99a56cf536a6ec70e7aea7824533d1edd.tar.gz
rust-52d618a99a56cf536a6ec70e7aea7824533d1edd.zip
Revert removal of intrinsics
Oops. We can't do this yet until the next snapshot.
Diffstat (limited to 'src/rustc/metadata')
-rw-r--r--src/rustc/metadata/common.rs1
-rw-r--r--src/rustc/metadata/csearch.rs6
-rw-r--r--src/rustc/metadata/decoder.rs8
-rw-r--r--src/rustc/metadata/encoder.rs6
4 files changed, 20 insertions, 1 deletions
diff --git a/src/rustc/metadata/common.rs b/src/rustc/metadata/common.rs
index 8a6b0eb30b2..00aa26969d7 100644
--- a/src/rustc/metadata/common.rs
+++ b/src/rustc/metadata/common.rs
@@ -68,6 +68,7 @@ const tag_mod_impl: uint = 0x30u;
 
 const tag_item_method: uint = 0x31u;
 const tag_impl_iface: uint = 0x32u;
+const tag_item_is_intrinsic: uint = 0x33u;
 
 // discriminator value for variants
 const tag_disr_val: uint = 0x34u;
diff --git a/src/rustc/metadata/csearch.rs b/src/rustc/metadata/csearch.rs
index e43b7aa7ff3..02b506f7070 100644
--- a/src/rustc/metadata/csearch.rs
+++ b/src/rustc/metadata/csearch.rs
@@ -26,6 +26,7 @@ export get_type;
 export get_impl_iface;
 export get_impl_method;
 export get_item_path;
+export item_is_intrinsic;
 export maybe_get_item_ast, found_ast, found, found_parent, not_found;
 
 fn get_symbol(cstore: cstore::cstore, def: ast::def_id) -> str {
@@ -189,6 +190,11 @@ fn get_class_method(cstore: cstore::cstore, def: ast::def_id, mname: str)
     decoder::get_class_method(cdata, def.node, mname)
 }
 
+fn item_is_intrinsic(cstore: cstore::cstore, def: ast::def_id) -> bool {
+    let cdata = cstore::get_crate_data(cstore, def.crate);
+    decoder::item_is_intrinsic(cdata, def.node)
+}
+
 // Local Variables:
 // mode: rust
 // fill-column: 78;
diff --git a/src/rustc/metadata/decoder.rs b/src/rustc/metadata/decoder.rs
index 97a77dd71d3..cf1947a96dc 100644
--- a/src/rustc/metadata/decoder.rs
+++ b/src/rustc/metadata/decoder.rs
@@ -41,6 +41,7 @@ export get_item_path;
 export maybe_find_item; // sketchy
 export item_type; // sketchy
 export maybe_get_item_ast;
+export item_is_intrinsic;
 
 // Used internally by astencode:
 export translate_def_id;
@@ -308,6 +309,13 @@ fn get_class_method(cdata: cmd, id: ast::node_id, name: str) -> ast::def_id {
     }
 }
 
+fn item_is_intrinsic(cdata: cmd, id: ast::node_id) -> bool {
+    let mut intrinsic = false;
+    ebml::tagged_docs(lookup_item(id, cdata.data), tag_item_is_intrinsic,
+                      {|_i| intrinsic = true;});
+    intrinsic
+}
+
 fn get_symbol(data: @[u8], id: ast::node_id) -> str {
     ret item_symbol(lookup_item(id, data));
 }
diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs
index 3e9e5d842ab..69086d4698b 100644
--- a/src/rustc/metadata/encoder.rs
+++ b/src/rustc/metadata/encoder.rs
@@ -676,8 +676,12 @@ fn encode_info_for_native_item(ecx: @encode_ctxt, ebml_w: ebml::writer,
         encode_def_id(ebml_w, local_def(nitem.id));
         encode_family(ebml_w, purity_fn_family(fn_decl.purity));
         encode_type_param_bounds(ebml_w, ecx, tps);
-        encode_type(ecx, ebml_w, node_id_to_type(ecx.ccx.tcx, nitem.id));
         if abi == native_abi_rust_intrinsic {
+            ebml_w.start_tag(tag_item_is_intrinsic);
+            ebml_w.end_tag();
+        }
+        encode_type(ecx, ebml_w, node_id_to_type(ecx.ccx.tcx, nitem.id));
+        if abi == native_abi_rust_builtin {
             astencode::encode_inlined_item(ecx, ebml_w, path,
                                            ii_native(nitem));
         } else {