From f6508a9ebe4d5143ef6c4b7979f7b2efbcb1bc9d Mon Sep 17 00:00:00 2001 From: Smit-create Date: Tue, 24 Jan 2023 11:11:35 +0530 Subject: [PATCH 1/2] Ignore TypeParameter and functions with them --- src/libasr/codegen/asr_to_c.cpp | 19 +++++++++++++------ src/libasr/codegen/asr_to_c_cpp.h | 10 ++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/libasr/codegen/asr_to_c.cpp b/src/libasr/codegen/asr_to_c.cpp index 87849827c8..160b6c2aa9 100644 --- a/src/libasr/codegen/asr_to_c.cpp +++ b/src/libasr/codegen/asr_to_c.cpp @@ -516,6 +516,9 @@ class ASRToCVisitor : public BaseCCPPVisitor sub = format_type_c("", "const " + const_underlying_type + " ", v.m_name, false, false); } + } else if (ASR::is_a(*v_m_type)) { + // Ignore type variables + return ""; } else { diag.codegen_error_label("Type number '" + std::to_string(v_m_type->type) @@ -606,12 +609,14 @@ R"( strcat_def += indent + tab + "return strcat(str_tmp, y);\n"; strcat_def += indent + "}\n\n"; + std::string unit_src_tmp; for (auto &item : x.m_global_scope->get_scope()) { if (ASR::is_a(*item.second)) { ASR::Variable_t *v = ASR::down_cast(item.second); - unit_src += convert_variable_decl(*v); - if( !ASR::is_a(*v->m_type) || - v->m_intent == ASRUtils::intent_return_var ) { + unit_src_tmp = convert_variable_decl(*v); + unit_src += unit_src_tmp; + if(unit_src_tmp.size() > 0 && (!ASR::is_a(*v->m_type) || + v->m_intent == ASRUtils::intent_return_var )) { unit_src += ";\n"; } } @@ -742,14 +747,16 @@ R"( // Topologically sort all program functions // and then define them in the right order std::vector var_order = ASRUtils::determine_variable_declaration_order(x.m_symtab); + std::string decl_tmp; for (auto &item : var_order) { ASR::symbol_t* var_sym = x.m_symtab->get_symbol(item); if (ASR::is_a(*var_sym)) { ASR::Variable_t *v = ASR::down_cast(var_sym); decl += indent1; - decl += convert_variable_decl(*v); - if( !ASR::is_a(*v->m_type) || - v->m_intent == ASRUtils::intent_return_var ) { + decl_tmp = convert_variable_decl(*v); + decl += decl_tmp; + if(decl_tmp.size() > 0 && (!ASR::is_a(*v->m_type) || + v->m_intent == ASRUtils::intent_return_var )) { decl += ";\n"; } } diff --git a/src/libasr/codegen/asr_to_c_cpp.h b/src/libasr/codegen/asr_to_c_cpp.h index a50bce913f..e6ddd7fb8d 100644 --- a/src/libasr/codegen/asr_to_c_cpp.h +++ b/src/libasr/codegen/asr_to_c_cpp.h @@ -481,6 +481,7 @@ R"(#include std::string indent(indentation_level*indentation_spaces, ' '); std::string decl; std::vector var_order = ASRUtils::determine_variable_declaration_order(x.m_symtab); + bool has_typevar = false; for (auto &item : var_order) { ASR::symbol_t* var_sym = x.m_symtab->get_symbol(item); if (ASR::is_a(*var_sym)) { @@ -493,8 +494,17 @@ R"(#include decl += ";\n"; } } + if (ASR::is_a(*v->m_type)) { + has_typevar = true; + break; + } } } + if (has_typevar) { + indentation_level -= 1; + src = ""; + return; + } current_function = &x; From a0fc29de76625ebef163daf9ffdd2eea3710f0b3 Mon Sep 17 00:00:00 2001 From: Smit-create Date: Tue, 24 Jan 2023 11:11:45 +0530 Subject: [PATCH 2/2] C: Enable fixed tests --- integration_tests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/integration_tests/CMakeLists.txt b/integration_tests/CMakeLists.txt index ca484bae7b..788602e9d2 100644 --- a/integration_tests/CMakeLists.txt +++ b/integration_tests/CMakeLists.txt @@ -400,8 +400,8 @@ RUN(NAME test_str_comparison LABELS cpython llvm c) RUN(NAME test_bit_length LABELS cpython llvm c) RUN(NAME str_to_list_cast LABELS cpython llvm c) -RUN(NAME generics_01 LABELS cpython llvm) -RUN(NAME generics_02 LABELS cpython llvm) +RUN(NAME generics_01 LABELS cpython llvm c) +RUN(NAME generics_02 LABELS cpython llvm c) RUN(NAME generics_array_01 LABELS cpython llvm) RUN(NAME generics_array_02 LABELS cpython llvm) RUN(NAME generics_array_03 LABELS cpython llvm)