Skip to content

Commit cf2f5c1

Browse files
committed
---
yaml --- r: 81406 b: refs/heads/snap-stage3 c: 5dd1145 h: refs/heads/master v: v3
1 parent b7e91b1 commit cf2f5c1

File tree

4 files changed

+117
-141
lines changed

4 files changed

+117
-141
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 4c6bf4872012c010f84dc7fa2cdfe87522533f89
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 9ef4463b2a7d2c41fbc1072779951b445c80f95b
4+
refs/heads/snap-stage3: 5dd1145c9b5e4ee12d6ef6d5d87bcbe0941b174b
55
refs/heads/try: 70152ff55722878cde684ee6462c14c65f2c4729
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/librustc/middle/trans/base.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ use middle::trans::glue;
5454
use middle::trans::inline;
5555
use middle::trans::llrepr::LlvmRepr;
5656
use middle::trans::machine;
57-
use middle::trans::machine::{llalign_of_min, llsize_of};
57+
use middle::trans::machine::{llalign_of_min, llsize_of, llsize_of_alloc};
5858
use middle::trans::meth;
5959
use middle::trans::monomorphize;
6060
use middle::trans::tvec;
@@ -2911,8 +2911,9 @@ pub fn decl_gc_metadata(ccx: &mut CrateContext, llmod_id: &str) {
29112911
}
29122912
}
29132913

2914-
pub fn create_module_map(ccx: &mut CrateContext) -> (ValueRef, uint) {
2915-
let elttype = Type::struct_([ccx.int_type, ccx.int_type], false);
2914+
pub fn create_module_map(ccx: &mut CrateContext) -> (ValueRef, uint, uint) {
2915+
let str_slice_type = Type::struct_([Type::i8p(), ccx.int_type], false);
2916+
let elttype = Type::struct_([str_slice_type, ccx.int_type], false);
29162917
let maptype = Type::array(&elttype, ccx.module_data.len() as u64);
29172918
let map = do "_rust_mod_map".with_c_str |buf| {
29182919
unsafe {
@@ -2931,17 +2932,18 @@ pub fn create_module_map(ccx: &mut CrateContext) -> (ValueRef, uint) {
29312932
}
29322933

29332934
for key in keys.iter() {
2934-
let val = *ccx.module_data.find_equiv(key).unwrap();
2935-
let s_const = C_cstr(ccx, *key);
2936-
let s_ptr = p2i(ccx, s_const);
2937-
let v_ptr = p2i(ccx, val);
2938-
let elt = C_struct([s_ptr, v_ptr]);
2939-
elts.push(elt);
2935+
let val = *ccx.module_data.find_equiv(key).unwrap();
2936+
let v_ptr = p2i(ccx, val);
2937+
let elt = C_struct([
2938+
C_estr_slice(ccx, *key),
2939+
v_ptr
2940+
]);
2941+
elts.push(elt);
29402942
}
29412943
unsafe {
29422944
llvm::LLVMSetInitializer(map, C_array(elttype, elts));
29432945
}
2944-
return (map, keys.len());
2946+
return (map, keys.len(), llsize_of_alloc(ccx, elttype));
29452947
}
29462948

29472949

@@ -3003,17 +3005,19 @@ pub fn fill_crate_map(ccx: &mut CrateContext, map: ValueRef) {
30033005
lib::llvm::SetLinkage(vec_elements, lib::llvm::InternalLinkage);
30043006

30053007
llvm::LLVMSetInitializer(vec_elements, C_array(ccx.int_type, subcrates));
3006-
let (mod_map, mod_count) = create_module_map(ccx);
3008+
let (mod_map, mod_count, mod_struct_size) = create_module_map(ccx);
30073009

30083010
llvm::LLVMSetInitializer(map, C_struct(
30093011
[C_i32(1),
30103012
C_struct([
30113013
p2i(ccx, mod_map),
3012-
C_int(ccx, (mod_count * 16) as int)
3014+
// byte size of the module map array, an entry consists of two integers
3015+
C_int(ccx, ((mod_count * mod_struct_size) as int))
30133016
]),
30143017
C_struct([
30153018
p2i(ccx, vec_elements),
3016-
C_int(ccx, (subcrates.len() * 8) as int)
3019+
// byte size of the subcrates array, an entry consists of an integer
3020+
C_int(ccx, (subcrates.len() * llsize_of_alloc(ccx, ccx.int_type)) as int)
30173021
])
30183022
]));
30193023
}

branches/snap-stage3/src/libstd/rt/crate_map.rs

Lines changed: 54 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#[cfg(not(stage0))] use cast::transmute;
1212
use container::MutableSet;
1313
use hashmap::HashSet;
14-
use libc::c_char;
1514
use option::{Some, None};
1615
use vec::ImmutableVector;
1716

@@ -29,19 +28,19 @@ extern {
2928
static CRATE_MAP: CrateMap<'static>;
3029
}
3130

32-
pub struct ModEntry {
33-
name: *c_char,
31+
pub struct ModEntry<'self> {
32+
name: &'self str,
3433
log_level: *mut u32
3534
}
3635

3736
pub struct CrateMapV0<'self> {
38-
entries: &'self [ModEntry],
37+
entries: &'self [ModEntry<'self>],
3938
children: &'self [&'self CrateMap<'self>]
4039
}
4140

4241
pub struct CrateMap<'self> {
4342
version: i32,
44-
entries: &'self [ModEntry],
43+
entries: &'self [ModEntry<'self>],
4544
/// a dynamically sized struct, where all pointers to children are listed adjacent
4645
/// to the struct, terminated with NULL
4746
children: &'self [&'self CrateMap<'self>]
@@ -79,7 +78,7 @@ fn version(crate_map: &CrateMap) -> i32 {
7978

8079
#[cfg(not(stage0))]
8180
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>]) {
8382
match version(crate_map) {
8483
0 => {
8584
unsafe {
@@ -127,34 +126,31 @@ pub fn iter_crate_map<'a>(crate_map: &'a CrateMap<'a>, f: &fn(&ModEntry)) {
127126

128127
#[cfg(test)]
129128
mod tests {
130-
use c_str::ToCStr;
131-
use cast::transmute;
132129
use rt::crate_map::{CrateMap, ModEntry, iter_crate_map};
133130

134131
#[test]
135132
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;
136152
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| {
158154
assert!(*entry.log_level == 3);
159155
cnt += 1;
160156
}
@@ -164,38 +160,36 @@ mod tests {
164160

165161
#[test]
166162
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;
167191
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| {
199193
assert!(*entry.log_level == cnt);
200194
cnt += 1;
201195
}

0 commit comments

Comments
 (0)