Skip to content

Commit ec200f5

Browse files
committed
Pass the ast_overload as arguments to visitors
1 parent 2781c6c commit ec200f5

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

src/lpython/semantics/python_ast_to_asr.cpp

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ ASR::Module_t* load_module(Allocator &al, SymbolTable *symtab,
139139
return mod2;
140140
}
141141

142-
std::map<int, ASR::symbol_t*> ast_overload;
143142

144143
template <class Derived>
145144
class CommonVisitor : public AST::BaseVisitor<Derived> {
@@ -158,10 +157,13 @@ class CommonVisitor : public AST::BaseVisitor<Derived> {
158157
// The main module is stored directly in TranslationUnit, other modules are Modules
159158
bool main_module;
160159
PythonIntrinsicProcedures intrinsic_procedures;
160+
std::map<int, ASR::symbol_t*> &ast_overload;
161161

162162
CommonVisitor(Allocator &al, SymbolTable *symbol_table,
163-
diag::Diagnostics &diagnostics, bool main_module)
164-
: diag{diagnostics}, al{al}, current_scope{symbol_table}, main_module{main_module} {
163+
diag::Diagnostics &diagnostics, bool main_module,
164+
std::map<int, ASR::symbol_t*> &ast_overload)
165+
: diag{diagnostics}, al{al}, current_scope{symbol_table}, main_module{main_module},
166+
ast_overload{ast_overload} {
165167
current_module_dependencies.reserve(al, 4);
166168
}
167169

@@ -475,8 +477,9 @@ class SymbolTableVisitor : public CommonVisitor<SymbolTableVisitor> {
475477

476478

477479
SymbolTableVisitor(Allocator &al, SymbolTable *symbol_table,
478-
diag::Diagnostics &diagnostics, bool main_module)
479-
: CommonVisitor(al, symbol_table, diagnostics, main_module), is_derived_type{false} {}
480+
diag::Diagnostics &diagnostics, bool main_module,
481+
std::map<int, ASR::symbol_t*> &ast_overload)
482+
: CommonVisitor(al, symbol_table, diagnostics, main_module, ast_overload), is_derived_type{false} {}
480483

481484

482485
ASR::symbol_t* resolve_symbol(const Location &loc, const std::string &sub_name) {
@@ -767,10 +770,10 @@ class SymbolTableVisitor : public CommonVisitor<SymbolTableVisitor> {
767770
};
768771

769772
Result<ASR::asr_t*> symbol_table_visitor(Allocator &al, const AST::Module_t &ast,
770-
diag::Diagnostics &diagnostics, bool main_module)
773+
diag::Diagnostics &diagnostics, bool main_module,
774+
std::map<int, ASR::symbol_t*> &ast_overload)
771775
{
772-
ast_overload.clear();
773-
SymbolTableVisitor v(al, nullptr, diagnostics, main_module);
776+
SymbolTableVisitor v(al, nullptr, diagnostics, main_module, ast_overload);
774777
try {
775778
v.visit_Module(ast);
776779
} catch (const SemanticError &e) {
@@ -792,8 +795,9 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
792795
ASR::asr_t *asr;
793796
Vec<ASR::stmt_t*> *current_body;
794797

795-
BodyVisitor(Allocator &al, ASR::asr_t *unit, diag::Diagnostics &diagnostics, bool main_module)
796-
: CommonVisitor(al, nullptr, diagnostics, main_module), asr{unit} {}
798+
BodyVisitor(Allocator &al, ASR::asr_t *unit, diag::Diagnostics &diagnostics,
799+
bool main_module, std::map<int, ASR::symbol_t*> &ast_overload)
800+
: CommonVisitor(al, nullptr, diagnostics, main_module, ast_overload), asr{unit} {}
797801

798802
// Transforms statements to a list of ASR statements
799803
// In addition, it also inserts the following nodes if needed:
@@ -2326,9 +2330,10 @@ class BodyVisitor : public CommonVisitor<BodyVisitor> {
23262330
Result<ASR::TranslationUnit_t*> body_visitor(Allocator &al,
23272331
const AST::Module_t &ast,
23282332
diag::Diagnostics &diagnostics,
2329-
ASR::asr_t *unit, bool main_module)
2333+
ASR::asr_t *unit, bool main_module,
2334+
std::map<int, ASR::symbol_t*> &ast_overload)
23302335
{
2331-
BodyVisitor b(al, unit, diagnostics, main_module);
2336+
BodyVisitor b(al, unit, diagnostics, main_module, ast_overload);
23322337
try {
23332338
b.visit_Module(ast);
23342339
} catch (const SemanticError &e) {
@@ -2362,10 +2367,13 @@ std::string pickle_python(AST::ast_t &ast, bool colors, bool indent) {
23622367
Result<ASR::TranslationUnit_t*> python_ast_to_asr(Allocator &al,
23632368
AST::ast_t &ast, diag::Diagnostics &diagnostics, bool main_module)
23642369
{
2370+
std::map<int, ASR::symbol_t*> ast_overload;
2371+
23652372
AST::Module_t *ast_m = AST::down_cast2<AST::Module_t>(&ast);
23662373

23672374
ASR::asr_t *unit;
2368-
auto res = symbol_table_visitor(al, *ast_m, diagnostics, main_module);
2375+
auto res = symbol_table_visitor(al, *ast_m, diagnostics, main_module,
2376+
ast_overload);
23692377
if (res.ok) {
23702378
unit = res.result;
23712379
} else {
@@ -2374,7 +2382,8 @@ Result<ASR::TranslationUnit_t*> python_ast_to_asr(Allocator &al,
23742382
ASR::TranslationUnit_t *tu = ASR::down_cast2<ASR::TranslationUnit_t>(unit);
23752383
LFORTRAN_ASSERT(asr_verify(*tu));
23762384

2377-
auto res2 = body_visitor(al, *ast_m, diagnostics, unit, main_module);
2385+
auto res2 = body_visitor(al, *ast_m, diagnostics, unit, main_module,
2386+
ast_overload);
23782387
if (res2.ok) {
23792388
tu = res2.result;
23802389
} else {

0 commit comments

Comments
 (0)