diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-07-06 16:29:30 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-07-06 16:29:30 +0800 |
commit | c4e88b3c49736e71534c918a83956885c052beb8 (patch) | |
tree | ec829a8e30c2242cf3ac964b5edc473f2af06db7 /src/mir/mir.cpp | |
parent | 3afff6d92dd9806a6dc1e86e3dbdbf56577c6a8a (diff) | |
download | mrust-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.cpp | 34 |
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 ""; +} + |