summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/trans/codegen_c.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 0ef71dd0..0552d118 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -105,9 +105,7 @@ namespace {
m_of << ";\n";
)
else TU_IFLET( ::HIR::TypeRef::Data, ty.m_data, Array, te,
- m_of << "typedef struct {\n";
- m_of << "\t"; emit_ctype(*te.inner); m_of << " DATA[" << te.size_val << "];\n";
- m_of << "} "; emit_ctype(ty); m_of << ";\n";
+ m_of << "typedef struct { "; emit_ctype(*te.inner); m_of << " DATA[" << te.size_val << "]; } "; emit_ctype(ty); m_of << ";\n";
)
else {
}
@@ -246,14 +244,15 @@ namespace {
m_of << "\tunion {\n";
for(unsigned int i = 0; i < item.m_variants.size(); i ++)
{
- m_of << "\t\tstruct {\n";
TU_MATCHA( (item.m_variants[i].second), (e),
(Unit,
+ m_of << "\t\tstruct {} var_" << i << ";\n";
),
(Value,
- // TODO: omit
+ m_of << "\t\tstruct {} var_" << i << ";\n";
),
(Tuple,
+ m_of << "\t\tstruct {\n";
for(unsigned int i = 0; i < e.size(); i ++)
{
const auto& fld = e[i];
@@ -261,8 +260,10 @@ namespace {
emit_ctype( monomorph(fld.ent) );
m_of << " _" << i << ";\n";
}
+ m_of << "\t\t} var_" << i << ";\n";
),
(Struct,
+ m_of << "\t\tstruct {\n";
for(unsigned int i = 0; i < e.size(); i ++)
{
const auto& fld = e[i];
@@ -270,9 +271,9 @@ namespace {
emit_ctype( monomorph(fld.second.ent) );
m_of << " _" << i << ";\n";
}
+ m_of << "\t\t} var_" << i << ";\n";
)
)
- m_of << "\t\t} var_" << i << ";\n";
}
m_of << "\t} DATA;\n";
m_of << "};\n";
@@ -308,15 +309,16 @@ namespace {
m_of << "\tswitch(rv->TAG) {\n";
for(unsigned int var_idx = 0; var_idx < item.m_variants.size(); var_idx ++)
{
- m_of << "\n";
fld_lv.as_Field().val->as_Downcast().variant_index = var_idx;
- m_of << "\tcase " << var_idx << ":\n";
TU_MATCHA( (item.m_variants[var_idx].second), (e),
(Unit,
+ m_of << "\tcase " << var_idx << ": break;\n";
),
(Value,
+ m_of << "\tcase " << var_idx << ": break;\n";
),
(Tuple,
+ m_of << "\tcase " << var_idx << ":\n";
for(unsigned int i = 0; i < e.size(); i ++)
{
fld_lv.as_Field().field_index = i;
@@ -324,17 +326,19 @@ namespace {
emit_destructor_call(fld_lv, monomorph(fld.ent), false);
}
+ m_of << "\tbreak;\n";
),
(Struct,
+ m_of << "\tcase " << var_idx << ":\n";
for(unsigned int i = 0; i < e.size(); i ++)
{
fld_lv.as_Field().field_index = i;
const auto& fld = e[i];
emit_destructor_call(fld_lv, monomorph(fld.second.ent), false);
}
+ m_of << "\tbreak;\n";
)
)
- m_of << "\tbreak;\n";
}
m_of << "\t}\n";
m_of << "}\n";