1919#include " type2.h"
2020
2121#include < cstring>
22- #include < sstream>
2322
2423static int getValue (const uint8_t *data, size_t dataSize, uint8_t maxValue, bool *done = nullptr )
2524{
@@ -54,19 +53,20 @@ static std::string generateExpression2_lvalue(const uint8_t *data, size_t dataSi
5453
5554static std::string generateExpression2_Op (const uint8_t *data, size_t dataSize, uint8_t numberOfGlobalConstants)
5655{
57- std::ostringstream code;
56+ std::string code;
5857 switch (getValue (data, dataSize, 3 )) {
5958 case 0 :
60- code << generateExpression2_lvalue (data, dataSize);
59+ code += generateExpression2_lvalue (data, dataSize);
6160 break ;
6261 case 1 :
63- code << " globalconstant" << (1 + getValue (data, dataSize, numberOfGlobalConstants));
62+ code += " globalconstant" ;
63+ code += (1 + getValue (data, dataSize, numberOfGlobalConstants));
6464 break ;
6565 case 2 :
66- code << (getValue (data, dataSize, 0x80 ) * 0x80 + getValue (data, dataSize, 0x80 ));
66+ code += (getValue (data, dataSize, 0x80 ) * 0x80 + getValue (data, dataSize, 0x80 ));
6767 break ;
6868 }
69- return code. str () ;
69+ return code;
7070}
7171
7272static std::string generateExpression2_Expr (const uint8_t *data, size_t dataSize, uint8_t numberOfGlobalConstants, int depth=0 )
@@ -130,12 +130,14 @@ static std::string generateExpression2_conditionalCode(const std::string &indent
130130 size_t dataSize,
131131 uint8_t numberOfGlobalConstants)
132132{
133- std::ostringstream code;
133+ std::string code;
134134
135135 if (indent.empty ())
136- code << functionStart ();
137- else
138- code << indent << " {\n " ;
136+ code += functionStart ();
137+ else {
138+ code += indent;
139+ code += " {\n " ;
140+ }
139141
140142 for (int line = 0 ; line < 4 || indent.empty (); ++line) {
141143 bool done = false ;
@@ -150,37 +152,60 @@ static std::string generateExpression2_conditionalCode(const std::string &indent
150152 ((type1 >= 5 ) ? mostLikelyType : type1);
151153
152154 if (type2 == 0 ) {
153- code << indent << " var" << getValue (data, dataSize, 5 ) << " =" << generateExpression2_Expr (data, dataSize, numberOfGlobalConstants) << " ;\n " ;
155+ code += indent;
156+ code += " var" ;
157+ code += getValue (data, dataSize, 5 );
158+ code += " =" ;
159+ code += generateExpression2_Expr (data, dataSize, numberOfGlobalConstants);
160+ code += " ;\n " ;
154161 } else if (type2 == 1 ) {
155- code << indent << " if (" << generateExpression2_Cond (data, dataSize, numberOfGlobalConstants) << " )\n " ;
156- code << generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
162+ code += indent;
163+ code += " if (" ;
164+ code += generateExpression2_Cond (data, dataSize, numberOfGlobalConstants);
165+ code += " )\n " ;
166+ code += generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
157167 } else if (type2 == 2 ) {
158- code << indent << " if (" << generateExpression2_Cond (data, dataSize, numberOfGlobalConstants) << " )\n " ;
159- code << generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
160- code << indent << " else\n " ;
161- code << generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
168+ code += indent;
169+ code += " if (" ;
170+ code += generateExpression2_Cond (data, dataSize, numberOfGlobalConstants);
171+ code += " )\n " ;
172+ code += generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
173+ code += indent;
174+ code += " else\n " ;
175+ code += generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
162176 } else if (type2 == 3 ) {
163- code << indent << " while (" << generateExpression2_Cond (data, dataSize, numberOfGlobalConstants) << " )\n " ;
164- code << generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
177+ code += indent;
178+ code += " while (" ;
179+ code += generateExpression2_Cond (data, dataSize, numberOfGlobalConstants);
180+ code += " )\n " ;
181+ code += generateExpression2_conditionalCode (indent + " " , data, dataSize, numberOfGlobalConstants);
165182 } else if (type2 == 4 ) {
166- code << indent << " return " << generateExpression2_Expr (data, dataSize, numberOfGlobalConstants) << " ;\n " ;
167- if (indent.empty ())
168- code << " }\n\n " << functionStart ();
183+ code += indent;
184+ code += " return " ;
185+ code += generateExpression2_Expr (data, dataSize, numberOfGlobalConstants);
186+ code += " ;\n " ;
187+ if (indent.empty ()) {
188+ code += " }\n\n " ;
189+ code += functionStart ();
190+ }
169191 else
170192 break ;
171193 }
172194 }
173195
174- if (!indent.empty ())
175- code << indent << " }\n " ;
176- else
177- code << " return 0;\n }\n " ;
178- return code.str ();
196+ if (!indent.empty ()) {
197+ code += indent;
198+ code += " }\n " ;
199+ }
200+ else {
201+ code += " return 0;\n }\n " ;
202+ }
203+ return code;
179204}
180205
181206std::string generateCode2 (const uint8_t *data, size_t dataSize)
182207{
183- std::ostringstream code;
208+ std::string code;
184209
185210 // create global constants
186211 constexpr uint8_t numberOfGlobalConstants = 0 ;
@@ -192,15 +217,15 @@ std::string generateCode2(const uint8_t *data, size_t dataSize)
192217 }
193218 */
194219
195- code << " int var1 = 1;\n "
196- " int var2 = 0;\n "
197- " int var3 = 1;\n "
198- " int var4 = 0;\n "
199- " int var5 = -1;\n\n " ;
220+ code += " int var1 = 1;\n "
221+ " int var2 = 0;\n "
222+ " int var3 = 1;\n "
223+ " int var4 = 0;\n "
224+ " int var5 = -1;\n\n " ;
200225
201- code << generateExpression2_conditionalCode (" " , data, dataSize, numberOfGlobalConstants);
226+ code += generateExpression2_conditionalCode (" " , data, dataSize, numberOfGlobalConstants);
202227
203- return code. str () ;
228+ return code;
204229}
205230
206231
0 commit comments