Skip to content

Commit

Permalink
Ignore TypeParameter and functions with them
Browse files Browse the repository at this point in the history
  • Loading branch information
Smit-create committed Feb 13, 2023
1 parent 9c00b60 commit f6508a9
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
19 changes: 13 additions & 6 deletions src/libasr/codegen/asr_to_c.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,9 @@ class ASRToCVisitor : public BaseCCPPVisitor<ASRToCVisitor>
sub = format_type_c("", "const " + const_underlying_type + " ",
v.m_name, false, false);
}
} else if (ASR::is_a<ASR::TypeParameter_t>(*v_m_type)) {
// Ignore type variables
return "";
} else {
diag.codegen_error_label("Type number '"
+ std::to_string(v_m_type->type)
Expand Down Expand Up @@ -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<ASR::Variable_t>(*item.second)) {
ASR::Variable_t *v = ASR::down_cast<ASR::Variable_t>(item.second);
unit_src += convert_variable_decl(*v);
if( !ASR::is_a<ASR::Const_t>(*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<ASR::Const_t>(*v->m_type) ||
v->m_intent == ASRUtils::intent_return_var )) {
unit_src += ";\n";
}
}
Expand Down Expand Up @@ -742,14 +747,16 @@ R"(
// Topologically sort all program functions
// and then define them in the right order
std::vector<std::string> 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<ASR::Variable_t>(*var_sym)) {
ASR::Variable_t *v = ASR::down_cast<ASR::Variable_t>(var_sym);
decl += indent1;
decl += convert_variable_decl(*v);
if( !ASR::is_a<ASR::Const_t>(*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<ASR::Const_t>(*v->m_type) ||
v->m_intent == ASRUtils::intent_return_var )) {
decl += ";\n";
}
}
Expand Down
10 changes: 10 additions & 0 deletions src/libasr/codegen/asr_to_c_cpp.h
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,7 @@ R"(#include <stdio.h>
std::string indent(indentation_level*indentation_spaces, ' ');
std::string decl;
std::vector<std::string> 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<ASR::Variable_t>(*var_sym)) {
Expand All @@ -493,8 +494,17 @@ R"(#include <stdio.h>
decl += ";\n";
}
}
if (ASR::is_a<ASR::TypeParameter_t>(*v->m_type)) {
has_typevar = true;
break;
}
}
}
if (has_typevar) {
indentation_level -= 1;
src = "";
return;
}

current_function = &x;

Expand Down

0 comments on commit f6508a9

Please sign in to comment.