Skip to content

Commit 1f8e0fa

Browse files
committed
rt: Implement comparison of functions, objects, ports, channels, and tasks
1 parent ade998d commit 1f8e0fa

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/rt/rust_shape.cpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1031,11 +1031,25 @@ class cmp : public data<cmp,ptr_pair> {
10311031
void walk_vec(bool align, bool is_pod,
10321032
const std::pair<ptr_pair,ptr_pair> &data_range);
10331033

1034-
void walk_subcontext(bool align, cmp &sub) {
1034+
inline void walk_subcontext(bool align, cmp &sub) {
10351035
sub.walk(align);
10361036
result = sub.result;
10371037
}
10381038

1039+
inline void cmp_two_pointers(bool align) {
1040+
if (align) dp = align_to(dp, ALIGNOF(uint8_t *) * 2);
1041+
data_pair<uint8_t *> fst = bump_dp<uint8_t *>(dp);
1042+
data_pair<uint8_t *> snd = bump_dp<uint8_t *>(dp);
1043+
cmp_number(fst);
1044+
if (!result)
1045+
cmp_number(snd);
1046+
}
1047+
1048+
inline void cmp_pointer(bool align) {
1049+
if (align) dp = align_to(dp, ALIGNOF(uint8_t *));
1050+
cmp_number(bump_dp<uint8_t *>(dp));
1051+
}
1052+
10391053
template<typename T>
10401054
void cmp_number(const data_pair<T> &nums) {
10411055
result = (nums.fst < nums.snd) ? -1 : (nums.fst == nums.snd) ? 0 : 1;
@@ -1078,6 +1092,12 @@ class cmp : public data<cmp,ptr_pair> {
10781092
return walk_vec(align, is_pod, get_ivec_data_range(dp));
10791093
}
10801094

1095+
void walk_fn(bool align) { return cmp_two_pointers(align); }
1096+
void walk_obj(bool align) { return cmp_two_pointers(align); }
1097+
void walk_port(bool align) { return cmp_pointer(align); }
1098+
void walk_chan(bool align) { return cmp_pointer(align); }
1099+
void walk_task(bool align) { return cmp_pointer(align); }
1100+
10811101
void walk_tag(bool align, tag_info &tinfo,
10821102
const data_pair<uint32_t> &tag_variants);
10831103
void walk_box(bool align);

0 commit comments

Comments
 (0)