Skip to content

Commit 852f6c3

Browse files
committed
Use the deep copy function and fix errors
1 parent 33b62da commit 852f6c3

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

src/libasr/codegen/asr_to_c_cpp.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,11 +690,13 @@ R"(#include <stdio.h>
690690
src += indent + list_dc_func + "(&" + value + ", &" + target + ");\n\n";
691691
}
692692
} else if ( is_target_tup && is_value_tup ) {
693+
ASR::Tuple_t* tup_target = ASR::down_cast<ASR::Tuple_t>(ASRUtils::expr_type(x.m_target));
694+
std::string dc_func = c_ds_api->get_tuple_deepcopy_func(tup_target);
693695
if( ASR::is_a<ASR::TupleConstant_t>(*x.m_value) ) {
694696
src += value;
695-
src += indent + target + " = " + const_name + ";\n";
697+
src += indent + dc_func + "(" + const_name + ", &" + target + ");\n";
696698
} else {
697-
src += indent + target + " = " + value + ";\n";
699+
src += indent + dc_func + "(" + value + ", &" + target + ");\n";
698700
}
699701
} else {
700702
if( is_c ) {

src/libasr/codegen/c_utils.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,9 @@ class CCPPDSUtils {
186186
return func + "(" + value + ", &" + target + ");";
187187
} else if (ASR::is_a<ASR::Character_t>(*t)) {
188188
return "strcpy(" + target + ", " + value + ");";
189+
} else {
190+
return target + " = " + value + ";";
189191
}
190-
LFORTRAN_ASSERT(false);
191192
}
192193

193194
bool is_non_primitive_DT(ASR::ttype_t *t) {
@@ -486,7 +487,7 @@ class CCPPDSUtils {
486487
if( ASR::is_a<ASR::Character_t>(*m_type) ) {
487488
generated_code += indent + tab + "x->data[x->current_end_point] = (char*) malloc(40 * sizeof(char));\n";
488489
}
489-
generated_code += indent + generated_code += indent + tab + \
490+
generated_code += indent + tab + \
490491
get_deepcopy(m_type, "element", "x->data[x->current_end_point]") + "\n";
491492
generated_code += indent + tab + "x->current_end_point += 1;\n";
492493
generated_code += indent + "}\n\n";
@@ -620,11 +621,11 @@ class CCPPDSUtils {
620621
for (size_t i=0; i<t->n_type; i++) {
621622
std::string n = std::to_string(i);
622623
if (ASR::is_a<ASR::Character_t>(*t->m_type[i])) {
623-
tmp_gen += indent + tab + "data->element_" + n + " = " + \
624+
tmp_gen += indent + tab + "dest->element_" + n + " = " + \
624625
"(char *) malloc(40*sizeof(char));\n";
625626
}
626627
tmp_gen += indent + tab + get_deepcopy(t->m_type[i], "src.element_" + n,
627-
"data->element_" + n) + "\n";
628+
"dest->element_" + n) + "\n";
628629
}
629630
tmp_gen += indent + "}\n\n";
630631
func_decls += tmp_def;

0 commit comments

Comments
 (0)