Implement types_equal for Structs
This commit is contained in:
parent
b664ca8f9d
commit
4b4d3ce14b
@ -348,7 +348,8 @@ namespace AST {
|
||||
this->m_expressions[i] = handle_res(std::move(this->m_expressions[i]), res, state);
|
||||
}
|
||||
|
||||
return *expected_ty;
|
||||
this->m_ty = *expected_ty;
|
||||
return this->m_ty;
|
||||
}
|
||||
else {
|
||||
if (this->m_expressions.size() > 0) {
|
||||
@ -357,6 +358,10 @@ namespace AST {
|
||||
this->m_meta));
|
||||
return *expected_ty;
|
||||
}
|
||||
else {
|
||||
this->m_ty = *expected_ty;
|
||||
return this->m_ty;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -258,6 +258,28 @@ namespace types {
|
||||
|
||||
return types_equal(ty1->m_inner, ty2->m_inner) && ty1->m_size == ty2->m_size;
|
||||
}
|
||||
else if (type1->m_kind == TypeKind::Struct) {
|
||||
auto ty1 = dynamic_cast<StructType*>(type1.get());
|
||||
auto ty2 = dynamic_cast<StructType*>(type2.get());
|
||||
|
||||
if (ty1->m_fields.has_value() != ty2->m_fields.has_value())
|
||||
return false;
|
||||
|
||||
if (ty1->m_fields) {
|
||||
if (ty1->m_fields->size() != ty2->m_fields->size())
|
||||
return false;
|
||||
|
||||
for (int i = 0; i < static_cast<int>(ty1->m_fields->size()); i++) {
|
||||
auto field1 = (*ty1->m_fields)[i];
|
||||
auto field2 = (*ty2->m_fields)[i];
|
||||
if (!types_equal(field1.second, field2.second))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user