Cleanup eq_functor
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
79d00f4d78
commit
dd74284fdc
1 changed files with 49 additions and 46 deletions
|
@ -116,8 +116,10 @@ void expr_cell::dealloc() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace expr_eq_ns {
|
|
||||||
static thread_local expr_cell_pair_set g_eq_visited;
|
class eq_functor {
|
||||||
|
expr_cell_pair_set m_eq_visited;
|
||||||
|
public:
|
||||||
bool apply(expr const & a, expr const & b) {
|
bool apply(expr const & a, expr const & b) {
|
||||||
if (eqp(a, b)) return true;
|
if (eqp(a, b)) return true;
|
||||||
if (a.hash() != b.hash()) return false;
|
if (a.hash() != b.hash()) return false;
|
||||||
|
@ -126,9 +128,9 @@ bool apply(expr const & a, expr const & b) {
|
||||||
if (is_prop(a)) return true;
|
if (is_prop(a)) return true;
|
||||||
if (is_shared(a) && is_shared(b)) {
|
if (is_shared(a) && is_shared(b)) {
|
||||||
auto p = std::make_pair(a.raw(), b.raw());
|
auto p = std::make_pair(a.raw(), b.raw());
|
||||||
if (g_eq_visited.find(p) != g_eq_visited.end())
|
if (m_eq_visited.find(p) != m_eq_visited.end())
|
||||||
return true;
|
return true;
|
||||||
g_eq_visited.insert(p);
|
m_eq_visited.insert(p);
|
||||||
}
|
}
|
||||||
switch (a.kind()) {
|
switch (a.kind()) {
|
||||||
case expr_kind::Var: lean_unreachable(); return true;
|
case expr_kind::Var: lean_unreachable(); return true;
|
||||||
|
@ -161,10 +163,11 @@ bool apply(expr const & a, expr const & b) {
|
||||||
lean_unreachable();
|
lean_unreachable();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} // namespace expr_eq
|
};
|
||||||
|
|
||||||
bool operator==(expr const & a, expr const & b) {
|
bool operator==(expr const & a, expr const & b) {
|
||||||
expr_eq_ns::g_eq_visited.clear();
|
eq_functor f;
|
||||||
return expr_eq_ns::apply(a, b);
|
return f.apply(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Low-level pretty printer
|
// Low-level pretty printer
|
||||||
|
|
Loading…
Add table
Reference in a new issue