1 /* 2 * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef ECMASCRIPT_COMPILER_ECMA_OPCODE_DES_H 16 #define ECMASCRIPT_COMPILER_ECMA_OPCODE_DES_H 17 18 #include <map> 19 #include <string> 20 #include <vector> 21 22 #include "ecmascript/compiler/bytecodes.h" 23 24 namespace panda::ecmascript::kungfu { 25 26 #define ECMA_OPCODE_LIST(V) \ 27 V(LDNAN) \ 28 V(LDINFINITY) \ 29 V(LDNEWTARGET) \ 30 V(LDUNDEFINED) \ 31 V(LDNULL) \ 32 V(LDSYMBOL) \ 33 V(LDGLOBAL) \ 34 V(LDTRUE) \ 35 V(LDFALSE) \ 36 V(LDHOLE) \ 37 V(LDTHIS) \ 38 V(POPLEXENV) \ 39 V(GETUNMAPPEDARGS) \ 40 V(ASYNCFUNCTIONENTER) \ 41 V(CREATEASYNCGENERATOROBJ_V8) \ 42 V(LDFUNCTION) \ 43 V(DEBUGGER) \ 44 V(GETPROPITERATOR) \ 45 V(GETITERATOR_IMM8) \ 46 V(GETITERATOR_IMM16) \ 47 V(CLOSEITERATOR_IMM8_V8) \ 48 V(CLOSEITERATOR_IMM16_V8) \ 49 V(ASYNCGENERATORRESOLVE_V8_V8_V8) \ 50 V(CREATEEMPTYOBJECT) \ 51 V(CREATEEMPTYARRAY_IMM8) \ 52 V(CREATEEMPTYARRAY_IMM16) \ 53 V(CREATEGENERATOROBJ_V8) \ 54 V(CREATEITERRESULTOBJ_V8_V8) \ 55 V(CREATEOBJECTWITHEXCLUDEDKEYS_IMM8_V8_V8) \ 56 V(CALLTHIS0_IMM8_V8) \ 57 V(CREATEARRAYWITHBUFFER_IMM8_ID16) \ 58 V(CREATEARRAYWITHBUFFER_IMM16_ID16) \ 59 V(CALLTHIS1_IMM8_V8_V8) \ 60 V(CALLTHIS2_IMM8_V8_V8_V8) \ 61 V(CREATEOBJECTWITHBUFFER_IMM8_ID16) \ 62 V(CREATEOBJECTWITHBUFFER_IMM16_ID16) \ 63 V(CREATEREGEXPWITHLITERAL_IMM8_ID16_IMM8) \ 64 V(CREATEREGEXPWITHLITERAL_IMM16_ID16_IMM8) \ 65 V(NEWOBJAPPLY_IMM8_V8) \ 66 V(NEWOBJAPPLY_IMM16_V8) \ 67 V(NEWOBJRANGE_IMM8_IMM8_V8) \ 68 V(NEWOBJRANGE_IMM16_IMM8_V8) \ 69 V(WIDE_NEWOBJRANGE_PREF_IMM16_V8) \ 70 V(NEWLEXENV_IMM8) \ 71 V(NEWLEXENVWITHNAME_IMM8_ID16) \ 72 V(ADD2_IMM8_V8) \ 73 V(SUB2_IMM8_V8) \ 74 V(MUL2_IMM8_V8) \ 75 V(DIV2_IMM8_V8) \ 76 V(MOD2_IMM8_V8) \ 77 V(EQ_IMM8_V8) \ 78 V(NOTEQ_IMM8_V8) \ 79 V(LESS_IMM8_V8) \ 80 V(LESSEQ_IMM8_V8) \ 81 V(GREATER_IMM8_V8) \ 82 V(GREATEREQ_IMM8_V8) \ 83 V(SHL2_IMM8_V8) \ 84 V(SHR2_IMM8_V8) \ 85 V(ASHR2_IMM8_V8) \ 86 V(AND2_IMM8_V8) \ 87 V(OR2_IMM8_V8) \ 88 V(XOR2_IMM8_V8) \ 89 V(EXP_IMM8_V8) \ 90 V(TYPEOF_IMM8) \ 91 V(TYPEOF_IMM16) \ 92 V(TONUMBER_IMM8) \ 93 V(TONUMERIC_IMM8) \ 94 V(NEG_IMM8) \ 95 V(NOT_IMM8) \ 96 V(INC_IMM8) \ 97 V(DEC_IMM8) \ 98 V(ISIN_IMM8_V8) \ 99 V(INSTANCEOF_IMM8_V8) \ 100 V(STRICTNOTEQ_IMM8_V8) \ 101 V(STRICTEQ_IMM8_V8) \ 102 V(ISTRUE) \ 103 V(ISFALSE) \ 104 V(CALLTHIS3_IMM8_V8_V8_V8_V8) \ 105 V(CALLTHISRANGE_IMM8_IMM8_V8) \ 106 V(WIDE_SUPERCALLTHISRANGE_PREF_IMM16_V8) \ 107 V(SUPERCALLTHISRANGE_IMM8_IMM8_V8) \ 108 V(SUPERCALLARROWRANGE_IMM8_IMM8_V8) \ 109 V(CALLRUNTIME_SUPERCALLFORWARDALLARGS_PREF_V8) \ 110 V(DEFINEFUNC_IMM8_ID16_IMM8) \ 111 V(DEFINEFUNC_IMM16_ID16_IMM8) \ 112 V(DEFINEMETHOD_IMM8_ID16_IMM8) \ 113 V(DEFINEMETHOD_IMM16_ID16_IMM8) \ 114 V(CALLARG0_IMM8) \ 115 V(SUPERCALLSPREAD_IMM8_V8) \ 116 V(APPLY_IMM8_V8_V8) \ 117 V(CALLARGS2_IMM8_V8_V8) \ 118 V(CALLARGS3_IMM8_V8_V8_V8) \ 119 V(CALLRANGE_IMM8_IMM8_V8) \ 120 V(LDEXTERNALMODULEVAR_IMM8) \ 121 V(LDTHISBYNAME_IMM8_ID16) \ 122 V(LDTHISBYNAME_IMM16_ID16) \ 123 V(LDOBJBYNAME_IMM8_ID16) \ 124 V(LDOBJBYNAME_IMM16_ID16) \ 125 V(DEFINEGETTERSETTERBYVALUE_V8_V8_V8_V8) \ 126 V(STTHISBYNAME_IMM8_ID16) \ 127 V(STTHISBYNAME_IMM16_ID16) \ 128 V(STOBJBYNAME_IMM8_ID16_V8) \ 129 V(STOBJBYNAME_IMM16_ID16_V8) \ 130 V(DEFINEFIELDBYNAME_IMM8_ID16_V8) \ 131 V(DEFINEPROPERTYBYNAME_IMM8_ID16_V8) \ 132 V(LDTHISBYVALUE_IMM8) \ 133 V(LDTHISBYVALUE_IMM16) \ 134 V(LDOBJBYVALUE_IMM8_V8) \ 135 V(LDOBJBYVALUE_IMM16_V8) \ 136 V(STTHISBYVALUE_IMM8_V8) \ 137 V(STTHISBYVALUE_IMM16_V8) \ 138 V(DYNAMICIMPORT) \ 139 V(DEFINECLASSWITHBUFFER_IMM8_ID16_ID16_IMM16_V8) \ 140 V(DEFINECLASSWITHBUFFER_IMM16_ID16_ID16_IMM16_V8) \ 141 V(RESUMEGENERATOR) \ 142 V(GETRESUMEMODE) \ 143 V(GETTEMPLATEOBJECT_IMM8) \ 144 V(GETTEMPLATEOBJECT_IMM16) \ 145 V(GETNEXTPROPNAME_V8) \ 146 V(JEQZ_IMM8) \ 147 V(JEQZ_IMM16) \ 148 V(JEQZ_IMM32) \ 149 V(SETOBJECTWITHPROTO_IMM8_V8) \ 150 V(DELOBJPROP_V8) \ 151 V(SUSPENDGENERATOR_V8) \ 152 V(ASYNCFUNCTIONAWAITUNCAUGHT_V8) \ 153 V(COPYDATAPROPERTIES_V8) \ 154 V(STARRAYSPREAD_V8_V8) \ 155 V(SETOBJECTWITHPROTO_IMM16_V8) \ 156 V(STOBJBYVALUE_IMM8_V8_V8) \ 157 V(STOBJBYVALUE_IMM16_V8_V8) \ 158 V(STOWNBYVALUE_IMM8_V8_V8) \ 159 V(STOWNBYVALUE_IMM16_V8_V8) \ 160 V(LDSUPERBYVALUE_IMM8_V8) \ 161 V(LDSUPERBYVALUE_IMM16_V8) \ 162 V(STSUPERBYVALUE_IMM8_V8_V8) \ 163 V(STSUPERBYVALUE_IMM16_V8_V8) \ 164 V(LDOBJBYINDEX_IMM8_IMM16) \ 165 V(LDOBJBYINDEX_IMM16_IMM16) \ 166 V(WIDE_LDOBJBYINDEX_PREF_IMM32) \ 167 V(STOBJBYINDEX_IMM8_V8_IMM16) \ 168 V(STOBJBYINDEX_IMM16_V8_IMM16) \ 169 V(WIDE_STOBJBYINDEX_PREF_V8_IMM32) \ 170 V(STOWNBYINDEX_IMM8_V8_IMM16) \ 171 V(STOWNBYINDEX_IMM16_V8_IMM16) \ 172 V(ASYNCFUNCTIONRESOLVE_V8) \ 173 V(ASYNCFUNCTIONREJECT_V8) \ 174 V(COPYRESTARGS_IMM8) \ 175 V(LDLEXVAR_IMM4_IMM4) \ 176 V(STLEXVAR_IMM4_IMM4) \ 177 V(GETMODULENAMESPACE_IMM8) \ 178 V(STMODULEVAR_IMM8) \ 179 V(TRYLDGLOBALBYNAME_IMM8_ID16) \ 180 V(TRYLDGLOBALBYNAME_IMM16_ID16) \ 181 V(TRYSTGLOBALBYNAME_IMM8_ID16) \ 182 V(TRYSTGLOBALBYNAME_IMM16_ID16) \ 183 V(LDGLOBALVAR_IMM16_ID16) \ 184 V(STGLOBALVAR_IMM16_ID16) \ 185 V(STOWNBYNAME_IMM8_ID16_V8) \ 186 V(STOWNBYNAME_IMM16_ID16_V8) \ 187 V(LDSUPERBYNAME_IMM8_ID16) \ 188 V(LDSUPERBYNAME_IMM16_ID16) \ 189 V(STSUPERBYNAME_IMM8_ID16_V8) \ 190 V(STSUPERBYNAME_IMM16_ID16_V8) \ 191 V(LDLOCALMODULEVAR_IMM8) \ 192 V(STCONSTTOGLOBALRECORD_IMM16_ID16) \ 193 V(STTOGLOBALRECORD_IMM16_ID16) \ 194 V(JNEZ_IMM8) \ 195 V(JNEZ_IMM16) \ 196 V(JNEZ_IMM32) \ 197 V(STOWNBYVALUEWITHNAMESET_IMM8_V8_V8) \ 198 V(STOWNBYVALUEWITHNAMESET_IMM16_V8_V8) \ 199 V(STOWNBYNAMEWITHNAMESET_IMM8_ID16_V8) \ 200 V(STOWNBYNAMEWITHNAMESET_IMM16_ID16_V8) \ 201 V(LDBIGINT_ID16) \ 202 V(LDA_STR_ID16) \ 203 V(JMP_IMM8) \ 204 V(JMP_IMM16) \ 205 V(JMP_IMM32) \ 206 V(JSTRICTEQZ_IMM8) \ 207 V(JSTRICTEQZ_IMM16) \ 208 V(JNSTRICTEQZ_IMM8) \ 209 V(JNSTRICTEQZ_IMM16) \ 210 V(JEQNULL_IMM8) \ 211 V(JEQNULL_IMM16) \ 212 V(LDA_V8) \ 213 V(STA_V8) \ 214 V(LDAI_IMM32) \ 215 V(FLDAI_IMM64) \ 216 V(RETURN) \ 217 V(RETURNUNDEFINED) \ 218 V(LDLEXVAR_IMM8_IMM8) \ 219 V(JNENULL_IMM8) \ 220 V(STLEXVAR_IMM8_IMM8) \ 221 V(JNENULL_IMM16) \ 222 V(CALLARG1_IMM8_V8) \ 223 V(JSTRICTEQNULL_IMM8) \ 224 V(JSTRICTEQNULL_IMM16) \ 225 V(JNSTRICTEQNULL_IMM8) \ 226 V(JNSTRICTEQNULL_IMM16) \ 227 V(JEQUNDEFINED_IMM8) \ 228 V(JEQUNDEFINED_IMM16) \ 229 V(JNEUNDEFINED_IMM8) \ 230 V(JNEUNDEFINED_IMM16) \ 231 V(JSTRICTEQUNDEFINED_IMM8) \ 232 V(JSTRICTEQUNDEFINED_IMM16) \ 233 V(JNSTRICTEQUNDEFINED_IMM8) \ 234 V(JNSTRICTEQUNDEFINED_IMM16) \ 235 V(JEQ_V8_IMM8) \ 236 V(JEQ_V8_IMM16) \ 237 V(JNE_V8_IMM8) \ 238 V(JNE_V8_IMM16) \ 239 V(JSTRICTEQ_V8_IMM8) \ 240 V(JSTRICTEQ_V8_IMM16) \ 241 V(JNSTRICTEQ_V8_IMM8) \ 242 V(JNSTRICTEQ_V8_IMM16) \ 243 V(MOV_V4_V4) \ 244 V(MOV_V8_V8) \ 245 V(MOV_V16_V16) \ 246 V(ASYNCGENERATORREJECT_V8) \ 247 V(NOP) \ 248 V(SETGENERATORSTATE_IMM8) \ 249 V(GETASYNCITERATOR_IMM8) \ 250 V(LDPRIVATEPROPERTY_IMM8_IMM16_IMM16) \ 251 V(STPRIVATEPROPERTY_IMM8_IMM16_IMM16_V8) \ 252 V(TESTIN_IMM8_IMM16_IMM16) \ 253 V(DEPRECATED_LDLEXENV_PREF_NONE) \ 254 V(WIDE_CREATEOBJECTWITHEXCLUDEDKEYS_PREF_IMM16_V8_V8) \ 255 V(THROW_PREF_NONE) \ 256 V(DEPRECATED_POPLEXENV_PREF_NONE) \ 257 V(THROW_NOTEXISTS_PREF_NONE) \ 258 V(DEPRECATED_GETITERATORNEXT_PREF_V8_V8) \ 259 V(WIDE_NEWLEXENV_PREF_IMM16) \ 260 V(THROW_PATTERNNONCOERCIBLE_PREF_NONE) \ 261 V(DEPRECATED_CREATEARRAYWITHBUFFER_PREF_IMM16) \ 262 V(WIDE_NEWLEXENVWITHNAME_PREF_IMM16_ID16) \ 263 V(THROW_DELETESUPERPROPERTY_PREF_NONE) \ 264 V(DEPRECATED_CREATEOBJECTWITHBUFFER_PREF_IMM16) \ 265 V(WIDE_CALLRANGE_PREF_IMM16_V8) \ 266 V(THROW_CONSTASSIGNMENT_PREF_V8) \ 267 V(DEPRECATED_TONUMBER_PREF_V8) \ 268 V(WIDE_CALLTHISRANGE_PREF_IMM16_V8) \ 269 V(THROW_IFNOTOBJECT_PREF_V8) \ 270 V(DEPRECATED_TONUMERIC_PREF_V8) \ 271 V(THROW_UNDEFINEDIFHOLE_PREF_V8_V8) \ 272 V(THROW_UNDEFINEDIFHOLEWITHNAME_PREF_ID16) \ 273 V(DEPRECATED_NEG_PREF_V8) \ 274 V(WIDE_SUPERCALLARROWRANGE_PREF_IMM16_V8) \ 275 V(THROW_IFSUPERNOTCORRECTCALL_PREF_IMM8) \ 276 V(DEPRECATED_NOT_PREF_V8) \ 277 V(THROW_IFSUPERNOTCORRECTCALL_PREF_IMM16) \ 278 V(DEPRECATED_INC_PREF_V8) \ 279 V(DEPRECATED_DEC_PREF_V8) \ 280 V(WIDE_STOWNBYINDEX_PREF_V8_IMM32) \ 281 V(DEPRECATED_CALLARG0_PREF_V8) \ 282 V(WIDE_COPYRESTARGS_PREF_IMM16) \ 283 V(DEPRECATED_CALLARG1_PREF_V8_V8) \ 284 V(WIDE_LDLEXVAR_PREF_IMM16_IMM16) \ 285 V(DEPRECATED_CALLARGS2_PREF_V8_V8_V8) \ 286 V(WIDE_STLEXVAR_PREF_IMM16_IMM16) \ 287 V(DEPRECATED_CALLARGS3_PREF_V8_V8_V8_V8) \ 288 V(WIDE_GETMODULENAMESPACE_PREF_IMM16) \ 289 V(DEPRECATED_CALLRANGE_PREF_IMM16_V8) \ 290 V(WIDE_STMODULEVAR_PREF_IMM16) \ 291 V(DEPRECATED_CALLSPREAD_PREF_V8_V8_V8) \ 292 V(WIDE_LDLOCALMODULEVAR_PREF_IMM16) \ 293 V(DEPRECATED_CALLTHISRANGE_PREF_IMM16_V8) \ 294 V(WIDE_LDEXTERNALMODULEVAR_PREF_IMM16) \ 295 V(DEPRECATED_DEFINECLASSWITHBUFFER_PREF_ID16_IMM16_IMM16_V8_V8) \ 296 V(WIDE_LDPATCHVAR_PREF_IMM16) \ 297 V(DEPRECATED_RESUMEGENERATOR_PREF_V8) \ 298 V(WIDE_STPATCHVAR_PREF_IMM16) \ 299 V(DEPRECATED_GETRESUMEMODE_PREF_V8) \ 300 V(DEPRECATED_GETTEMPLATEOBJECT_PREF_V8) \ 301 V(DEPRECATED_DELOBJPROP_PREF_V8_V8) \ 302 V(DEPRECATED_SUSPENDGENERATOR_PREF_V8_V8) \ 303 V(DEPRECATED_ASYNCFUNCTIONAWAITUNCAUGHT_PREF_V8_V8) \ 304 V(DEPRECATED_COPYDATAPROPERTIES_PREF_V8_V8) \ 305 V(DEPRECATED_SETOBJECTWITHPROTO_PREF_V8_V8) \ 306 V(DEPRECATED_LDOBJBYVALUE_PREF_V8_V8) \ 307 V(DEPRECATED_LDSUPERBYVALUE_PREF_V8_V8) \ 308 V(DEPRECATED_LDOBJBYINDEX_PREF_V8_IMM32) \ 309 V(DEPRECATED_ASYNCFUNCTIONRESOLVE_PREF_V8_V8_V8) \ 310 V(DEPRECATED_ASYNCFUNCTIONREJECT_PREF_V8_V8_V8) \ 311 V(DEPRECATED_STLEXVAR_PREF_IMM4_IMM4_V8) \ 312 V(DEPRECATED_STLEXVAR_PREF_IMM8_IMM8_V8) \ 313 V(DEPRECATED_STLEXVAR_PREF_IMM16_IMM16_V8) \ 314 V(DEPRECATED_GETMODULENAMESPACE_PREF_ID32) \ 315 V(DEPRECATED_STMODULEVAR_PREF_ID32) \ 316 V(DEPRECATED_LDOBJBYNAME_PREF_ID32_V8) \ 317 V(DEPRECATED_LDSUPERBYNAME_PREF_ID32_V8) \ 318 V(DEPRECATED_LDMODULEVAR_PREF_ID32_IMM8) \ 319 V(DEPRECATED_STCONSTTOGLOBALRECORD_PREF_ID32) \ 320 V(DEPRECATED_STLETTOGLOBALRECORD_PREF_ID32) \ 321 V(DEPRECATED_STCLASSTOGLOBALRECORD_PREF_ID32) \ 322 V(DEPRECATED_LDHOMEOBJECT_PREF_NONE) \ 323 V(DEPRECATED_CREATEOBJECTHAVINGMETHOD_PREF_IMM16) \ 324 V(DEPRECATED_DYNAMICIMPORT_PREF_V8) \ 325 V(CALLRUNTIME_NOTIFYCONCURRENTRESULT_PREF_NONE) \ 326 V(CALLRUNTIME_DEFINEFIELDBYVALUE_PREF_IMM8_V8_V8) \ 327 V(CALLRUNTIME_DEFINEFIELDBYINDEX_PREF_IMM8_IMM32_V8) \ 328 V(CALLRUNTIME_TOPROPERTYKEY_PREF_NONE) \ 329 V(CALLRUNTIME_CREATEPRIVATEPROPERTY_PREF_IMM16_ID16) \ 330 V(CALLRUNTIME_DEFINEPRIVATEPROPERTY_PREF_IMM8_IMM16_IMM16_V8) \ 331 V(CALLRUNTIME_CALLINIT_PREF_IMM8_V8) \ 332 V(CALLRUNTIME_DEFINESENDABLECLASS_PREF_IMM16_ID16_ID16_IMM16_V8) \ 333 V(CALLRUNTIME_LDSENDABLECLASS_PREF_IMM16) \ 334 V(CALLRUNTIME_LDSENDABLEEXTERNALMODULEVAR_PREF_IMM8) \ 335 V(CALLRUNTIME_WIDELDSENDABLEEXTERNALMODULEVAR_PREF_IMM16) \ 336 V(CALLRUNTIME_NEWSENDABLEENV_PREF_IMM8) \ 337 V(CALLRUNTIME_WIDENEWSENDABLEENV_PREF_IMM16) \ 338 V(CALLRUNTIME_STSENDABLEVAR_PREF_IMM4_IMM4) \ 339 V(CALLRUNTIME_STSENDABLEVAR_PREF_IMM8_IMM8) \ 340 V(CALLRUNTIME_WIDESTSENDABLEVAR_PREF_IMM16_IMM16) \ 341 V(CALLRUNTIME_LDSENDABLEVAR_PREF_IMM4_IMM4) \ 342 V(CALLRUNTIME_LDSENDABLEVAR_PREF_IMM8_IMM8) \ 343 V(CALLRUNTIME_WIDELDSENDABLEVAR_PREF_IMM16_IMM16) \ 344 V(CALLRUNTIME_ISTRUE_PREF_IMM8) \ 345 V(CALLRUNTIME_ISFALSE_PREF_IMM8) \ 346 V(CALLRUNTIME_LDLAZYMODULEVAR_PREF_IMM8) \ 347 V(CALLRUNTIME_WIDELDLAZYMODULEVAR_PREF_IMM16) \ 348 V(CALLRUNTIME_LDLAZYSENDABLEMODULEVAR_PREF_IMM8) \ 349 V(CALLRUNTIME_WIDELDLAZYSENDABLEMODULEVAR_PREF_IMM16) \ 350 GetEcmaOpcodeStr(EcmaOpcode opcode)351inline std::string GetEcmaOpcodeStr(EcmaOpcode opcode) 352 { 353 const std::map<EcmaOpcode, const char *> strMap = { 354 #define BYTECODE_NAME_MAP(name) { EcmaOpcode::name, #name }, 355 ECMA_OPCODE_LIST(BYTECODE_NAME_MAP) 356 #undef BYTECODE_NAME_MAP 357 }; 358 if (strMap.count(opcode) > 0) { 359 return strMap.at(opcode); 360 } 361 return "bytecode-" + std::to_string(static_cast<uint16_t>(opcode)); 362 } 363 GetEcmaCodeListForRange()364inline std::vector<EcmaOpcode> GetEcmaCodeListForRange() 365 { 366 std::vector<EcmaOpcode> lorwingOpCodeList = { 367 #define BYTECODE_NAME_VECTOR(name) EcmaOpcode::name, 368 ECMA_OPCODE_LIST(BYTECODE_NAME_VECTOR) 369 #undef BYTECODE_NAME_VECTOR 370 }; 371 return lorwingOpCodeList; 372 } 373 GetHelpForEcmaCodeListForRange()374inline std::string GetHelpForEcmaCodeListForRange() 375 { 376 int32_t i = 0; 377 std::vector<EcmaOpcode> lorwingOpCodeList = GetEcmaCodeListForRange(); 378 std::string optBCRangeStr; 379 optBCRangeStr.append(" bytecode for list: \n"); 380 for (auto ecmaOpCode : lorwingOpCodeList) { 381 optBCRangeStr.append(" index:" + std::to_string(i) + " ecmaOpCode:" + GetEcmaOpcodeStr(ecmaOpCode) + "\n"); 382 i++; 383 } 384 return optBCRangeStr; 385 } 386 } // namespace panda::ecmascript::kungfu 387 #endif // ECMASCRIPT_COMPILER_ECMA_OPCODE_DES_H_ 388