summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-04 19:04:59 +0800
committerJohn Hodge <tpg@mutabah.net>2016-12-04 19:04:59 +0800
commit04f4bbf76d96205f79f6e033cbf67d4b3798d79b (patch)
treea5d737e84d0b4e22202080594079a6e1353ea637 /src/trans/codegen_c.cpp
parent9646cd2f39dbec124d1e9c3db4db3b044fabf6f2 (diff)
downloadmrust-04f4bbf76d96205f79f6e033cbf67d4b3798d79b.tar.gz
Trans C - Array initialisation
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r--src/trans/codegen_c.cpp29
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");