11
11
#[ cfg( not( stage0) ) ] use cast:: transmute;
12
12
use container:: MutableSet ;
13
13
use hashmap:: HashSet ;
14
- use libc:: c_char;
15
14
use option:: { Some , None } ;
16
15
use vec:: ImmutableVector ;
17
16
@@ -29,19 +28,19 @@ extern {
29
28
static CRATE_MAP : CrateMap < ' static > ;
30
29
}
31
30
32
- pub struct ModEntry {
33
- name : * c_char ,
31
+ pub struct ModEntry < ' self > {
32
+ name : & ' self str ,
34
33
log_level : * mut u32
35
34
}
36
35
37
36
pub struct CrateMapV0 < ' self > {
38
- entries : & ' self [ ModEntry ] ,
37
+ entries : & ' self [ ModEntry < ' self > ] ,
39
38
children : & ' self [ & ' self CrateMap < ' self > ]
40
39
}
41
40
42
41
pub struct CrateMap < ' self > {
43
42
version : i32 ,
44
- entries : & ' self [ ModEntry ] ,
43
+ entries : & ' self [ ModEntry < ' self > ] ,
45
44
/// a dynamically sized struct, where all pointers to children are listed adjacent
46
45
/// to the struct, terminated with NULL
47
46
children : & ' self [ & ' self CrateMap < ' self > ]
@@ -79,7 +78,7 @@ fn version(crate_map: &CrateMap) -> i32 {
79
78
80
79
#[ cfg( not( stage0) ) ]
81
80
fn get_entries_and_children < ' a > ( crate_map : & ' a CrateMap < ' a > ) ->
82
- ( & ' a [ ModEntry ] , & ' a [ & ' a CrateMap < ' a > ] ) {
81
+ ( & ' a [ ModEntry < ' a > ] , & ' a [ & ' a CrateMap < ' a > ] ) {
83
82
match version ( crate_map) {
84
83
0 => {
85
84
unsafe {
@@ -127,34 +126,31 @@ pub fn iter_crate_map<'a>(crate_map: &'a CrateMap<'a>, f: &fn(&ModEntry)) {
127
126
128
127
#[ cfg( test) ]
129
128
mod tests {
130
- use c_str:: ToCStr ;
131
- use cast:: transmute;
132
129
use rt:: crate_map:: { CrateMap , ModEntry , iter_crate_map} ;
133
130
134
131
#[ test]
135
132
fn iter_crate_map_duplicates( ) {
133
+ let mut level3: u32 = 3 ;
134
+
135
+ let entries = [
136
+ ModEntry { name : "c::m1" , log_level : & mut level3} ,
137
+ ] ;
138
+
139
+ let child_crate = CrateMap {
140
+ version : 1 ,
141
+ entries : entries,
142
+ children : [ ]
143
+ } ;
144
+
145
+ let root_crate = CrateMap {
146
+ version : 1 ,
147
+ entries : [ ] ,
148
+ children : [ & child_crate, & child_crate]
149
+ } ;
150
+
151
+ let mut cnt = 0 ;
136
152
unsafe {
137
- let mod_name1 = "c::m1" . to_c_str ( ) ;
138
- let mut level3: u32 = 3 ;
139
-
140
- let entries = [
141
- ModEntry { name : mod_name1. with_ref ( |buf| buf) , log_level : & mut level3} ,
142
- ] ;
143
-
144
- let child_crate = CrateMap {
145
- version : 1 ,
146
- entries : entries,
147
- children : [ ]
148
- } ;
149
-
150
- let root_crate = CrateMap {
151
- version : 1 ,
152
- entries : [ ] ,
153
- children : [ & child_crate, & child_crate]
154
- } ;
155
-
156
- let mut cnt = 0 ;
157
- do iter_crate_map ( transmute ( & root_crate) ) |entry| {
153
+ do iter_crate_map ( & root_crate) |entry| {
158
154
assert ! ( * entry. log_level == 3 ) ;
159
155
cnt += 1 ;
160
156
}
@@ -164,38 +160,36 @@ mod tests {
164
160
165
161
#[ test]
166
162
fn iter_crate_map_follow_children ( ) {
163
+ let mut level2: u32 = 2 ;
164
+ let mut level3: u32 = 3 ;
165
+ let child_crate2 = CrateMap {
166
+ version : 1 ,
167
+ entries : [
168
+ ModEntry { name : "c::m1" , log_level : & mut level2} ,
169
+ ModEntry { name : "c::m2" , log_level : & mut level3} ,
170
+ ] ,
171
+ children : [ ]
172
+ } ;
173
+
174
+ let child_crate1 = CrateMap {
175
+ version : 1 ,
176
+ entries : [
177
+ ModEntry { name : "t::f1" , log_level : & mut 1 } ,
178
+ ] ,
179
+ children : [ & child_crate2]
180
+ } ;
181
+
182
+ let root_crate = CrateMap {
183
+ version : 1 ,
184
+ entries : [
185
+ ModEntry { name : "t::f2" , log_level : & mut 0 } ,
186
+ ] ,
187
+ children : [ & child_crate1]
188
+ } ;
189
+
190
+ let mut cnt = 0 ;
167
191
unsafe {
168
- let mod_name1 = "c::m1" . to_c_str ( ) ;
169
- let mod_name2 = "c::m2" . to_c_str ( ) ;
170
- let mut level2: u32 = 2 ;
171
- let mut level3: u32 = 3 ;
172
- let child_crate2 = CrateMap {
173
- version : 1 ,
174
- entries : [
175
- ModEntry { name : mod_name1. with_ref ( |buf| buf) , log_level : & mut level2} ,
176
- ModEntry { name : mod_name2. with_ref ( |buf| buf) , log_level : & mut level3} ,
177
- ] ,
178
- children : [ ]
179
- } ;
180
-
181
- let child_crate1 = CrateMap {
182
- version : 1 ,
183
- entries : [
184
- ModEntry { name : "t::f1" . to_c_str ( ) . with_ref ( |buf| buf) , log_level : & mut 1 } ,
185
- ] ,
186
- children : [ & child_crate2]
187
- } ;
188
-
189
- let root_crate = CrateMap {
190
- version : 1 ,
191
- entries : [
192
- ModEntry { name : "t::f1" . to_c_str ( ) . with_ref ( |buf| buf) , log_level : & mut 0 } ,
193
- ] ,
194
- children : [ & child_crate1]
195
- } ;
196
-
197
- let mut cnt = 0 ;
198
- do iter_crate_map ( transmute ( & root_crate) ) |entry| {
192
+ do iter_crate_map ( & root_crate) |entry| {
199
193
assert ! ( * entry. log_level == cnt) ;
200
194
cnt += 1 ;
201
195
}
0 commit comments