Skip to content

Commit 0d68fe0

Browse files
committed
---
yaml --- r: 4495 b: refs/heads/master c: e5533a5 h: refs/heads/master i: 4493: b4c0211 4491: 7109d4b 4487: 7788ec2 4479: b9b9568 v: v3
1 parent b58ee54 commit 0d68fe0

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

[refs]

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 0d74d22eda5f9bcf88103853b614664750538897
2+
refs/heads/master: e5533a5d5e589bad751e4af3f29dc4c65cb8958e

trunk/src/rt/rust_shape.cpp

+36-8
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,9 @@ class data : public ctxt< data<T,U> > {
851851
protected:
852852
void walk_variant(bool align, tag_info &tinfo, uint32_t variant);
853853

854+
static std::pair<uint8_t *,uint8_t *> get_evec_data_range(uint8_t *dp);
854855
static std::pair<uint8_t *,uint8_t *> get_ivec_data_range(uint8_t *dp);
856+
static std::pair<ptr_pair,ptr_pair> get_evec_data_range(ptr_pair &dp);
855857
static std::pair<ptr_pair,ptr_pair> get_ivec_data_range(ptr_pair &dp);
856858

857859
public:
@@ -920,6 +922,13 @@ data<T,U>::walk_variant(bool align, tag_info &tinfo, uint32_t variant_id) {
920922
variant_ptr_and_end);
921923
}
922924

925+
template<typename T,typename U>
926+
std::pair<uint8_t *,uint8_t *>
927+
data<T,U>::get_evec_data_range(uint8_t *dp) {
928+
rust_vec *vp = bump_dp<rust_vec *>(dp);
929+
return std::make_pair(vp->data, vp->data + vp->fill);
930+
}
931+
923932
template<typename T,typename U>
924933
std::pair<uint8_t *,uint8_t *>
925934
data<T,U>::get_ivec_data_range(uint8_t *dp) {
@@ -945,6 +954,16 @@ data<T,U>::get_ivec_data_range(uint8_t *dp) {
945954
return std::make_pair(start, end);
946955
}
947956

957+
template<typename T,typename U>
958+
std::pair<ptr_pair,ptr_pair>
959+
data<T,U>::get_evec_data_range(ptr_pair &dp) {
960+
std::pair<uint8_t *,uint8_t *> fst = get_evec_data_range(dp.fst);
961+
std::pair<uint8_t *,uint8_t *> snd = get_evec_data_range(dp.snd);
962+
ptr_pair start(fst.first, snd.first);
963+
ptr_pair end(fst.second, snd.second);
964+
return std::make_pair(start, end);
965+
}
966+
948967
template<typename T,typename U>
949968
std::pair<ptr_pair,ptr_pair>
950969
data<T,U>::get_ivec_data_range(ptr_pair &dp) {
@@ -1010,16 +1029,19 @@ class cmp : public data<cmp,ptr_pair> {
10101029
friend class data<cmp,ptr_pair>;
10111030

10121031
private:
1013-
template<typename T>
1014-
void cmp_number(const data_pair<T> &nums) {
1015-
result = (nums.fst < nums.snd) ? -1 : (nums.fst == nums.snd) ? 0 : 1;
1016-
}
1032+
void walk_vec(bool align, bool is_pod,
1033+
const std::pair<ptr_pair,ptr_pair> &data_range);
10171034

10181035
void walk_subcontext(bool align, cmp &sub) {
10191036
sub.walk(align);
10201037
result = sub.result;
10211038
}
10221039

1040+
template<typename T>
1041+
void cmp_number(const data_pair<T> &nums) {
1042+
result = (nums.fst < nums.snd) ? -1 : (nums.fst == nums.snd) ? 0 : 1;
1043+
}
1044+
10231045
public:
10241046
int result;
10251047

@@ -1048,7 +1070,14 @@ class cmp : public data<cmp,ptr_pair> {
10481070
in_dp),
10491071
result(0) {}
10501072

1051-
void walk_ivec(bool align, bool is_pod, size_align &elem_sa);
1073+
void walk_evec(bool align, bool is_pod, uint16_t sp_size) {
1074+
return walk_vec(align, is_pod, get_evec_data_range(dp));
1075+
}
1076+
1077+
void walk_ivec(bool align, bool is_pod, size_align &elem_sa) {
1078+
return walk_vec(align, is_pod, get_ivec_data_range(dp));
1079+
}
1080+
10521081
void walk_tag(bool align, tag_info &tinfo,
10531082
const data_pair<uint32_t> &tag_variants);
10541083
void walk_box(bool align);
@@ -1069,9 +1098,8 @@ void cmp::cmp_number<int32_t>(const data_pair<int32_t> &nums) {
10691098
}
10701099

10711100
void
1072-
cmp::walk_ivec(bool align, bool is_pod, size_align &elem_sa) {
1073-
std::pair<ptr_pair,ptr_pair> data_range = get_ivec_data_range(dp);
1074-
1101+
cmp::walk_vec(bool align, bool is_pod,
1102+
const std::pair<ptr_pair,ptr_pair> &data_range) {
10751103
cmp sub(*this, data_range.first);
10761104
ptr_pair data_end = data_range.second;
10771105
while (!result && sub.dp < data_end) {

0 commit comments

Comments
 (0)