summaryrefslogtreecommitdiff
path: root/src/trans/codegen_c.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-04-22 13:31:07 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-04-22 13:31:07 +0800
commit83b9e560df97f054dc2ea0660cda3fb55cd274d7 (patch)
tree057be3e50eee6278f00b260a581d08931aa6e929 /src/trans/codegen_c.cpp
parent6f5792ac00800b1a28b8c9c81eb80046f37b2f03 (diff)
downloadmrust-83b9e560df97f054dc2ea0660cda3fb55cd274d7.tar.gz
MIR - Add ScopeEnd statement to indicate where a value will no longer be used
Diffstat (limited to 'src/trans/codegen_c.cpp')
-rw-r--r--src/trans/codegen_c.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 983bdfd4..c3532073 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -1315,6 +1315,9 @@ namespace {
switch( stmt.tag() )
{
case ::MIR::Statement::TAGDEAD: throw "";
+ case ::MIR::Statement::TAG_ScopeEnd:
+ m_of << "// " << stmt << "\n";
+ break;
case ::MIR::Statement::TAG_SetDropFlag: {
const auto& e = stmt.as_SetDropFlag();
m_of << "\tdf" << e.idx << " = ";
@@ -1330,7 +1333,7 @@ namespace {
const auto& ty = mir_res.get_lvalue_type(tmp, e.slot);
if( e.flag_idx != ~0u )
- m_of << "if( df" << e.flag_idx << " ) {\n";
+ m_of << "\tif( df" << e.flag_idx << " ) {\n";
switch( e.kind )
{
@@ -1353,7 +1356,7 @@ namespace {
break;
}
if( e.flag_idx != ~0u )
- m_of << "}\n";
+ m_of << "\t}\n";
break; }
case ::MIR::Statement::TAG_Asm: {
const auto& e = stmt.as_Asm();
@@ -2720,7 +2723,11 @@ namespace {
if( ' ' <= v && v < 0x7F && v != '"' && v != '\\' )
m_of << v;
else
+ {
m_of << "\\" << ((unsigned int)v & 0xFF);
+ if( isdigit( *(&v+1) ) )
+ m_of << "\"\"";
+ }
}
m_of << "\"" << ::std::dec;
m_of << ";\n\t";