3
3
4
4
mod intrinsic {
5
5
6
- import rusti:: visit_ty;
7
- export ty_visitor, visit_ty;
6
+ import rusti:: visit_tydesc;
7
+ export ty_visitor, get_tydesc, visit_tydesc, tydesc;
8
+
9
+ // FIXME (#2712): remove this when the interface has settled and the
10
+ // version in sys is no longer present.
11
+ fn get_tydesc < T > ( ) -> * tydesc {
12
+ rusti:: get_tydesc :: < T > ( ) as * tydesc
13
+ }
14
+
15
+ enum tydesc = {
16
+ first_param: * * u8 ,
17
+ size: uint,
18
+ align: uint
19
+ // Remaining fields not listed
20
+ } ;
8
21
9
22
iface ty_visitor {
10
23
fn visit_bot ( ) -> bool ;
@@ -35,50 +48,37 @@ mod intrinsic {
35
48
fn visit_estr_slice ( ) -> bool ;
36
49
fn visit_estr_fixed ( sz : uint ) -> bool ;
37
50
38
- fn visit_enter_box ( mtbl : uint ) -> bool ;
39
- fn visit_leave_box ( mtbl : uint ) -> bool ;
40
- fn visit_enter_uniq ( mtbl : uint ) -> bool ;
41
- fn visit_leave_uniq ( mtbl : uint ) -> bool ;
42
- fn visit_enter_ptr ( mtbl : uint ) -> bool ;
43
- fn visit_leave_ptr ( mtbl : uint ) -> bool ;
44
- fn visit_enter_rptr ( mtbl : uint ) -> bool ;
45
- fn visit_leave_rptr ( mtbl : uint ) -> bool ;
46
-
47
- fn visit_enter_vec ( mtbl : uint ) -> bool ;
48
- fn visit_leave_vec ( mtbl : uint ) -> bool ;
49
- fn visit_enter_evec_box ( mtbl : uint ) -> bool ;
50
- fn visit_leave_evec_box ( mtbl : uint ) -> bool ;
51
- fn visit_enter_evec_uniq ( mtbl : uint ) -> bool ;
52
- fn visit_leave_evec_uniq ( mtbl : uint ) -> bool ;
53
- fn visit_enter_evec_slice ( mtbl : uint ) -> bool ;
54
- fn visit_leave_evec_slice ( mtbl : uint ) -> bool ;
55
- fn visit_enter_evec_fixed ( mtbl : uint , n : uint ,
56
- sz : uint , align : uint ) -> bool ;
57
- fn visit_leave_evec_fixed ( mtbl : uint , n : uint ,
58
- sz : uint , align : uint ) -> bool ;
51
+ fn visit_box ( mtbl : uint , inner : * tydesc ) -> bool ;
52
+ fn visit_uniq ( mtbl : uint , inner : * tydesc ) -> bool ;
53
+ fn visit_ptr ( mtbl : uint , inner : * tydesc ) -> bool ;
54
+ fn visit_rptr ( mtbl : uint , inner : * tydesc ) -> bool ;
55
+
56
+ fn visit_vec ( mtbl : uint , inner : * tydesc ) -> bool ;
57
+ fn visit_unboxed_vec ( mtbl : uint , inner : * tydesc ) -> bool ;
58
+ fn visit_evec_box ( mtbl : uint , inner : * tydesc ) -> bool ;
59
+ fn visit_evec_uniq ( mtbl : uint , inner : * tydesc ) -> bool ;
60
+ fn visit_evec_slice ( mtbl : uint , inner : * tydesc ) -> bool ;
61
+ fn visit_evec_fixed ( n : uint , mtbl : uint ,
62
+ sz : uint , align : uint ,
63
+ inner : * tydesc ) -> bool ;
59
64
60
65
fn visit_enter_rec ( n_fields : uint ,
61
66
sz : uint , align : uint ) -> bool ;
62
- fn visit_enter_rec_field ( mtbl : uint , i : uint ,
63
- name : str /& ) -> bool ;
64
- fn visit_leave_rec_field ( mtbl : uint , i : uint ,
65
- name : str /& ) -> bool ;
67
+ fn visit_rec_field ( i : uint , name : str /& ,
68
+ mtbl : uint , inner : * tydesc ) -> bool ;
66
69
fn visit_leave_rec ( n_fields : uint ,
67
70
sz : uint , align : uint ) -> bool ;
68
71
69
72
fn visit_enter_class ( n_fields : uint ,
70
73
sz : uint , align : uint ) -> bool ;
71
- fn visit_enter_class_field ( mtbl : uint , i : uint ,
72
- name : str /& ) -> bool ;
73
- fn visit_leave_class_field ( mtbl : uint , i : uint ,
74
- name : str /& ) -> bool ;
74
+ fn visit_class_field ( i : uint , name : str /& ,
75
+ mtbl : uint , inner : * tydesc ) -> bool ;
75
76
fn visit_leave_class ( n_fields : uint ,
76
77
sz : uint , align : uint ) -> bool ;
77
78
78
79
fn visit_enter_tup ( n_fields : uint ,
79
80
sz : uint , align : uint ) -> bool ;
80
- fn visit_enter_tup_field ( i : uint ) -> bool ;
81
- fn visit_leave_tup_field ( i : uint ) -> bool ;
81
+ fn visit_tup_field ( i : uint , inner : * tydesc ) -> bool ;
82
82
fn visit_leave_tup ( n_fields : uint ,
83
83
sz : uint , align : uint ) -> bool ;
84
84
@@ -88,8 +88,7 @@ mod intrinsic {
88
88
disr_val : int ,
89
89
n_fields : uint ,
90
90
name : str /& ) -> bool ;
91
- fn visit_enter_enum_variant_field ( i : uint ) -> bool ;
92
- fn visit_leave_enum_variant_field ( i : uint ) -> bool ;
91
+ fn visit_enum_variant_field ( i : uint , inner : * tydesc ) -> bool ;
93
92
fn visit_leave_enum_variant ( variant : uint ,
94
93
disr_val : int ,
95
94
n_fields : uint ,
@@ -99,29 +98,25 @@ mod intrinsic {
99
98
100
99
fn visit_enter_fn ( purity : uint , proto : uint ,
101
100
n_inputs : uint , retstyle : uint ) -> bool ;
102
- fn visit_enter_fn_input ( i : uint , mode : uint ) -> bool ;
103
- fn visit_leave_fn_input ( i : uint , mode : uint ) -> bool ;
104
- fn visit_enter_fn_output ( retstyle : uint ) -> bool ;
105
- fn visit_leave_fn_output ( retstyle : uint ) -> bool ;
101
+ fn visit_fn_input ( i : uint , mode : uint , inner : * tydesc ) -> bool ;
102
+ fn visit_fn_output ( retstyle : uint , inner : * tydesc ) -> bool ;
106
103
fn visit_leave_fn ( purity : uint , proto : uint ,
107
104
n_inputs : uint , retstyle : uint ) -> bool ;
108
105
109
106
fn visit_trait ( ) -> bool ;
110
- fn visit_enter_res ( ) -> bool ;
111
- fn visit_leave_res ( ) -> bool ;
112
107
fn visit_var ( ) -> bool ;
113
108
fn visit_var_integral ( ) -> bool ;
114
109
fn visit_param ( i : uint ) -> bool ;
115
110
fn visit_self ( ) -> bool ;
116
111
fn visit_type ( ) -> bool ;
117
112
fn visit_opaque_box ( ) -> bool ;
118
- fn visit_enter_constr ( ) -> bool ;
119
- fn visit_leave_constr ( ) -> bool ;
113
+ fn visit_constr ( inner : * tydesc ) -> bool ;
120
114
fn visit_closure_ptr ( ck : uint ) -> bool ;
121
115
}
122
116
123
117
#[ abi = "rust-intrinsic" ]
124
118
extern mod rusti {
125
- fn visit_ty < T > ( & & tv: ty_visitor ) ;
119
+ fn get_tydesc < T > ( ) -> * ( ) ;
120
+ fn visit_tydesc ( td : * tydesc , & & tv: ty_visitor ) ;
126
121
}
127
122
}
0 commit comments