@@ -952,7 +952,12 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
952
952
ASR::symbol_t * overloaddef_find_helper (std::string func_name, Vec<ASR::ttype_t *> args,
953
953
const Location &loc) {
954
954
for (auto &t: overload_defs[func_name]) {
955
- ASR::symbol_t *st = current_scope->scope [t];
955
+ SymbolTable *symtab = current_scope;
956
+ while (symtab!= nullptr && symtab->scope .find (t) == symtab->scope .end ()) {
957
+ symtab = symtab->parent ;
958
+ }
959
+ LFORTRAN_ASSERT (symtab != nullptr );
960
+ ASR::symbol_t *st = symtab->scope [t];
956
961
bool ok = select_func_subrout (st, args, loc,
957
962
[&](const std::string &msg, const Location &l) { throw SemanticError (msg, l); });
958
963
if (ok) {
@@ -2256,6 +2261,14 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
2256
2261
2257
2262
ASR::symbol_t *s = current_scope->resolve_symbol (call_name);
2258
2263
2264
+ if (!s && overload_defs.find (call_name)!=overload_defs.end ()) {
2265
+ Vec<ASR::ttype_t *> args_type;
2266
+ args_type.reserve (al, x.n_args );
2267
+ for (size_t i=0 ; i<x.n_args ; i++) {
2268
+ args_type.push_back (al, ASRUtils::expr_type (args[i]));
2269
+ }
2270
+ s = overloaddef_find_helper (call_name, args_type, x.base .base .loc );
2271
+ }
2259
2272
2260
2273
if (!s) {
2261
2274
if (intrinsic_procedures.is_intrinsic (call_name)) {
0 commit comments