summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2019-11-24 18:10:04 +0800
committerJohn Hodge <tpg@mutabah.net>2019-11-24 18:10:04 +0800
commit93f7d8e69489f26c0bc082be2f8b7bd511e37f6d (patch)
tree7ddda586ddb87a60c7f795c9eb58c2bd150e5fc1
parentb18d4cc20311565550f0823e5c0a66884aef2925 (diff)
downloadmrust-93f7d8e69489f26c0bc082be2f8b7bd511e37f6d.tar.gz
MIR - Add comparison of terminators
-rw-r--r--src/mir/mir.cpp83
-rw-r--r--src/mir/mir.hpp4
2 files changed, 87 insertions, 0 deletions
diff --git a/src/mir/mir.cpp b/src/mir/mir.cpp
index a0def040..7538cbe1 100644
--- a/src/mir/mir.cpp
+++ b/src/mir/mir.cpp
@@ -427,6 +427,89 @@ namespace MIR {
return os;
}
+ bool operator==(const Terminator& a, const Terminator& b) {
+ if( a.tag() != b.tag() )
+ return false;
+ TU_MATCHA( (a,b), (ae,be),
+ (Incomplete,
+ ),
+ (Return,
+ ),
+ (Diverge,
+ ),
+ (Goto,
+ if( ae != be )
+ return false;
+ ),
+ (Panic,
+ if( ae.dst != be.dst )
+ return false;
+ ),
+ (If,
+ if( ae.cond != be.cond )
+ return false;
+ if( ae.bb0 != be.bb0 )
+ return false;
+ if( ae.bb1 != be.bb1 )
+ return false;
+ ),
+ (Switch,
+ if( ae.val != be.val )
+ return false;
+ if( ae.targets != be.targets )
+ return false;
+ ),
+ (SwitchValue,
+ if( ae.val != be.val )
+ return false;
+ if( ae.targets != be.targets )
+ return false;
+ if( ae.values.tag() != be.values.tag() )
+ return false;
+ TU_MATCHA( (ae.values, be.values), (ave, bve),
+ (Unsigned,
+ if( ave != bve )
+ return false;
+ ),
+ (Signed,
+ if( ave != bve )
+ return false;
+ ),
+ (String,
+ if( ave != bve )
+ return false;
+ )
+ )
+ ),
+ (Call,
+ if( ae.ret_val != be.ret_val )
+ return false;
+ TU_MATCHA( (ae.fcn, be.fcn), (afe, bfe),
+ (Value,
+ if( afe != bfe )
+ return false;
+ ),
+ (Path,
+ if( afe != bfe )
+ return false;
+ ),
+ (Intrinsic,
+ if( afe.name != bfe.name )
+ return false;
+ if( afe.params != bfe.params )
+ return false;
+ )
+ )
+ if( ae.args != be.args )
+ return false;
+ if( ae.ret_block != be.ret_block )
+ return false;
+ if( ae.panic_block != be.panic_block )
+ return false;
+ )
+ )
+ return true;
+ }
::std::ostream& operator<<(::std::ostream& os, const Statement& x)
{
TU_MATCHA( (x), (e),
diff --git a/src/mir/mir.hpp b/src/mir/mir.hpp
index f5a566e1..7388d05b 100644
--- a/src/mir/mir.hpp
+++ b/src/mir/mir.hpp
@@ -598,6 +598,10 @@ TAGGED_UNION(Terminator, Incomplete,
})
);
extern ::std::ostream& operator<<(::std::ostream& os, const Terminator& x);
+extern bool operator==(const Terminator& a, const Terminator& b);
+static inline bool operator!=(const Terminator& a, const Terminator& b) {
+ return !(a == b);
+}
enum class eDropKind {
SHALLOW,