33
44mod intrinsic {
55
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+ } ;
821
922 iface ty_visitor {
1023 fn visit_bot ( ) -> bool ;
@@ -35,50 +48,37 @@ mod intrinsic {
3548 fn visit_estr_slice ( ) -> bool ;
3649 fn visit_estr_fixed ( sz : uint ) -> bool ;
3750
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 ;
5964
6065 fn visit_enter_rec ( n_fields : uint ,
6166 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 ;
6669 fn visit_leave_rec ( n_fields : uint ,
6770 sz : uint , align : uint ) -> bool ;
6871
6972 fn visit_enter_class ( n_fields : uint ,
7073 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 ;
7576 fn visit_leave_class ( n_fields : uint ,
7677 sz : uint , align : uint ) -> bool ;
7778
7879 fn visit_enter_tup ( n_fields : uint ,
7980 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 ;
8282 fn visit_leave_tup ( n_fields : uint ,
8383 sz : uint , align : uint ) -> bool ;
8484
@@ -88,8 +88,7 @@ mod intrinsic {
8888 disr_val : int ,
8989 n_fields : uint ,
9090 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 ;
9392 fn visit_leave_enum_variant ( variant : uint ,
9493 disr_val : int ,
9594 n_fields : uint ,
@@ -99,29 +98,25 @@ mod intrinsic {
9998
10099 fn visit_enter_fn ( purity : uint , proto : uint ,
101100 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 ;
106103 fn visit_leave_fn ( purity : uint , proto : uint ,
107104 n_inputs : uint , retstyle : uint ) -> bool ;
108105
109106 fn visit_trait ( ) -> bool ;
110- fn visit_enter_res ( ) -> bool ;
111- fn visit_leave_res ( ) -> bool ;
112107 fn visit_var ( ) -> bool ;
113108 fn visit_var_integral ( ) -> bool ;
114109 fn visit_param ( i : uint ) -> bool ;
115110 fn visit_self ( ) -> bool ;
116111 fn visit_type ( ) -> bool ;
117112 fn visit_opaque_box ( ) -> bool ;
118- fn visit_enter_constr ( ) -> bool ;
119- fn visit_leave_constr ( ) -> bool ;
113+ fn visit_constr ( inner : * tydesc ) -> bool ;
120114 fn visit_closure_ptr ( ck : uint ) -> bool ;
121115 }
122116
123117 #[ abi = "rust-intrinsic" ]
124118 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 ) ;
126121 }
127122}
0 commit comments