@@ -139,73 +139,6 @@ ASR::Module_t* load_module(Allocator &al, SymbolTable *symtab,
139
139
return mod2;
140
140
}
141
141
142
- bool types_equal (const ASR::ttype_t &a, const ASR::ttype_t &b) {
143
- // TODO: If anyone of the input or argument is derived type then
144
- // add support for checking member wise types and do not compare
145
- // directly. From stdlib_string len(pattern) error.
146
- if (b.type == ASR::ttypeType::Derived || b.type == ASR::ttypeType::Class) {
147
- return true ;
148
- }
149
- if (a.type == b.type ) {
150
- // TODO: check dims
151
- // TODO: check all types
152
- switch (a.type ) {
153
- case (ASR::ttypeType::Integer) : {
154
- ASR::Integer_t *a2 = ASR::down_cast<ASR::Integer_t>(&a);
155
- ASR::Integer_t *b2 = ASR::down_cast<ASR::Integer_t>(&b);
156
- if (a2->m_kind == b2->m_kind ) {
157
- return true ;
158
- } else {
159
- return false ;
160
- }
161
- break ;
162
- }
163
- case (ASR::ttypeType::Real) : {
164
- ASR::Real_t *a2 = ASR::down_cast<ASR::Real_t>(&a);
165
- ASR::Real_t *b2 = ASR::down_cast<ASR::Real_t>(&b);
166
- if (a2->m_kind == b2->m_kind ) {
167
- return true ;
168
- } else {
169
- return false ;
170
- }
171
- break ;
172
- }
173
- case (ASR::ttypeType::Complex) : {
174
- ASR::Complex_t *a2 = ASR::down_cast<ASR::Complex_t>(&a);
175
- ASR::Complex_t *b2 = ASR::down_cast<ASR::Complex_t>(&b);
176
- if (a2->m_kind == b2->m_kind ) {
177
- return true ;
178
- } else {
179
- return false ;
180
- }
181
- break ;
182
- }
183
- case (ASR::ttypeType::Logical) : {
184
- ASR::Logical_t *a2 = ASR::down_cast<ASR::Logical_t>(&a);
185
- ASR::Logical_t *b2 = ASR::down_cast<ASR::Logical_t>(&b);
186
- if (a2->m_kind == b2->m_kind ) {
187
- return true ;
188
- } else {
189
- return false ;
190
- }
191
- break ;
192
- }
193
- case (ASR::ttypeType::Character) : {
194
- ASR::Character_t *a2 = ASR::down_cast<ASR::Character_t>(&a);
195
- ASR::Character_t *b2 = ASR::down_cast<ASR::Character_t>(&b);
196
- if (a2->m_kind == b2->m_kind ) {
197
- return true ;
198
- } else {
199
- return false ;
200
- }
201
- break ;
202
- }
203
- default : return false ;
204
- }
205
- }
206
- return false ;
207
- }
208
-
209
142
template <typename T>
210
143
bool argument_types_match (const Vec<ASR::ttype_t *> &args,
211
144
const T &sub) {
@@ -215,7 +148,7 @@ bool argument_types_match(const Vec<ASR::ttype_t*> &args,
215
148
ASR::Variable_t *v = LFortran::ASRUtils::EXPR2VAR (sub.m_args [i]);
216
149
ASR::ttype_t *arg1 = args[i];
217
150
ASR::ttype_t *arg2 = v->m_type ;
218
- if (!types_equal (* arg1, * arg2)) {
151
+ if (!ASRUtils::check_equal_type ( arg1, arg2)) {
219
152
return false ;
220
153
}
221
154
}
0 commit comments