diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-04-22 13:31:07 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-04-22 13:31:07 +0800 |
commit | 83b9e560df97f054dc2ea0660cda3fb55cd274d7 (patch) | |
tree | 057be3e50eee6278f00b260a581d08931aa6e929 /src/trans/codegen_c.cpp | |
parent | 6f5792ac00800b1a28b8c9c81eb80046f37b2f03 (diff) | |
download | mrust-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.cpp | 11 |
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"; |