summaryrefslogtreecommitdiff
path: root/src/hir
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-07-06 16:29:30 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-07-06 16:29:30 +0800
commitc4e88b3c49736e71534c918a83956885c052beb8 (patch)
treeec829a8e30c2242cf3ac964b5edc473f2af06db7 /src/hir
parent3afff6d92dd9806a6dc1e86e3dbdbf56577c6a8a (diff)
downloadmrust-c4e88b3c49736e71534c918a83956885c052beb8.tar.gz
MIR - Add (but don't use) a SwitchValue terminator
Diffstat (limited to 'src/hir')
-rw-r--r--src/hir/serialise.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/hir/serialise.cpp b/src/hir/serialise.cpp
index cddbf0b8..78efe261 100644
--- a/src/hir/serialise.cpp
+++ b/src/hir/serialise.cpp
@@ -77,6 +77,9 @@ namespace {
m_out.write_count(e.first);
serialise(e.second);
}
+ //void serialise(::MIR::BasicBlockId val) {
+ // m_out.write_count(val);
+ //}
void serialise_type(const ::HIR::TypeRef& ty)
{
@@ -531,6 +534,12 @@ namespace {
for(auto t : e.targets)
m_out.write_count(t);
),
+ (SwitchValue,
+ serialise(e.val);
+ m_out.write_count(e.def_target);
+ serialise_vec(e.targets);
+ serialise(e.values);
+ ),
(Call,
m_out.write_count(e.ret_block);
m_out.write_count(e.panic_block);
@@ -540,6 +549,21 @@ namespace {
)
)
}
+ void serialise(const ::MIR::SwitchValues& sv)
+ {
+ m_out.write_tag( static_cast<int>(sv.tag()) );
+ TU_MATCHA( (sv), (e),
+ (Unsigned,
+ serialise_vec(e);
+ ),
+ (Signed,
+ serialise_vec(e);
+ ),
+ (String,
+ serialise_vec(e);
+ )
+ )
+ }
void serialise(const ::MIR::CallTarget& ct)
{
m_out.write_tag( static_cast<int>(ct.tag()) );