Skip to content

Commit 5aaafa7

Browse files
committed
adjust alignment, size of tag variant id and make it easy to
adjust in the future
1 parent cb96752 commit 5aaafa7

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

src/rt/rust_shape.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ size_of::compute_tag_size(tag_info &tinfo) {
223223
tinfo.tag_sa.set(1, 1);
224224
} else {
225225
// Add in space for the tag.
226-
tinfo.tag_sa.add(sizeof(uint32_t), alignof<uint32_t>());
226+
tinfo.tag_sa.add(sizeof(tag_variant_t), alignof<tag_align_t>());
227227
}
228228
}
229229

@@ -357,12 +357,12 @@ class cmp : public data<cmp,ptr_pair> {
357357
void walk_fn() { return cmp_two_pointers(); }
358358
void walk_obj() { return cmp_two_pointers(); }
359359

360-
void walk_tag(tag_info &tinfo, const data_pair<uint32_t> &tag_variants);
360+
void walk_tag(tag_info &tinfo, const data_pair<tag_variant_t> &tag_variants);
361361
void walk_struct(const uint8_t *end_sp);
362362
void walk_res(const rust_fn *dtor, uint16_t n_ty_params,
363363
const type_param *ty_params_sp, const uint8_t *end_sp,
364364
const data_pair<uintptr_t> &live);
365-
void walk_variant(tag_info &tinfo, uint32_t variant_id,
365+
void walk_variant(tag_info &tinfo, tag_variant_t variant_id,
366366
const std::pair<const uint8_t *,const uint8_t *>
367367
variant_ptr_and_end);
368368

@@ -394,7 +394,7 @@ cmp::walk_vec(bool is_pod, const std::pair<ptr_pair,ptr_pair> &data_range) {
394394
}
395395

396396
void
397-
cmp::walk_tag(tag_info &tinfo, const data_pair<uint32_t> &tag_variants) {
397+
cmp::walk_tag(tag_info &tinfo, const data_pair<tag_variant_t> &tag_variants) {
398398
cmp_number(tag_variants);
399399
if (result != 0)
400400
return;
@@ -417,7 +417,7 @@ cmp::walk_res(const rust_fn *dtor, uint16_t n_ty_params,
417417
}
418418

419419
void
420-
cmp::walk_variant(tag_info &tinfo, uint32_t variant_id,
420+
cmp::walk_variant(tag_info &tinfo, tag_variant_t variant_id,
421421
const std::pair<const uint8_t *,const uint8_t *>
422422
variant_ptr_and_end) {
423423
cmp sub(*this, variant_ptr_and_end.first, tinfo.params);
@@ -489,7 +489,7 @@ log::walk_vec(bool is_pod, const std::pair<ptr,ptr> &data) {
489489
}
490490

491491
void
492-
log::walk_variant(tag_info &tinfo, uint32_t variant_id,
492+
log::walk_variant(tag_info &tinfo, tag_variant_t variant_id,
493493
const std::pair<const uint8_t *,const uint8_t *>
494494
variant_ptr_and_end) {
495495
log sub(*this, variant_ptr_and_end.first, tinfo.params);

src/rt/rust_shape.h

+11-9
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525

2626
namespace shape {
2727

28+
typedef unsigned long tag_variant_t;
29+
typedef unsigned long tag_align_t;
2830

2931
// Constants
3032

@@ -234,7 +236,7 @@ class ctxt {
234236
void walk_reset();
235237

236238
std::pair<const uint8_t *,const uint8_t *>
237-
get_variant_sp(tag_info &info, uint32_t variant_id);
239+
get_variant_sp(tag_info &info, tag_variant_t variant_id);
238240

239241
protected:
240242
inline uint8_t peek() { return *sp; }
@@ -406,7 +408,7 @@ ctxt<T>::get_size_align(const uint8_t *&addr) {
406408
// the tag variant with the given ID.
407409
template<typename T>
408410
std::pair<const uint8_t *,const uint8_t *>
409-
ctxt<T>::get_variant_sp(tag_info &tinfo, uint32_t variant_id) {
411+
ctxt<T>::get_variant_sp(tag_info &tinfo, tag_variant_t variant_id) {
410412
uint16_t variant_offset = get_u16(tinfo.info_ptr +
411413
variant_id * sizeof(uint16_t));
412414
const uint8_t *variant_ptr = tables->tags + variant_offset;
@@ -816,7 +818,7 @@ class data : public ctxt< data<T,U> > {
816818
void walk_uniq_contents();
817819
void walk_fn_contents(ptr &dp);
818820
void walk_obj_contents(ptr &dp);
819-
void walk_variant(tag_info &tinfo, uint32_t variant);
821+
void walk_variant(tag_info &tinfo, tag_variant_t variant);
820822

821823
static std::pair<uint8_t *,uint8_t *> get_vec_data_range(ptr dp);
822824
static std::pair<ptr_pair,ptr_pair> get_vec_data_range(ptr_pair &dp);
@@ -901,7 +903,7 @@ data<T,U>::walk_uniq_contents() {
901903

902904
template<typename T,typename U>
903905
void
904-
data<T,U>::walk_variant(tag_info &tinfo, uint32_t variant_id) {
906+
data<T,U>::walk_variant(tag_info &tinfo, tag_variant_t variant_id) {
905907
std::pair<const uint8_t *,const uint8_t *> variant_ptr_and_end =
906908
this->get_variant_sp(tinfo, variant_id);
907909
static_cast<T *>(this)->walk_variant(tinfo, variant_id,
@@ -932,13 +934,13 @@ data<T,U>::walk_tag(tag_info &tinfo) {
932934
size_of::compute_tag_size(*this, tinfo);
933935

934936
if (tinfo.variant_count > 1)
935-
ALIGN_TO(alignof<uint32_t>());
937+
ALIGN_TO(alignof<tag_align_t>());
936938

937939
U end_dp = dp + tinfo.tag_sa.size;
938940

939-
typename U::template data<uint32_t>::t tag_variant;
941+
typename U::template data<tag_variant_t>::t tag_variant;
940942
if (tinfo.variant_count > 1)
941-
tag_variant = bump_dp<uint32_t>(dp);
943+
tag_variant = bump_dp<tag_variant_t>(dp);
942944
else
943945
tag_variant = 0;
944946

@@ -1047,7 +1049,7 @@ class log : public data<log,ptr> {
10471049
walk_vec(is_pod, get_vec_data_range(dp));
10481050
}
10491051

1050-
void walk_tag(tag_info &tinfo, uint32_t tag_variant) {
1052+
void walk_tag(tag_info &tinfo, tag_variant_t tag_variant) {
10511053
out << prefix << "tag" << tag_variant;
10521054
data<log,ptr>::walk_variant(tinfo, tag_variant);
10531055
}
@@ -1096,7 +1098,7 @@ class log : public data<log,ptr> {
10961098

10971099
void walk_struct(const uint8_t *end_sp);
10981100
void walk_vec(bool is_pod, const std::pair<ptr,ptr> &data);
1099-
void walk_variant(tag_info &tinfo, uint32_t variant_id,
1101+
void walk_variant(tag_info &tinfo, tag_variant_t variant_id,
11001102
const std::pair<const uint8_t *,const uint8_t *>
11011103
variant_ptr_and_end);
11021104
void walk_string(const std::pair<ptr,ptr> &data);

0 commit comments

Comments
 (0)