diff options
| author | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-09-24 13:35:42 -0400 |
|---|---|---|
| committer | Luqman Aden <laden@csclub.uwaterloo.ca> | 2013-09-24 20:34:11 -0400 |
| commit | 90e009f9b6aae3b3a9f500f07bca07b531e54507 (patch) | |
| tree | d825defd7559a45057811dbe223a5c6643e7098b /src/libstd/rt | |
| parent | 753547963340cb973210ad2df5590c29bf46ddf1 (diff) | |
| download | rust-90e009f9b6aae3b3a9f500f07bca07b531e54507.tar.gz rust-90e009f9b6aae3b3a9f500f07bca07b531e54507.zip | |
Remove the annihilate function from the crate map. Fixes #8431
Diffstat (limited to 'src/libstd/rt')
| -rw-r--r-- | src/libstd/rt/crate_map.rs | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/src/libstd/rt/crate_map.rs b/src/libstd/rt/crate_map.rs index 67cbdaae4fa..57abb7560a1 100644 --- a/src/libstd/rt/crate_map.rs +++ b/src/libstd/rt/crate_map.rs @@ -9,7 +9,8 @@ // except according to those terms. -use libc::{c_void, c_char}; +use libc::c_char; +#[cfg(stage0)] use libc::c_void; use ptr; use ptr::RawPtr; use vec; @@ -39,6 +40,7 @@ struct CrateMapV0 { children: [*CrateMap, ..1] } +#[cfg(stage0)] struct CrateMap { version: i32, annihilate_fn: *c_void, @@ -48,6 +50,15 @@ struct CrateMap { children: [*CrateMap, ..1] } +#[cfg(not(stage0))] +struct CrateMap { + version: i32, + entries: *ModEntry, + /// a dynamically sized struct, where all pointers to children are listed adjacent + /// to the struct, terminated with NULL + children: [*CrateMap, ..1] +} + #[cfg(not(windows))] pub fn get_crate_map() -> *CrateMap { &'static CRATE_MAP as *CrateMap @@ -79,15 +90,6 @@ unsafe fn version(crate_map: *CrateMap) -> i32 { } } -/// Returns a pointer to the annihilate function of the CrateMap -pub unsafe fn annihilate_fn(crate_map: *CrateMap) -> *c_void { - match version(crate_map) { - 0 => return ptr::null(), - 1 => return (*crate_map).annihilate_fn, - _ => fail!("Unknown crate map version!") - } -} - unsafe fn entries(crate_map: *CrateMap) -> *ModEntry { match version(crate_map) { 0 => { @@ -145,7 +147,6 @@ fn iter_crate_map_duplicates() { struct CrateMapT3 { version: i32, - annihilate_fn: *c_void, entries: *ModEntry, children: [*CrateMap, ..3] } @@ -160,13 +161,12 @@ fn iter_crate_map_duplicates() { ]; let child_crate = CrateMap { version: 1, - annihilate_fn: ptr::null(), entries: vec::raw::to_ptr(entries), children: [ptr::null()] }; let root_crate = CrateMapT3 { - version: 1, annihilate_fn: ptr::null(), + version: 1, entries: vec::raw::to_ptr([ModEntry { name: ptr::null(), log_level: ptr::mut_null()}]), children: [&child_crate as *CrateMap, &child_crate as *CrateMap, ptr::null()] }; @@ -187,7 +187,6 @@ fn iter_crate_map_follow_children() { struct CrateMapT2 { version: i32, - annihilate_fn: *c_void, entries: *ModEntry, children: [*CrateMap, ..2] } @@ -199,7 +198,6 @@ fn iter_crate_map_follow_children() { let mut level3: u32 = 3; let child_crate2 = CrateMap { version: 1, - annihilate_fn: ptr::null(), entries: vec::raw::to_ptr([ ModEntry { name: mod_name1.with_ref(|buf| buf), log_level: &mut level2}, ModEntry { name: mod_name2.with_ref(|buf| buf), log_level: &mut level3}, @@ -210,7 +208,6 @@ fn iter_crate_map_follow_children() { let child_crate1 = CrateMapT2 { version: 1, - annihilate_fn: ptr::null(), entries: vec::raw::to_ptr([ ModEntry { name: "t::f1".to_c_str().with_ref(|buf| buf), log_level: &mut 1}, ModEntry { name: ptr::null(), log_level: ptr::mut_null()} @@ -220,7 +217,7 @@ fn iter_crate_map_follow_children() { let child_crate1_ptr: *CrateMap = transmute(&child_crate1); let root_crate = CrateMapT2 { - version: 1, annihilate_fn: ptr::null(), + version: 1, entries: vec::raw::to_ptr([ ModEntry { name: "t::f1".to_c_str().with_ref(|buf| buf), log_level: &mut 0}, ModEntry { name: ptr::null(), log_level: ptr::mut_null()} |
