Skip to content

Commit b5b86f4

Browse files
Handle multiple block symbols
1 parent dcbdc62 commit b5b86f4

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/libasr/asr_scopes.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,27 @@ void SymbolTable::move_symbols_from_global_scope(Allocator &/*al*/,
147147
for (size_t i = 0; i < fn->n_dependencies; i++ ) {
148148
ASR::symbol_t *s = fn->m_symtab->get_symbol(
149149
fn->m_dependencies[i]);
150-
ASR::symbol_t *block_s = nullptr;
151150
if (s == nullptr) {
152-
block_s = fn->m_symtab->get_symbol("block");
153-
}
154-
while(s == nullptr && block_s != nullptr) {
155-
ASR::Block_t *b = ASR::down_cast<ASR::Block_t>(block_s);
156-
s = b->m_symtab->get_symbol(fn->m_dependencies[i]);
157-
if (s == nullptr) {
158-
block_s = b->m_symtab->get_symbol("block");
151+
std::string block_name = "block";
152+
ASR::symbol_t *block_s = fn->m_symtab->get_symbol(block_name);
153+
int32_t j = 1;
154+
while(block_s != nullptr) {
155+
while(block_s != nullptr) {
156+
ASR::Block_t *b = ASR::down_cast<ASR::Block_t>(block_s);
157+
s = b->m_symtab->get_symbol(fn->m_dependencies[i]);
158+
if (s == nullptr) {
159+
block_s = b->m_symtab->get_symbol("block");
160+
} else {
161+
break;
162+
}
163+
}
164+
if (s == nullptr) {
165+
block_s = fn->m_symtab->get_symbol(block_name +
166+
std::to_string(j));
167+
j++;
168+
} else {
169+
break;
170+
}
159171
}
160172
}
161173
if (s == nullptr) {

0 commit comments

Comments
 (0)