Skip to content

Commit 2873bd3

Browse files
authored
Merge pull request #1303 from Smit-create/c7
C: Fix errors due to const tuple name
2 parents df11263 + c7338fe commit 2873bd3

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

integration_tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ RUN(NAME test_list_04 LABELS cpython llvm c)
225225
RUN(NAME test_list_05 LABELS cpython llvm c)
226226
RUN(NAME test_list_06 LABELS cpython llvm c)
227227
RUN(NAME test_list_07 LABELS cpython llvm c)
228-
RUN(NAME test_list_08 LABELS cpython llvm)
228+
RUN(NAME test_list_08 LABELS cpython llvm c)
229229
RUN(NAME test_list_09 LABELS cpython llvm c)
230230
RUN(NAME test_list_10 LABELS cpython llvm)
231231
RUN(NAME test_tuple_01 LABELS cpython llvm c)

src/libasr/codegen/asr_to_c_cpp.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -628,9 +628,9 @@ R"(#include <stdio.h>
628628
ASR::TupleConstant_t *tup_c = ASR::down_cast<ASR::TupleConstant_t>(x.m_target);
629629
std::string src_tmp = "", val_name = "";
630630
if (ASR::is_a<ASR::TupleConstant_t>(*x.m_value)) {
631+
val_name = const_name + std::to_string(const_list_count);
631632
self().visit_TupleConstant(*ASR::down_cast<ASR::TupleConstant_t>(x.m_value));
632633
src_tmp += src;
633-
val_name = const_name;
634634
} else if (ASR::is_a<ASR::FunctionCall_t>(*x.m_value)) {
635635
self().visit_FunctionCall(*ASR::down_cast<ASR::FunctionCall_t>(x.m_value));
636636
ASR::Tuple_t* t = ASR::down_cast<ASR::Tuple_t>(tup_c->m_type);
@@ -645,8 +645,10 @@ R"(#include <stdio.h>
645645
val_name = src;
646646
}
647647
for (size_t i=0; i<tup_c->n_elements; i++) {
648-
visit_Var(*ASR::down_cast<ASR::Var_t>(tup_c->m_elements[i]));
649-
src_tmp += indent + src + " = " + val_name + ".element_" + std::to_string(i) + ";\n";
648+
self().visit_expr(*tup_c->m_elements[i]);
649+
ASR::ttype_t *t = ASRUtils::expr_type(tup_c->m_elements[i]);
650+
src_tmp += indent + c_ds_api->get_deepcopy(t,
651+
val_name + ".element_" + std::to_string(i), src) + "\n";
650652
}
651653
src = src_tmp;
652654
return;
@@ -794,6 +796,7 @@ R"(#include <stdio.h>
794796
const_name += std::to_string(const_list_count);
795797
const_list_count += 1;
796798
const_name = current_scope->get_unique_name(const_name);
799+
std::string var_name = const_name;
797800
ASR::Tuple_t* t = ASR::down_cast<ASR::Tuple_t>(x.m_type);
798801
std::string tuple_type_c = c_ds_api->get_tuple_type(t);
799802
std::string src_tmp = "";
@@ -802,11 +805,11 @@ R"(#include <stdio.h>
802805
self().visit_expr(*x.m_elements[i]);
803806
std::string ele = ".element_" + std::to_string(i);
804807
if (ASR::is_a<ASR::Character_t>(*t->m_type[i])) {
805-
src_tmp += indent + const_name + ele + " = (char*) malloc(40 * sizeof(char));\n";
808+
src_tmp += indent + var_name + ele + " = (char*) malloc(40 * sizeof(char));\n";
806809
}
807-
src_tmp += indent + c_ds_api->get_deepcopy(t->m_type[i], src, const_name + ele) + "\n";
810+
src_tmp += indent + c_ds_api->get_deepcopy(t->m_type[i], src, var_name + ele) + "\n";
808811
}
809-
src_tmp += indent + const_name + ".length" + " = " + std::to_string(x.n_elements) + ";\n";
812+
src_tmp += indent + var_name + ".length" + " = " + std::to_string(x.n_elements) + ";\n";
810813
src = src_tmp;
811814
}
812815

0 commit comments

Comments
 (0)