Skip to content

Commit b4b0ced

Browse files
committed
Define deepcopy inside c_utils
1 parent dce819f commit b4b0ced

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/libasr/codegen/c_utils.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,18 @@ class CCPPDSUtils {
173173
global_scope = global_scope_;
174174
}
175175

176+
std::string get_deepcopy(ASR::ttype_t *t, std::string value, std::string target) {
177+
if (ASR::is_a<ASR::List_t>(*t)) {
178+
ASR::List_t* list_type = ASR::down_cast<ASR::List_t>(t);
179+
std::string list_type_code = ASRUtils::get_type_code(list_type->m_type, true);
180+
std::string func = typecodeToDSfuncs[list_type_code]["list_deepcopy"];
181+
return func + "(&" + value + ", &" + target + ");";
182+
} else if (ASR::is_a<ASR::Character_t>(*t)) {
183+
return "strcpy(" + target + ", " + value + ");";
184+
}
185+
LFORTRAN_ASSERT(false);
186+
}
187+
176188
bool is_non_primitive_DT(ASR::ttype_t *t) {
177189
return ASR::is_a<ASR::List_t>(*t) || ASR::is_a<ASR::Tuple_t>(*t);
178190
}
@@ -469,14 +481,8 @@ class CCPPDSUtils {
469481
if( ASR::is_a<ASR::Character_t>(*m_type) ) {
470482
generated_code += indent + tab + "x->data[x->current_end_point] = (char*) malloc(40 * sizeof(char));\n";
471483
}
472-
if (ASR::is_a<ASR::List_t>(*m_type)) {
473-
ASR::ttype_t *tt = ASR::down_cast<ASR::List_t>(m_type)->m_type;
474-
std::string deep_copy_func = typecodeToDSfuncs[ASRUtils::get_type_code(tt, true)]["list_deepcopy"];
475-
LFORTRAN_ASSERT(deep_copy_func.size() > 0);
476-
generated_code += indent + tab + deep_copy_func + "(&element, &x->data[x->current_end_point]);\n";
477-
} else {
478-
generated_code += indent + tab + deepcopy_function("x->data[x->current_end_point]", "element", m_type) + "\n";
479-
}
484+
generated_code += indent + generated_code += indent + tab + \
485+
get_deepcopy(m_type, "element", "x->data[x->current_end_point]") + "\n";
480486
generated_code += indent + tab + "x->current_end_point += 1;\n";
481487
generated_code += indent + "}\n\n";
482488
}

0 commit comments

Comments
 (0)