Skip to content

Commit c9f2d9f

Browse files
nikomatsakisbrson
authored andcommitted
---
yaml --- r: 5928 b: refs/heads/master c: e590869 h: refs/heads/master v: v3
1 parent 34a6dc5 commit c9f2d9f

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 548c92df9c83ea7e523a235830ca95b53fb3c54e
2+
refs/heads/master: e590869c8ff07a0b022369e700dc506f425dddf2

trunk/src/lib/sys.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
//export rustrt;
33
//export size_of;
44

5+
tag type_desc {
6+
type_desc(@type_desc);
7+
}
8+
59
native "rust" mod rustrt {
610
// Explicitly re-export native stuff we want to be made
711
// available outside this crate. Otherwise it's
@@ -12,6 +16,11 @@ native "rust" mod rustrt {
1216
fn refcount<T>(t: @T) -> uint;
1317
fn do_gc();
1418
fn unsupervise();
19+
fn get_type_desc<T>() -> *type_desc;
20+
}
21+
22+
fn get_type_desc<T>() -> *type_desc {
23+
ret rustrt::get_type_desc::<T>();
1524
}
1625

1726
fn last_os_error() -> str {

trunk/src/lib/vec.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,27 @@
22

33
import option::{some, none};
44
import uint::next_power_of_two;
5-
import ptr::addr_of;
5+
import ptr::{addr_of, null};
66

77
native "rust-intrinsic" mod rusti {
88
fn vec_len<T>(&&v: [mutable? T]) -> uint;
99
}
1010

11-
native "rust" mod rustrt {
12-
fn vec_reserve_shared<T>(&v: [mutable? T], n: uint);
13-
fn vec_from_buf_shared<T>(ptr: *T, count: uint) -> [T];
11+
native "c-stack-cdecl" mod rustrt {
12+
fn vec_reserve_shared<T>(dummy: *util::void,
13+
t: *sys::type_desc,
14+
&v: [mutable? T],
15+
n: uint);
16+
fn vec_from_buf_shared<T>(dummy: *util::void,
17+
t: *sys::type_desc,
18+
ptr: *T,
19+
count: uint) -> [T];
1420
}
1521

1622
/// Reserves space for `n` elements in the given vector.
1723
fn reserve<@T>(&v: [mutable? T], n: uint) {
18-
rustrt::vec_reserve_shared(v, n);
24+
log_err("reserve: v=", ptr::addr_of(v), " n=", n);
25+
rustrt::vec_reserve_shared(null(), sys::get_type_desc::<T>(), v, n);
1926
}
2027

2128
pure fn len<T>(v: [mutable? T]) -> uint { unchecked { rusti::vec_len(v) } }
@@ -352,7 +359,8 @@ mod unsafe {
352359
type vec_repr = {mutable fill: uint, mutable alloc: uint, data: u8};
353360

354361
unsafe fn from_buf<@T>(ptr: *T, elts: uint) -> [T] {
355-
ret rustrt::vec_from_buf_shared(ptr, elts);
362+
ret rustrt::vec_from_buf_shared(null(), sys::get_type_desc::<T>(),
363+
ptr, elts);
356364
}
357365

358366
unsafe fn set_len<@T>(&v: [T], new_len: uint) {

0 commit comments

Comments
 (0)