diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2012-03-23 12:51:20 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2012-03-23 12:51:20 +0100 |
| commit | 52d618a99a56cf536a6ec70e7aea7824533d1edd (patch) | |
| tree | 2385a923907e7c3c8354237e442f88bdf9d30f16 /src/rustc/metadata | |
| parent | c704d5a5d308b5f655251bfdedafbbb969ca5f62 (diff) | |
| download | rust-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.rs | 1 | ||||
| -rw-r--r-- | src/rustc/metadata/csearch.rs | 6 | ||||
| -rw-r--r-- | src/rustc/metadata/decoder.rs | 8 | ||||
| -rw-r--r-- | src/rustc/metadata/encoder.rs | 6 |
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 { |
