summaryrefslogtreecommitdiff
path: root/src/mir/mir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mir/mir.cpp')
-rw-r--r--src/mir/mir.cpp35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/mir/mir.cpp b/src/mir/mir.cpp
index df6e1cde..7a201f46 100644
--- a/src/mir/mir.cpp
+++ b/src/mir/mir.cpp
@@ -38,6 +38,35 @@ namespace MIR {
::std::ostream& operator<<(::std::ostream& os, const LValue& x)
{
+ TU_MATCHA( (x), (e),
+ (Variable,
+ os << "Variable(" << e << ")";
+ ),
+ (Temporary,
+ os << "Temporary(" << e.idx << ")";
+ ),
+ (Argument,
+ os << "Argument(" << e.idx << ")";
+ ),
+ (Static,
+ os << "Static(" << e << ")";
+ ),
+ (Return,
+ os << "Return";
+ ),
+ (Field,
+ os << "Field(" << e.field_index << ", " << *e.val << ")";
+ ),
+ (Deref,
+ os << "Deref(" << *e.val << ")";
+ ),
+ (Index,
+ os << "Deref(" << *e.val << ", " << *e.idx << ")";
+ ),
+ (Downcast,
+ os << "Downcast(" << e.variant_index << ", " << *e.val << ")";
+ )
+ )
return os;
}
@@ -60,16 +89,16 @@ namespace MIR {
os << "Panic(" << e.dst << ";)";
),
(If,
- os << "If( ? : " << e.bb0 << ", " << e.bb1 << ")";
+ os << "If( " << e.cond << " : " << e.bb0 << ", " << e.bb1 << ")";
),
(Switch,
- os << "Switch( ? : ";
+ os << "Switch( " << e.val << " : ";
for(unsigned int j = 0; j < e.targets.size(); j ++)
os << j << " => bb" << e.targets[j] << ", ";
os << ")";
),
(Call,
- os << "Call( ? = ?( ";
+ os << "Call( " << e.ret_val << " = " << e.fcn_val << "( ";
for(const auto& arg : e.args)
os << arg << ", ";
os << "), bb" << e.ret_block << ", bb" << e.panic_block << ")";