Skip to content

Commit d51feff

Browse files
committed
Refactor: Define and use make_dummy_assignment()
1 parent 1b5bafd commit d51feff

File tree

1 file changed

+19
-14
lines changed

1 file changed

+19
-14
lines changed

src/lpython/semantics/python_ast_to_asr.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,24 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
11241124
}
11251125

11261126

1127+
ASR::asr_t* make_dummy_assignment(ASR::expr_t* expr, const Location &loc) {
1128+
ASR::ttype_t* type = ASRUtils::expr_type(expr);
1129+
std::string dummy_ret_name = current_scope->get_unique_name("__lcompilers_dummy", false);
1130+
SetChar variable_dependencies_vec;
1131+
variable_dependencies_vec.reserve(al, 1);
1132+
ASRUtils::collect_variable_dependencies(al, variable_dependencies_vec, type);
1133+
ASR::asr_t* variable_asr = ASR::make_Variable_t(al, loc, current_scope,
1134+
s2c(al, dummy_ret_name), variable_dependencies_vec.p,
1135+
variable_dependencies_vec.size(), ASR::intentType::Local,
1136+
nullptr, nullptr, ASR::storage_typeType::Default,
1137+
type, nullptr, ASR::abiType::Source, ASR::accessType::Public,
1138+
ASR::presenceType::Required, false);
1139+
ASR::symbol_t* variable_sym = ASR::down_cast<ASR::symbol_t>(variable_asr);
1140+
current_scope->add_symbol(dummy_ret_name, variable_sym);
1141+
ASR::expr_t* variable_var = ASRUtils::EXPR(ASR::make_Var_t(al, loc, variable_sym));
1142+
return ASR::make_Assignment_t(al, loc, variable_var, expr, nullptr);
1143+
}
1144+
11271145
// Function to create appropriate call based on symbol type. If it is external
11281146
// generic symbol then it changes the name accordingly.
11291147
ASR::asr_t* make_call_helper(Allocator &al, ASR::symbol_t* s, SymbolTable *current_scope,
@@ -1290,20 +1308,7 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
12901308
s_generic, args_new.p, args_new.size(),
12911309
a_type, value, nullptr);
12921310
if( ignore_return_value ) {
1293-
std::string dummy_ret_name = current_scope->get_unique_name("__lcompilers_dummy", false);
1294-
SetChar variable_dependencies_vec;
1295-
variable_dependencies_vec.reserve(al, 1);
1296-
ASRUtils::collect_variable_dependencies(al, variable_dependencies_vec, a_type);
1297-
ASR::asr_t* variable_asr = ASR::make_Variable_t(al, loc, current_scope,
1298-
s2c(al, dummy_ret_name), variable_dependencies_vec.p,
1299-
variable_dependencies_vec.size(), ASR::intentType::Local,
1300-
nullptr, nullptr, ASR::storage_typeType::Default,
1301-
a_type, nullptr, ASR::abiType::Source, ASR::accessType::Public,
1302-
ASR::presenceType::Required, false);
1303-
ASR::symbol_t* variable_sym = ASR::down_cast<ASR::symbol_t>(variable_asr);
1304-
current_scope->add_symbol(dummy_ret_name, variable_sym);
1305-
ASR::expr_t* variable_var = ASRUtils::EXPR(ASR::make_Var_t(al, loc, variable_sym));
1306-
return ASR::make_Assignment_t(al, loc, variable_var, ASRUtils::EXPR(func_call_asr), nullptr);
1311+
return make_dummy_assignment(ASRUtils::EXPR(func_call_asr), loc);
13071312
} else {
13081313
return func_call_asr;
13091314
}

0 commit comments

Comments
 (0)