9
9
// except according to those terms.
10
10
11
11
12
- use libc:: { c_void, c_char} ;
12
+ use libc:: c_char;
13
+ #[ cfg( stage0) ] use libc:: c_void;
13
14
use ptr;
14
15
use ptr:: RawPtr ;
15
16
use vec;
@@ -39,6 +40,7 @@ struct CrateMapV0 {
39
40
children: [ * CrateMap , ..1 ]
40
41
}
41
42
43
+ #[ cfg( stage0) ]
42
44
struct CrateMap {
43
45
version : i32 ,
44
46
annihilate_fn : * c_void ,
@@ -48,6 +50,15 @@ struct CrateMap {
48
50
children: [ * CrateMap , ..1 ]
49
51
}
50
52
53
+ #[ cfg( not( stage0) ) ]
54
+ struct CrateMap {
55
+ version : i32 ,
56
+ entries : * ModEntry ,
57
+ /// a dynamically sized struct, where all pointers to children are listed adjacent
58
+ /// to the struct, terminated with NULL
59
+ children: [ * CrateMap , ..1 ]
60
+ }
61
+
51
62
#[ cfg( not( windows) ) ]
52
63
pub fn get_crate_map ( ) -> * CrateMap {
53
64
& ' static CRATE_MAP as * CrateMap
@@ -79,15 +90,6 @@ unsafe fn version(crate_map: *CrateMap) -> i32 {
79
90
}
80
91
}
81
92
82
- /// Returns a pointer to the annihilate function of the CrateMap
83
- pub unsafe fn annihilate_fn ( crate_map : * CrateMap ) -> * c_void {
84
- match version ( crate_map) {
85
- 0 => return ptr:: null ( ) ,
86
- 1 => return ( * crate_map) . annihilate_fn ,
87
- _ => fail ! ( "Unknown crate map version!" )
88
- }
89
- }
90
-
91
93
unsafe fn entries ( crate_map : * CrateMap ) -> * ModEntry {
92
94
match version ( crate_map) {
93
95
0 => {
@@ -145,7 +147,6 @@ fn iter_crate_map_duplicates() {
145
147
146
148
struct CrateMapT3 {
147
149
version : i32 ,
148
- annihilate_fn : * c_void ,
149
150
entries : * ModEntry ,
150
151
children: [ * CrateMap , ..3 ]
151
152
}
@@ -160,13 +161,12 @@ fn iter_crate_map_duplicates() {
160
161
] ;
161
162
let child_crate = CrateMap {
162
163
version : 1 ,
163
- annihilate_fn : ptr:: null ( ) ,
164
164
entries : vec:: raw:: to_ptr ( entries) ,
165
165
children : [ ptr:: null ( ) ]
166
166
} ;
167
167
168
168
let root_crate = CrateMapT3 {
169
- version : 1 , annihilate_fn : ptr :: null ( ) ,
169
+ version : 1 ,
170
170
entries : vec:: raw:: to_ptr ( [ ModEntry { name : ptr:: null ( ) , log_level : ptr:: mut_null ( ) } ] ) ,
171
171
children : [ & child_crate as * CrateMap , & child_crate as * CrateMap , ptr:: null ( ) ]
172
172
} ;
@@ -187,7 +187,6 @@ fn iter_crate_map_follow_children() {
187
187
188
188
struct CrateMapT2 {
189
189
version : i32 ,
190
- annihilate_fn : * c_void ,
191
190
entries : * ModEntry ,
192
191
children: [ * CrateMap , ..2 ]
193
192
}
@@ -199,7 +198,6 @@ fn iter_crate_map_follow_children() {
199
198
let mut level3: u32 = 3 ;
200
199
let child_crate2 = CrateMap {
201
200
version : 1 ,
202
- annihilate_fn : ptr:: null ( ) ,
203
201
entries : vec:: raw:: to_ptr ( [
204
202
ModEntry { name : mod_name1. with_ref ( |buf| buf) , log_level : & mut level2} ,
205
203
ModEntry { name : mod_name2. with_ref ( |buf| buf) , log_level : & mut level3} ,
@@ -210,7 +208,6 @@ fn iter_crate_map_follow_children() {
210
208
211
209
let child_crate1 = CrateMapT2 {
212
210
version : 1 ,
213
- annihilate_fn : ptr:: null ( ) ,
214
211
entries : vec:: raw:: to_ptr ( [
215
212
ModEntry { name : "t::f1" . to_c_str ( ) . with_ref ( |buf| buf) , log_level : & mut 1 } ,
216
213
ModEntry { name : ptr:: null ( ) , log_level : ptr:: mut_null ( ) }
@@ -220,7 +217,7 @@ fn iter_crate_map_follow_children() {
220
217
221
218
let child_crate1_ptr: * CrateMap = transmute ( & child_crate1) ;
222
219
let root_crate = CrateMapT2 {
223
- version : 1 , annihilate_fn : ptr :: null ( ) ,
220
+ version : 1 ,
224
221
entries : vec:: raw:: to_ptr ( [
225
222
ModEntry { name : "t::f1" . to_c_str ( ) . with_ref ( |buf| buf) , log_level : & mut 0 } ,
226
223
ModEntry { name : ptr:: null ( ) , log_level : ptr:: mut_null ( ) }
0 commit comments