diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-04 19:04:59 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-04 19:04:59 +0800 |
commit | 04f4bbf76d96205f79f6e033cbf67d4b3798d79b (patch) | |
tree | a5d737e84d0b4e22202080594079a6e1353ea637 /src/trans/codegen_c.cpp | |
parent | 9646cd2f39dbec124d1e9c3db4db3b044fabf6f2 (diff) | |
download | mrust-04f4bbf76d96205f79f6e033cbf67d4b3798d79b.tar.gz |
Trans C - Array initialisation
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r-- | src/trans/codegen_c.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp index 7ec0e2e4..e1fc5b5b 100644 --- a/src/trans/codegen_c.cpp +++ b/src/trans/codegen_c.cpp @@ -322,14 +322,24 @@ namespace { ) ), (SizedArray, - emit_lvalue(e.dst); - m_of << " = "; - m_of << "{"; - for(unsigned int j = ve.count; j --;) { - emit_lvalue(ve.val); - if( j != 0 ) m_of << ","; + if( ve.count == 0 ) { + } + else if( ve.count == 1 ) { + emit_lvalue(e.dst); m_of << "[0] = "; emit_lvalue(ve.val); + } + else if( ve.count == 2 ) { + emit_lvalue(e.dst); m_of << "[0] = "; emit_lvalue(ve.val); m_of << ";\n\t"; + emit_lvalue(e.dst); m_of << "[1] = "; emit_lvalue(ve.val); + } + else if( ve.count == 3 ) { + emit_lvalue(e.dst); m_of << "[0] = "; emit_lvalue(ve.val); m_of << ";\n\t"; + emit_lvalue(e.dst); m_of << "[1] = "; emit_lvalue(ve.val); m_of << ";\n\t"; + emit_lvalue(e.dst); m_of << "[2] = "; emit_lvalue(ve.val); + } + else { + m_of << "for(unsigned int i = 0; i < " << ve.count << "; i ++)\n"; + m_of << "\t\t"; emit_lvalue(e.dst); m_of << "[i] = "; emit_lvalue(ve.val); } - m_of << "}"; ), (Borrow, emit_lvalue(e.dst); @@ -446,12 +456,11 @@ namespace { } ), (Array, - m_of << "{"; for(unsigned int j = 0; j < ve.vals.size(); j ++) { - if( j != 0 ) m_of << ","; + if( j != 0 ) m_of << ";\n\t"; + emit_lvalue(e.dst); m_of << "[" << j << "] = "; emit_lvalue(ve.vals[j]); } - m_of << "}"; ), (Variant, TODO(sp, "Handle constructing variants"); |