@@ -8,17 +8,18 @@ export recv;
8
8
export chan;
9
9
export port;
10
10
11
- native "rust " mod rustrt {
11
+ native "c-stack-cdecl " mod rustrt {
12
12
type void ;
13
13
type rust_port ;
14
14
15
- fn chan_id_send < ~T > ( target_task : task:: task , target_port : port_id ,
15
+ fn chan_id_send < ~T > ( unused_task : * void , t : * sys:: type_desc ,
16
+ target_task : task:: task , target_port : port_id ,
16
17
-data : T ) ;
17
18
18
- fn new_port ( unit_sz : uint ) -> * rust_port ;
19
- fn del_port ( po : * rust_port ) ;
20
- fn drop_port ( po : * rust_port ) ;
21
- fn get_port_id ( po : * rust_port ) -> port_id ;
19
+ fn new_port ( unused_task : * void , unit_sz : uint ) -> * rust_port ;
20
+ fn del_port ( unused_task : * void , po : * rust_port ) ;
21
+ fn drop_port ( unused_task : * void , po : * rust_port ) ;
22
+ fn get_port_id ( unused_task : * void , po : * rust_port ) -> port_id ;
22
23
}
23
24
24
25
native "rust-intrinsic" mod rusti {
@@ -32,23 +33,28 @@ type port_id = int;
32
33
tag chan<~T > { chan_t ( task:: task, port_id) ; }
33
34
34
35
resource port_ptr( po: * rustrt:: rust_port) {
35
- rustrt:: drop_port ( po) ;
36
- rustrt:: del_port ( po) ;
36
+ rustrt:: drop_port ( ptr :: null ( ) , po) ;
37
+ rustrt:: del_port ( ptr :: null ( ) , po) ;
37
38
}
38
39
39
40
tag port<~T > { port_t ( @port_ptr) ; }
40
41
41
42
fn send < ~T > ( ch : chan < T > , -data : T ) {
42
43
let chan_t( t, p) = ch;
43
- rustrt:: chan_id_send ( t, p, data) ;
44
+ rustrt:: chan_id_send ( ptr:: null ( ) , sys:: get_type_desc :: < T > ( ) , t, p, data) ;
45
+ task:: yield ( ) ;
44
46
}
45
47
46
48
fn port < ~T > ( ) -> port < T > {
47
- port_t ( @port_ptr ( rustrt:: new_port ( sys:: size_of :: < T > ( ) ) ) )
49
+ let p = rustrt:: new_port ( ptr:: null ( ) , sys:: size_of :: < T > ( ) ) ;
50
+ ret port_t( @port_ptr ( p) ) ;
48
51
}
49
52
50
- fn recv < ~T > ( p : port < T > ) -> T { ret rusti:: recv ( * * * p) }
53
+ fn recv < ~T > ( p : port < T > ) -> T {
54
+ ret rusti:: recv ( * * * p) ;
55
+ }
51
56
52
57
fn chan < ~T > ( p : port < T > ) -> chan < T > {
53
- chan_t ( task:: get_task_id ( ) , rustrt:: get_port_id ( * * * p) )
58
+ let id = rustrt:: get_port_id ( ptr:: null ( ) , * * * p) ;
59
+ ret chan_t( task:: get_task_id ( ) , id) ;
54
60
}
0 commit comments