@@ -314,7 +314,6 @@ class arena {
314
314
inline T *alloc (size_t count = 1 ) {
315
315
// FIXME: align
316
316
size_t sz = count * sizeof (T);
317
- // DPRINT("size is %lu\n", sz);
318
317
T *rv = (T *)ptr;
319
318
ptr += sz;
320
319
if (ptr > &data[ARENA_SIZE]) {
@@ -366,8 +365,6 @@ struct type_param {
366
365
template<typename T>
367
366
void
368
367
ctxt<T>::walk(bool align) {
369
- fprintf (stderr, " walking %d\n " , *sp);
370
-
371
368
switch (*sp++) {
372
369
case SHAPE_U8: WALK_NUMBER (uint8_t ); break ;
373
370
case SHAPE_U16: WALK_NUMBER (uint16_t ); break ;
@@ -778,7 +775,7 @@ size_of::compute_tag_size(tag_info &tinfo) {
778
775
const uint8_t *variant_ptr = variant_ptr_and_end.first ;
779
776
const uint8_t *variant_end = variant_ptr_and_end.second ;
780
777
781
- size_of sub (*this , variant_ptr, params, NULL );
778
+ size_of sub (*this , variant_ptr, tinfo. params , NULL );
782
779
783
780
// Compute the size of this variant.
784
781
size_align variant_sa;
@@ -903,7 +900,11 @@ class data : public ctxt< data<T,U> > {
903
900
}
904
901
905
902
void walk_var (bool align, uint8_t param_index) {
906
- static_cast <T *>(this )->walk_var (align, param_index);
903
+ const type_param *param = &this ->params [param_index];
904
+ T sub (*static_cast <T *>(this ), param->shape , param->params ,
905
+ param->tables );
906
+ sub.walk (align);
907
+ static_cast <T *>(this )->walk_subcontext (align, sub);
907
908
}
908
909
909
910
template <typename W>
@@ -947,7 +948,6 @@ data<T,U>::get_ivec_data_range(uint8_t *dp) {
947
948
template <typename T,typename U>
948
949
std::pair<ptr_pair,ptr_pair>
949
950
data<T,U>::get_ivec_data_range(ptr_pair &dp) {
950
- fprintf (stderr, " get_ivec_data_range %p/%p\n " , dp.fst , dp.snd );
951
951
std::pair<uint8_t *,uint8_t *> fst = get_ivec_data_range (dp.fst );
952
952
std::pair<uint8_t *,uint8_t *> snd = get_ivec_data_range (dp.snd );
953
953
ptr_pair start (fst.first , snd.first );
@@ -1007,12 +1007,19 @@ class copy : public data<copy,uint8_t *> {
1007
1007
// Structural comparison glue.
1008
1008
1009
1009
class cmp : public data <cmp,ptr_pair> {
1010
+ friend class data <cmp,ptr_pair>;
1011
+
1010
1012
private:
1011
1013
template <typename T>
1012
1014
void cmp_number (const data_pair<T> &nums) {
1013
1015
result = (nums.fst < nums.snd ) ? -1 : (nums.fst == nums.snd ) ? 0 : 1 ;
1014
1016
}
1015
1017
1018
+ void walk_subcontext (bool align, cmp &sub) {
1019
+ sub.walk (align);
1020
+ result = sub.result ;
1021
+ }
1022
+
1016
1023
public:
1017
1024
int result;
1018
1025
@@ -1058,31 +1065,19 @@ class cmp : public data<cmp,ptr_pair> {
1058
1065
1059
1066
template <>
1060
1067
void cmp::cmp_number<int32_t >(const data_pair<int32_t > &nums) {
1061
- fprintf (stderr, " cmp %d/%d\n " , nums.fst , nums.snd );
1062
1068
result = (nums.fst < nums.snd ) ? -1 : (nums.fst == nums.snd ) ? 0 : 1 ;
1063
1069
}
1064
1070
1065
1071
void
1066
1072
cmp::walk_ivec (bool align, bool is_pod, size_align &elem_sa) {
1067
1073
std::pair<ptr_pair,ptr_pair> data_range = get_ivec_data_range (dp);
1068
1074
1069
- DPRINT (" walk_ivec %p/%p\n " , data_range.first .fst , data_range.first .snd );
1070
-
1071
1075
cmp sub (*this , data_range.first );
1072
1076
ptr_pair data_end = data_range.second ;
1073
1077
while (!result && sub.dp < data_end) {
1074
- DPRINT (" walk_ivec elem %p/%p %p/%p\n " , sub.dp .fst , sub.dp .snd ,
1075
- data_end.fst , data_end.snd );
1076
- DPRINTCX (&sub);
1077
- DPRINT (" \n end\n " );
1078
-
1079
1078
sub.walk_reset (align);
1080
- DPRINT (" result = %d\n " , sub.result );
1081
1079
result = sub.result ;
1082
1080
align = true ;
1083
-
1084
- DPRINT (" walk_ivec after elem %p/%p %p/%p\n " , sub.dp .fst , sub.dp .snd ,
1085
- data_end.fst , data_end.snd );
1086
1081
}
1087
1082
1088
1083
if (!result) {
@@ -1130,7 +1125,7 @@ void
1130
1125
cmp::walk_variant (bool align, tag_info &tinfo, uint32_t variant_id,
1131
1126
const std::pair<const uint8_t *,const uint8_t *>
1132
1127
variant_ptr_and_end) {
1133
- cmp sub (*this , variant_ptr_and_end.first );
1128
+ cmp sub (*this , variant_ptr_and_end.first , tinfo. params );
1134
1129
1135
1130
const uint8_t *variant_end = variant_ptr_and_end.second ;
1136
1131
while (!result && sub.sp < variant_end) {
@@ -1146,8 +1141,6 @@ extern "C" void
1146
1141
upcall_cmp_type (int8_t *result, rust_task *task, type_desc *tydesc,
1147
1142
const type_desc **subtydescs, uint8_t *data_0,
1148
1143
uint8_t *data_1, uint8_t cmp_type) {
1149
- fprintf (stderr, " cmp_type\n " );
1150
-
1151
1144
shape::arena arena;
1152
1145
shape::type_param *params = shape::type_param::make (tydesc, arena);
1153
1146
shape::cmp cmp (task, tydesc->shape , params, tydesc->shape_tables , data_0,
0 commit comments