Skip to content

Commit

Permalink
Refactor into declare_args()
Browse files Browse the repository at this point in the history
  • Loading branch information
certik committed Aug 24, 2020
1 parent 5bb9725 commit ce75d6a
Showing 1 changed file with 14 additions and 9 deletions.
23 changes: 14 additions & 9 deletions src/lfortran/codegen/asr_to_llvm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,19 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
return args;
}

template <typename T>
void declare_args(const T &x, llvm::Function &F) {
size_t i = 0;
for (llvm::Argument &llvm_arg : F.args()) {
ASR::Variable_t *arg = VARIABLE((ASR::asr_t*)EXPR_VAR((ASR::asr_t*)x.m_args[i])->m_v);
LFORTRAN_ASSERT(is_arg_dummy(arg->m_intent));
std::string arg_s = arg->m_name;
llvm_arg.setName(arg_s);
llvm_symtab[arg_s] = &llvm_arg;
i++;
}
}

void visit_Function(const ASR::Function_t &x) {
ASR::ttypeType return_var_type = VARIABLE((ASR::asr_t*)(EXPR_VAR((ASR::asr_t*)x.m_return_var)->m_v))->m_type->type;
llvm::Type *return_type;
Expand Down Expand Up @@ -278,15 +291,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor<ASRToLLVMVisitor>
".entry", F);
builder->SetInsertPoint(BB);

size_t i = 0;
for (llvm::Argument &llvm_arg : F->args()) {
ASR::Variable_t *arg = VARIABLE((ASR::asr_t*)EXPR_VAR((ASR::asr_t*)x.m_args[i])->m_v);
LFORTRAN_ASSERT(is_arg_dummy(arg->m_intent));
std::string arg_s = arg->m_name;
llvm_arg.setName(arg_s);
llvm_symtab[arg_s] = &llvm_arg;
i++;
}
declare_args(x, *F);

for (auto &item : x.m_symtab->scope) {
if (item.second->type == ASR::asrType::var) {
Expand Down

0 comments on commit ce75d6a

Please sign in to comment.