| 90 | } |
| 91 | |
| 92 | bool TypeEnvironment::typeEquals(Type _lhs, Type _rhs) const |
| 93 | { |
| 94 | return std::visit(util::GenericVisitor{ |
| 95 | [&](TypeVariable _left, TypeVariable _right) { |
| 96 | if (_left.index() == _right.index()) |
| 97 | { |
| 98 | solAssert(_left.sort() == _right.sort()); |
| 99 | return true; |
| 100 | } |
| 101 | return false; |
| 102 | }, |
| 103 | [&](TypeConstant _left, TypeConstant _right) { |
| 104 | if (_left.constructor != _right.constructor) |
| 105 | return false; |
| 106 | if (_left.arguments.size() != _right.arguments.size()) |
| 107 | return false; |
| 108 | for (auto&& [left, right]: ranges::zip_view(_left.arguments, _right.arguments)) |
| 109 | if (!typeEquals(left, right)) |
| 110 | return false; |
| 111 | return true; |
| 112 | }, |
| 113 | [&](auto, auto) { |
| 114 | return false; |
| 115 | } |
| 116 | }, resolve(_lhs), resolve(_rhs)); |
| 117 | } |
| 118 | |
| 119 | |
| 120 | bool TypeEnvironment::isFixedTypeVar(Type const& _typeVar) const |
no test coverage detected