diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2011-08-10 14:54:29 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2011-08-10 14:57:02 -0700 |
| commit | 6affa3264b6e1bb6dec39b0393c9b0f4df9df7b4 (patch) | |
| tree | 57ade410f1835da786ea3e08acbb6760b098dcaf /src/rt/rust_shape.cpp | |
| parent | c659ba41186325f75750be5c0d3f5e8991f2077a (diff) | |
| download | rust-6affa3264b6e1bb6dec39b0393c9b0f4df9df7b4.tar.gz rust-6affa3264b6e1bb6dec39b0393c9b0f4df9df7b4.zip | |
rt: Allow tags to be logged
Diffstat (limited to 'src/rt/rust_shape.cpp')
| -rw-r--r-- | src/rt/rust_shape.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/rt/rust_shape.cpp b/src/rt/rust_shape.cpp index eb52dfbc618..7ad88f4cc4b 100644 --- a/src/rt/rust_shape.cpp +++ b/src/rt/rust_shape.cpp @@ -1239,8 +1239,12 @@ private: log(log &other, const uint8_t *in_sp, const type_param *in_params, - const rust_shape_tables *in_tables) - : data<log,ptr>(other.task, in_sp, in_params, in_tables, other.dp), + const rust_shape_tables *in_tables = NULL) + : data<log,ptr>(other.task, + in_sp, + in_params, + in_tables ? in_tables : other.tables, + other.dp), out(other.out) {} log(log &other, ptr in_dp) @@ -1259,12 +1263,15 @@ private: void walk_tag(bool align, tag_info &tinfo, uint32_t tag_variant) { out << "tag" << tag_variant; - // TODO: Print insides. + data<log,ptr>::walk_variant(align, tinfo, tag_variant); } void walk_subcontext(bool align, log &sub) { sub.walk(align); } void walk_vec(bool align, bool is_pod, const std::pair<ptr,ptr> &data); + void walk_variant(bool align, tag_info &tinfo, uint32_t variant_id, + const std::pair<const uint8_t *,const uint8_t *> + variant_ptr_and_end); template<typename T> void walk_number() { out << get_dp<T>(dp); } @@ -1323,6 +1330,27 @@ log::walk_vec(bool align, bool is_pod, const std::pair<ptr,ptr> &data) { out << "]"; } +void +log::walk_variant(bool align, tag_info &tinfo, uint32_t variant_id, + const std::pair<const uint8_t *,const uint8_t *> + variant_ptr_and_end) { + log sub(*this, variant_ptr_and_end.first, tinfo.params); + const uint8_t *variant_end = variant_ptr_and_end.second; + + bool first = true; + while (sub.sp < variant_end) { + out << (first ? "(" : ", "); + + sub.walk(align); + + align = true; + first = false; + } + + if (!first) + out << ")"; +} + } // end namespace shape extern "C" void |
