summaryrefslogtreecommitdiff
path: root/src/mir/mir.cpp
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/mir/mir.cpp
parent3afff6d92dd9806a6dc1e86e3dbdbf56577c6a8a (diff)
downloadmrust-c4e88b3c49736e71534c918a83956885c052beb8.tar.gz
MIR - Add (but don't use) a SwitchValue terminator
Diffstat (limited to 'src/mir/mir.cpp')
-rw-r--r--src/mir/mir.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mir/mir.cpp b/src/mir/mir.cpp
index 3f7057ff..09e978f9 100644
--- a/src/mir/mir.cpp
+++ b/src/mir/mir.cpp
@@ -419,6 +419,24 @@ namespace MIR {
os << j << " => bb" << e.targets[j] << ", ";
os << ")";
),
+ (SwitchValue,
+ os << "SwitchValue( " << e.val << " : ";
+ TU_MATCHA( (e.values), (ve),
+ (Unsigned,
+ for(unsigned int j = 0; j < e.targets.size(); j ++)
+ os << ve[j] << " => bb" << e.targets[j] << ", ";
+ ),
+ (Signed,
+ for(unsigned int j = 0; j < e.targets.size(); j ++)
+ os << (ve[j] >= 0 ? "+" : "") << ve[j] << " => bb" << e.targets[j] << ", ";
+ ),
+ (String,
+ for(unsigned int j = 0; j < e.targets.size(); j ++)
+ os << "\"" << ve[j] << "\" => bb" << e.targets[j] << ", ";
+ )
+ )
+ os << "else bb" << e.def_target << ")";
+ ),
(Call,
os << "Call( " << e.ret_val << " = ";
TU_MATCHA( (e.fcn), (e2),
@@ -604,3 +622,19 @@ namespace MIR {
throw "";
}
+::MIR::SwitchValues MIR::SwitchValues::clone() const
+{
+ TU_MATCHA( (*this), (ve),
+ (Unsigned,
+ return ve;
+ ),
+ (Signed,
+ return ve;
+ ),
+ (String,
+ return ve;
+ )
+ )
+ throw "";
+}
+