1 /* 2 * Copyright (c) 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 16 #ifndef CPP_ABCKIT_DYNAMIC_ISA_H 17 #define CPP_ABCKIT_DYNAMIC_ISA_H 18 19 #include "./instruction.h" 20 #include "./core/import_descriptor.h" 21 #include "config.h" 22 23 #include <cstdint> 24 #include <string_view> 25 26 namespace abckit { 27 28 /** 29 * @brief DynamicIsa class containing API's for dynamic ISA manipulation 30 */ 31 class DynamicIsa final { 32 /// @brief To access private constructor 33 friend class abckit::Graph; 34 35 public: 36 /** 37 * @brief Deleted constructor 38 * @param other 39 */ 40 DynamicIsa(const DynamicIsa &other) = delete; 41 42 /** 43 * @brief Deleted constructor 44 * @param other 45 * @return DynamicIsa 46 */ 47 DynamicIsa &operator=(const DynamicIsa &other) = delete; 48 49 /** 50 * @brief Deleted constructor 51 * @param other 52 */ 53 DynamicIsa(DynamicIsa &&other) = delete; 54 55 /** 56 * @brief Deleted constructor 57 * @param other 58 * @return DynamicIsa 59 */ 60 DynamicIsa &operator=(DynamicIsa &&other) = delete; 61 62 /** 63 * @brief Destructor 64 */ 65 ~DynamicIsa() = default; 66 67 // Rvalue annotated so we can call it only in callchain context 68 69 /** 70 * @brief Creates instruction with opcode LOAD_STRING. This instruction loads the string `string` into `acc`. 71 * @return Instruction 72 * @param string to load 73 */ 74 Instruction CreateLoadString(std::string_view string) &&; 75 76 /** 77 * @brief Creates instruction with opcode SUB2. This instruction computes the binary operation `input0 - acc`, and 78 * stores the result in returned instruction. 79 * @return Instruction 80 * @param [ in ] acc - Inst containing right operand. 81 * @param [ in ] input0 - Inst containing left operand. 82 */ 83 Instruction CreateSub2(Instruction acc, Instruction input0) &&; 84 85 /** 86 * @brief Retruns Module for `inst`. 87 * @return Instruction 88 * @param [ in ] inst - Inst to be inspected. 89 */ 90 core::Module GetModule(Instruction inst) &&; 91 92 /** 93 * @brief Sets Module for `inst`. 94 * @return Instruction which is new state for inst. 95 * @param [ in ] inst - Inst to be modified. 96 * @param [ in ] mdl - Module to be set. 97 */ 98 Instruction SetModule(Instruction inst, core::Module mdl) &&; 99 100 /** 101 * @brief Returns condition code of `inst`. 102 * @return enum value of `AbckitIsaApiDynamicConditionCode`. 103 * @param [ in ] inst - Inst to be inspected. 104 */ 105 AbckitIsaApiDynamicConditionCode GetConditionCode(Instruction inst) &&; 106 107 /** 108 * @brief Sets condition code of `inst`. 109 * @return Instruction which is new state for inst. 110 * @param [ in ] inst - Inst to be modified. 111 * @param [ in ] cc - Condition code to be set. 112 */ 113 Instruction SetConditionCode(Instruction inst, enum AbckitIsaApiDynamicConditionCode cc) &&; 114 115 /** 116 * @brief Returns opcode of `inst`. 117 * @return `AbckitIsaApiDynamicOpcode` enum value. 118 * @param [ in ] inst - Inst to be inspected. 119 */ 120 AbckitIsaApiDynamicOpcode GetOpcode(Instruction inst) &&; 121 122 /** 123 * @brief Returns import descriptor of `inst`. 124 * @return ImportDescriptor 125 * @param [ in ] inst - Inst to be inspected. 126 */ 127 core::ImportDescriptor GetImportDescriptor(Instruction inst) &&; 128 129 /** 130 * @brief Sets import descriptor of `inst`. 131 * @return Instruction which is new state for inst. 132 * @param [ in ] inst - Inst to be modified. 133 * @param [ in ] descr - Import descriptor to be set. 134 */ 135 Instruction SetImportDescriptor(Instruction inst, core::ImportDescriptor descr) &&; 136 137 /** 138 * @brief Returns export descriptor of `inst`. 139 * @return `core::ExportDescriptor` 140 * @param [ in ] inst - Inst to be inspected. 141 */ 142 core::ExportDescriptor GetExportDescriptor(Instruction inst) &&; 143 144 /** 145 * @brief Sets export descriptor of `inst`. 146 * @return Instruction which is new state for inst. 147 * @param [ in ] inst - Inst to be modified. 148 * @param [ in ] descr - Export descriptor to be set. 149 */ 150 Instruction SetExportDescriptor(Instruction inst, core::ExportDescriptor descr) &&; 151 152 /** 153 * @brief Creates instruction with opcode LDNAN. This instruction loads the `nan` into `acc`. 154 * @return Instruction 155 */ 156 Instruction CreateLdnan() &&; 157 158 /** 159 * @brief Creates instruction with opcode LDINFINITY. This instruction loads the `infinity` into `acc`. 160 * @return Instruction 161 */ 162 Instruction CreateLdinfinity() &&; 163 164 /** 165 * @brief Creates instruction with opcode LDUNDEFINED. This instruction loads the `undefined` into `acc`. 166 * @return Instruction 167 */ 168 Instruction CreateLdundefined() &&; 169 170 /** 171 * @brief Creates instruction with opcode LDNULL. This instruction loads the `null` into `acc`. 172 * @return Instruction 173 */ 174 Instruction CreateLdnull() &&; 175 176 /** 177 * @brief Creates instruction with opcode LDSYMBOL. This instruction loads the object `Symbol` in `acc`. 178 * @return Instruction 179 */ 180 Instruction CreateLdsymbol() &&; 181 182 /** 183 * @brief Creates instruction with opcode LDGLOBAL. This instruction loads the object `global` into `acc`. 184 * @return Instruction 185 */ 186 Instruction CreateLdglobal() &&; 187 188 /** 189 * @brief Creates instruction with opcode LDTRUE. This instruction loads `true` into `acc`. 190 * @return Instruction 191 */ 192 Instruction CreateLdtrue() &&; 193 194 /** 195 * @brief Creates instruction with opcode LDFALSE. This instruction loads `false` into `acc`. 196 * @return Instruction 197 */ 198 Instruction CreateLdfalse() &&; 199 200 /** 201 * @brief Creates instruction with opcode LDHOLE. This instruction loads `hole` into `acc`. 202 * @return Instruction 203 */ 204 Instruction CreateLdhole() &&; 205 206 /** 207 * @brief Creates instruction with opcode LDNEWTARGET. This instruction loads the implicit parameter `new.target` of 208 * the current function into `acc`. 209 * @return Instruction 210 */ 211 Instruction CreateLdnewtarget() &&; 212 213 /** 214 * @brief Creates instruction with opcode LDTHIS. This instruction loads `this` into `acc`. 215 * @return Instruction 216 */ 217 Instruction CreateLdthis() &&; 218 219 /** 220 * @brief Creates instruction with opcode POPLEXENV. This instruction pops the current lexical environment. 221 * @return Instruction 222 */ 223 Instruction CreatePoplexenv() &&; 224 225 /** 226 * @brief Creates instruction with opcode GETUNMAPPEDARGS. This instruction loads the arguments object of the 227 * current function into `acc`. 228 * @return Instruction 229 */ 230 Instruction CreateGetunmappedargs() &&; 231 232 /** 233 * @brief Creates instruction with opcode ASYNCFUNCTIONENTER. This instruction creates an async function object, 234 * and store the object in `acc`. 235 * @return Instruction 236 */ 237 Instruction CreateAsyncfunctionenter() &&; 238 239 /** 240 * @brief Creates instruction with opcode LDFUNCTION. This instruction loads the current function object in `acc`. 241 * @return Instruction 242 */ 243 Instruction CreateLdfunction() &&; 244 245 /** 246 * @brief Creates instruction with opcode DEBUGGER. This instruction pauses execution during debugging. 247 * @return Instruction 248 */ 249 Instruction CreateDebugger() &&; 250 251 /** 252 * @brief Creates instruction with opcode GETPROPITERATOR. This instruction loads `acc`'s for-in iterator into 253 * `acc`. 254 * @return Instruction 255 * @param [ in ] acc - Inst containing object. 256 */ 257 Instruction CreateGetpropiterator(Instruction acc) &&; 258 /** 259 * @brief Creates instruction with opcode GETITERATOR. This instruction executes GetIterator(acc, sync), and stores 260 * the result into `acc`. 261 * @return Instruction 262 * @param [ in ] acc - Inst containing object. 263 */ 264 Instruction CreateGetiterator(Instruction acc) &&; 265 /** 266 * @brief Creates instruction with opcode GETASYNCITERATOR. This instruction executes GetIterator(acc, sync), and 267 * stores the result into `acc`. 268 * @return Instruction 269 * @param [ in ] acc - Inst containing object. 270 */ 271 Instruction CreateGetasynciterator(Instruction acc) &&; 272 273 /** 274 * @brief Creates instruction with opcode LDPRIVATEPROPERTY. This instruction loads the property of `acc` of the 275 * key obtained from the specified lexical position into `acc`. 276 * @return Instruction 277 * @param [ in ] acc - Inst containing object. 278 * @param [ in ] imm0 - Lexical environment level. 279 * @param [ in ] imm1 - Slot number. 280 */ 281 Instruction CreateLdprivateproperty(Instruction acc, uint64_t imm0, uint64_t imm1) &&; 282 283 /** 284 * @brief Creates instruction with opcode STPRIVATEPROPERTY. This instruction loads the property of `input0` of the 285 * key obtained from the specified lexical position into `acc`. 286 * @return Instruction 287 * @param [ in ] acc - ??????????. 288 * @param [ in ] imm0 - Lexical environment level. 289 * @param [ in ] imm1 - Slot number. 290 * @param [ in ] input0 - Inst containing object. 291 */ 292 Instruction CreateStprivateproperty(Instruction acc, uint64_t imm0, uint64_t imm1, Instruction input0) &&; 293 294 /** 295 * @brief Creates instruction with opcode TESTIN. This instruction loads a token from the specified lexical 296 * position, checks whether it is a property of the object stored in `acc`. 297 * @return Instruction 298 * @param [ in ] acc - Inst containing object. 299 * @param [ in ] imm0 - Lexical environment level. 300 * @param [ in ] imm1 - Slot number. 301 */ 302 Instruction CreateTestin(Instruction acc, uint64_t imm0, uint64_t imm1) &&; 303 304 /** 305 * @brief Creates instruction with opcode DEFINEFIELDBYNAME. This instruction defines a property named 'string` for 306 * object `input0`, and stores value `acc` in `string` 307 * @return Instruction 308 * @param [ in ] acc - Value to be stored. 309 * @param [ in ] string - Field name. 310 * @param [ in ] input0 - Inst containing object. 311 */ 312 Instruction CreateDefinefieldbyname(Instruction acc, std::string_view string, Instruction input0) &&; 313 314 /** 315 * @brief Creates instruction with opcode DEFINEPROPERTYBYNAME. 316 * @return Instruction 317 * @param [ in ] acc - Value to be stored. 318 * @param [ in ] string - Property name. 319 * @param [ in ] input0 - Inst containing object. 320 */ 321 Instruction CreateDefinepropertybyname(Instruction acc, std::string_view string, Instruction input0) &&; 322 323 /** 324 * @brief Creates instruction with opcode CREATEEMPTYOBJECT. This instruction creates an empty object, and stores 325 * it in `acc`. 326 * @return Instruction 327 */ 328 Instruction CreateCreateemptyobject() &&; 329 330 /** 331 * @brief Creates instruction with opcode CREATEEMPTYARRAY. This instruction creates an empty array, and stores 332 * it in `acc`. 333 * @return Instruction 334 */ 335 Instruction CreateCreateemptyarray() &&; 336 337 /** 338 * @brief Creates instruction with opcode CREATEGENERATOROBJ. This instruction creates a generator with the 339 * function object `input0`, and stores it in `acc`. 340 * @return Instruction 341 * @param [ in ] input0 - Inst containing function object. 342 */ 343 Instruction CreateCreategeneratorobj(Instruction input0) &&; 344 345 /** 346 * @brief Creates instruction with opcode CREATEITERRESULTOBJ. This instruction executes `CreateIterResultObject` 347 * with arguments `value` `input0` and `done` `input1`. 348 * @return Instruction 349 * @param [ in ] input0 - Inst containing object. 350 * @param [ in ] input1 - Inst containing boolean. 351 */ 352 Instruction CreateCreateiterresultobj(Instruction input0, Instruction input1) &&; 353 354 /** 355 * @brief Creates instruction with opcode CREATEOBJECTWITHEXCLUDEDKEYS. This instruction creates an object based on 356 * object `input0` with excluded properties of the keys `input1`, `inputs[0]`, ..., `inputs[imm0-1]`, and stores 357 * it in `acc`. 358 * @return Instruction 359 * @param [ in ] input0 - Inst containing object. 360 * @param [ in ] input1 - Inst containing first `key`. 361 * @param [ in ] imm0 - Number of optional insts containing `key`s. 362 * @param [ in ] ... - Optional insts containing `key`s. 363 */ 364 template <typename... Args> 365 Instruction CreateCreateobjectwithexcludedkeys(Instruction input0, Instruction input1, uint64_t imm0, 366 Args... /*args*/) &&; 367 368 /** 369 * @brief Creates instruction with opcode WIDE_CREATEOBJECTWITHEXCLUDEDKEYS. This instruction creates an object 370 * based on object `input0` with excluded properties of the keys `input1`, `inputs[0]`, ..., `inputs[imm0-1]`, and 371 * stores it in `acc`. 372 * @return Instruction 373 * @param [ in ] input0 - Inst containing object. 374 * @param [ in ] input1 - Inst containing first `key`. 375 * @param [ in ] imm0 - Number of optional insts containing `key`s. 376 * @param [ in ] ... - Optional insts containing `key`s. 377 */ 378 template <typename... Args> 379 Instruction CreateWideCreateobjectwithexcludedkeys(Instruction input0, Instruction input1, uint64_t imm0, 380 Args... /*args*/) &&; 381 382 /** 383 * @brief Creates instruction with opcode CREATEARRAYWITHBUFFER. This instruction creates an array using literal 384 * array indexed by `literalArray`, and stores it in `acc`. 385 * @return Instruction 386 * @param [ in ] literalArray - Literal array used in array creation. 387 */ 388 Instruction CreateCreatearraywithbuffer(LiteralArray literalArray) &&; 389 390 /** 391 * @brief Creates instruction with opcode CREATEOBJECTWITHBUFFER. This instruction creates an object using literal 392 * array indexed by `literalArray`, and stores it in `acc`. 393 * @return Instruction 394 * @param [ in ] literalArray - Literal array used in object creation. 395 */ 396 Instruction CreateCreateobjectwithbuffer(LiteralArray literalArray) &&; 397 398 /** 399 * @brief Creates instruction with opcode NEWOBJAPPLY. This instruction creates an instance of `input0` with 400 * arguments list `acc`, and stores the instance in `acc`. 401 * @return Instruction 402 * @param [ in ] acc - Inst containing parameter list. 403 * @param [ in ] input0 - Inst containing class object. 404 */ 405 Instruction CreateNewobjapply(Instruction acc, Instruction input0) &&; 406 407 /** 408 * @brief Creates instruction with opcode NEWOBJRANGE. This instruction invokes the constructor of `inputs[0]` with 409 * arguments `inputs[1]`, ..., `inputs[argCount-1]` to create a class instance, and stores the instance in `acc`. 410 * @return Instruction 411 * @param [ in ] input0 - Class object. 412 * @param [ in ] args - Number of insts containing arguments. 413 */ 414 template <typename... Args> 415 Instruction CreateNewobjrange(Instruction input0, Args... args) &&; 416 417 /** 418 * @brief Creates instruction with opcode NEWOBJRANGE. This instruction invokes the constructor of `inputs[0]` with 419 * arguments `inputs[1]`, ..., `inputs[argCount-1]` to create a class instance, and stores the instance in `acc`. 420 * @return Instruction 421 * @param [ in ] input0 - Class object. 422 * @param [ in ] args - Number of insts containing arguments. 423 */ 424 template <typename... Args> 425 Instruction CreateWideNewobjrange(Instruction input0, Args... args) &&; 426 427 /** 428 * @brief Creates instruction with opcode NEWLEXENV. This instruction creates a lexical environment with `imm0` 429 * slots, and stores it in `acc`. 430 * @return Instruction 431 * @param [ in ] imm0 - Number of slots in the lexical environment. 432 */ 433 Instruction CreateNewlexenv(uint64_t imm0) &&; 434 435 /** 436 * @brief Creates instruction with opcode WIDE_NEWLEXENV. This instruction creates a lexical environment with `imm0` 437 * slots, and stores it in `acc`. 438 * @return Instruction 439 * @param [ in ] imm0 - Number of slots in the lexical environment. 440 */ 441 Instruction CreateWideNewlexenv(uint64_t imm0) &&; 442 443 /** 444 * @brief Creates instruction with opcode NEWLEXENVWITHNAME. This instruction creates a lexical environment with 445 * `imm0` slots using the names of lexical variables stored in literal array `literalArray`, and stores the 446 * created environment in `acc`. 447 * @return Instruction 448 * @param [ in ] imm0 - Number of slots in the lexical environment. 449 * @param [ in ] literalArray - Literal array with names of lexical variables. 450 */ 451 Instruction CreateNewlexenvwithname(uint64_t imm0, LiteralArray literalArray) &&; 452 453 /** 454 * @brief Creates instruction with opcode WIDE_NEWLEXENVWITHNAME. This instruction creates a lexical environment 455 * with `imm0` slots using the names of lexical variables stored in literal array `literalArray`, and stores the 456 * created environment in `acc`. 457 * @return Instruction 458 * @param [ in ] imm0 - Number of slots in the lexical environment. 459 * @param [ in ] literalArray - Literal array with names of lexical variables. 460 */ 461 Instruction CreateWideNewlexenvwithname(uint64_t imm0, LiteralArray literalArray) &&; 462 463 /** 464 * @brief Creates instruction with opcode CREATEASYNCGENERATOROBJ. This instruction creates an async generator 465 * function object with the function object `input0`, and stores the generator in `acc`. 466 * @return Instruction 467 * @param [ in ] input0 - Inst containing function object. 468 */ 469 Instruction CreateCreateasyncgeneratorobj(Instruction input0) &&; 470 471 /** 472 * @brief Creates instruction with opcode ASYNCGENERATORRESOLVE. This instruction executes `AsyncGeneratorResolve` 473 * with arguments `generator input0`, `value input1`, and `done input2`. 474 * @return Instruction 475 * @param [ in ] input0 - Inst containing `generator`. 476 * @param [ in ] input1 - Inst containing `value` object. 477 * @param [ in ] input2 - Inst containing `done` boolean. 478 */ 479 Instruction CreateAsyncgeneratorresolve(Instruction input0, Instruction input1, Instruction input2) &&; 480 481 /** 482 * @brief Creates instruction with opcode ADD2. This instruction computes the binary operation `input0 + acc`, and 483 * stores the result in `acc`. 484 * @return Instruction 485 * @param [ in ] acc - Inst containing right operand. 486 * @param [ in ] input0 - Inst containing left operand. 487 */ 488 Instruction CreateAdd2(Instruction acc, Instruction input0) &&; 489 490 /** 491 * @brief Creates instruction with opcode MUL2. This instruction computes the binary operation `input0 * acc`, and 492 * stores the result in `acc`. 493 * @return Instruction 494 * @param [ in ] acc - Inst containing right operand. 495 * @param [ in ] input0 - Inst containing left operand. 496 */ 497 Instruction CreateMul2(Instruction acc, Instruction input0) &&; 498 499 /** 500 * @brief Creates instruction with opcode DIV2. This instruction computes the binary operation `input0 / acc`, and 501 * stores the result in `acc`. 502 * @return Instruction 503 * @param [ in ] acc - Inst containing right operand. 504 * @param [ in ] input0 - Inst containing left operand. 505 */ 506 Instruction CreateDiv2(Instruction acc, Instruction input0) &&; 507 508 /** 509 * @brief Creates instruction with opcode MOD2. This instruction computes the binary operation `input0 % acc`, and 510 * stores the result in `acc`. 511 * @return Instruction 512 * @param [ in ] acc - Inst containing right operand. 513 * @param [ in ] input0 - Inst containing left operand. 514 */ 515 Instruction CreateMod2(Instruction acc, Instruction input0) &&; 516 517 /** 518 * @brief Creates instruction with opcode EQ. This instruction computes the binary operation `input0 == acc`, and 519 * stores the result in `acc`. 520 * @return Instruction 521 * @param [ in ] acc - Inst containing right operand. 522 * @param [ in ] input0 - Inst containing left operand. 523 */ 524 Instruction CreateEq(Instruction acc, Instruction input0) &&; 525 526 /** 527 * @brief Creates instruction with opcode NOTEQ. This instruction computes the binary operation `input0 != acc`, and 528 * stores the result in `acc`. 529 * @return Instruction 530 * @param [ in ] acc - Inst containing right operand. 531 * @param [ in ] input0 - Inst containing left operand. 532 */ 533 Instruction CreateNoteq(Instruction acc, Instruction input0) &&; 534 535 /** 536 * @brief Creates instruction with opcode LESS. This instruction computes the binary operation `input0 < acc`, and 537 * stores the result in `acc`. 538 * @return Instruction 539 * @param [ in ] acc - Inst containing right operand. 540 * @param [ in ] input0 - Inst containing left operand. 541 */ 542 Instruction CreateLess(Instruction acc, Instruction input0) &&; 543 544 /** 545 * @brief Creates instruction with opcode LESSEQ. This instruction computes the binary operation `input0 <= acc`. 546 * @return Instruction 547 * @param [ in ] acc - Inst containing right operand. 548 * @param [ in ] input0 - Inst containing left operand. 549 */ 550 Instruction CreateLesseq(Instruction acc, Instruction input0) &&; 551 552 /** 553 * @brief Creates instruction with opcode GREATER. This instruction computes the binary operation `input0 > acc`. 554 * @return Instruction 555 * @param [ in ] acc - Inst containing right operand. 556 * @param [ in ] input0 - Inst containing left operand. 557 */ 558 Instruction CreateGreater(Instruction acc, Instruction input0) &&; 559 560 /** 561 * @brief Creates instruction with opcode GREATEREQ. This instruction computes the binary operation `input0 >= acc`. 562 * @return Instruction 563 * @param [ in ] acc - Inst containing right operand. 564 * @param [ in ] input0 - Inst containing left operand. 565 */ 566 Instruction CreateGreatereq(Instruction acc, Instruction input0) &&; 567 568 /** 569 * @brief Creates instruction with opcode SHL2. This instruction computes the binary operation `input0 << acc`. 570 * @return Instruction 571 * @param [ in ] acc - Inst containing right operand. 572 * @param [ in ] input0 - Inst containing left operand. 573 */ 574 Instruction CreateShl2(Instruction acc, Instruction input0) &&; 575 576 /** 577 * @brief Creates instruction with opcode SHR2. This instruction computes the binary operation `input0 >> acc`. 578 * @return Instruction 579 * @param [ in ] acc - Inst containing right operand. 580 * @param [ in ] input0 - Inst containing left operand. 581 */ 582 Instruction CreateShr2(Instruction acc, Instruction input0) &&; 583 584 /** 585 * @brief Creates instruction with opcode ASHR2. This instruction computes the binary operation `input0 >>> acc`. 586 * @return Instruction 587 * @param [ in ] acc - Inst containing right operand. 588 * @param [ in ] input0 - Inst containing left operand. 589 */ 590 Instruction CreateAshr2(Instruction acc, Instruction input0) &&; 591 592 /** 593 * @brief Creates instruction with opcode AND2. This instruction computes the binary operation `input0 & acc`. 594 * @return Instruction 595 * @param [ in ] acc - Inst containing right operand. 596 * @param [ in ] input0 - Inst containing left operand. 597 */ 598 Instruction CreateAnd2(Instruction acc, Instruction input0) &&; 599 600 /** 601 * @brief Creates instruction with opcode OR2. This instruction computes the binary operation `input0 | acc`. 602 * @return Instruction 603 * @param [ in ] acc - Inst containing right operand. 604 * @param [ in ] input0 - Inst containing left operand. 605 */ 606 Instruction CreateOr2(Instruction acc, Instruction input0) &&; 607 608 /** 609 * @brief Creates instruction with opcode XOR2. This instruction computes the binary operation `input0 ^ acc`. 610 * @return Instruction 611 * @param [ in ] acc - Inst containing right operand. 612 * @param [ in ] input0 - Inst containing left operand. 613 */ 614 Instruction CreateXor2(Instruction acc, Instruction input0) &&; 615 616 /** 617 * @brief Creates instruction with opcode EXP. This instruction computes the binary operation `input0 ** acc`. 618 * @return Instruction 619 * @param [ in ] acc - Inst containing right operand. 620 * @param [ in ] input0 - Inst containing left operand. 621 */ 622 Instruction CreateExp(Instruction acc, Instruction input0) &&; 623 624 /** 625 * @brief Creates instruction with opcode TYPEOF. This instruction computes `typeof acc`. 626 * @return Instruction 627 * @param [ in ] acc - Inst containing object to be inspected. 628 */ 629 Instruction CreateTypeof(Instruction acc) &&; 630 631 /** 632 * @brief Creates instruction with opcode TONUMBER. This instruction executes `ToNumber` with argument `acc`, and 633 * stores the result in `acc`. 634 * @return Instruction 635 * @param [ in ] acc - Inst containing object. 636 */ 637 Instruction CreateTonumber(Instruction acc) &&; 638 639 /** 640 * @brief Creates instruction with opcode TONUMERIC. This instruction executes `ToNumeric` with argument `acc`, and 641 * stores the result in `acc`. 642 * @return Instruction 643 * @param [ in ] acc - Inst containing object. 644 */ 645 Instruction CreateTonumeric(Instruction acc) &&; 646 647 /** 648 * @brief Creates instruction with opcode NEG. This instruction computes `-acc`. 649 * @return Instruction 650 * @param [ in ] acc - Inst containing operand. 651 */ 652 Instruction CreateNeg(Instruction acc) &&; 653 654 /** 655 * @brief Creates instruction with opcode NOT. This instruction computes `!acc`. 656 * @return Instruction 657 * @param [ in ] acc - Inst containing operand. 658 */ 659 Instruction CreateNot(Instruction acc) &&; 660 661 /** 662 * @brief Creates instruction with opcode INC. This instruction computes `acc + 1`. 663 * @return Instruction 664 * @param [ in ] acc - Inst containing operand. 665 */ 666 Instruction CreateInc(Instruction acc) &&; 667 668 /** 669 * @brief Creates instruction with opcode DEC. This instruction computes `acc - 1`. 670 * @return Instruction 671 * @param [ in ] acc - Inst containing operand. 672 */ 673 Instruction CreateDec(Instruction acc) &&; 674 675 /** 676 * @brief Creates instruction with opcode ISTRUE. This instruction computes `acc == true`. 677 * @return Instruction 678 * @param [ in ] acc - Inst containing object. 679 */ 680 Instruction CreateIstrue(Instruction acc) &&; 681 682 /** 683 * @brief Creates instruction with opcode ISFALSE. This instruction computes `acc == false`. 684 * @return Instruction 685 * @param [ in ] acc - Inst containing object. 686 */ 687 Instruction CreateIsfalse(Instruction acc) &&; 688 689 /** 690 * @brief Creates instruction with opcode ISIN. This instruction computes `input0 in acc`. 691 * @return Instruction 692 * @param [ in ] acc - Inst containing object. 693 * @param [ in ] input0 - Inst containing object. 694 */ 695 Instruction CreateIsin(Instruction acc, Instruction input0) &&; 696 697 /** 698 * @brief Creates instruction with opcode INSTANCEOF. This instruction computes `input0 instanceof acc`, and stores 699 * the result in `acc`. 700 * @return Instruction 701 * @param [ in ] acc - Inst containing object. 702 * @param [ in ] input0 - Inst containing object. 703 */ 704 Instruction CreateInstanceof(Instruction acc, Instruction input0) &&; 705 706 /** 707 * @brief Creates instruction with opcode STRICTNOTEQ. This instruction computes `input0 !== acc`, and stores 708 * the result in `acc`. 709 * @return Instruction 710 * @param [ in ] acc - Inst containing object. 711 * @param [ in ] input0 - Inst containing object. 712 */ 713 Instruction CreateStrictnoteq(Instruction acc, Instruction input0) &&; 714 715 /** 716 * @brief Creates instruction with opcode STRICTEQ. This instruction computes `input0 === acc`, and stores 717 * the result in `acc`. 718 * @return Instruction 719 * @param [ in ] acc - Inst containing object. 720 * @param [ in ] input0 - Inst containing object. 721 */ 722 Instruction CreateStricteq(Instruction acc, Instruction input0) &&; 723 724 /** 725 * @brief Creates instruction with opcode CALLRUNTIME_NOTIFYCONCURRENTRESULT. This instruction notifies runtime with 726 * the return value of the underlying concurrent function. This instruction appears only in concurrent functions. 727 * @return Instruction 728 * @param [ in ] acc - Inst containing concurrent function result. 729 */ 730 Instruction CreateCallruntimeNotifyconcurrentresult(Instruction acc) &&; 731 732 /** 733 * @brief Creates instruction with opcode CALLRUNTIME_DEFINEFIELDBYVALUE. This instruction defines a property with 734 * key `input0` for object `input1`, and stores the value of `acc` in it. 735 * @return Instruction 736 * @param [ in ] acc - Inst containing value for a property. 737 * @param [ in ] input0 - Inst containing key for property. 738 * @param [ in ] input1 - Inst containing object to be modified. 739 */ 740 Instruction CreateCallruntimeDefinefieldbyvalue(Instruction acc, Instruction input0, Instruction input1) &&; 741 742 /** 743 * @brief Creates instruction with opcode CALLRUNTIME_DEFINEFIELDBYINDEX. This instruction defines a property with 744 * key `imm0` for object `input0`, and stores the value of `acc` in it. 745 * @return Instruction 746 * @param [ in ] acc - Inst containing value for a property. 747 * @param [ in ] imm0 - Key for property. 748 * @param [ in ] input0 - Inst containing object to be modified. 749 */ 750 Instruction CreateCallruntimeDefinefieldbyindex(Instruction acc, uint64_t imm0, Instruction input0) &&; 751 752 /** 753 * @brief Creates instruction with opcode CALLRUNTIME_TOPROPERTYKEY. This instruction converts `acc` to property 754 * key, if fails, throw an exception. 755 * @return Instruction 756 * @param [ in ] acc - Inst containing value. 757 */ 758 Instruction CreateCallruntimeTopropertykey(Instruction acc) &&; 759 760 /** 761 * @brief Creates instruction with opcode CALLRUNTIME_CREATEPRIVATEPROPERTY. This instruction creates `imm0` 762 * symbols. Obtains the stored private method according to the literal array `literalArray`. If a private instance 763 * method exists, creates an additional symbol ("method"). Puts all the created symbols at the end of the lexical 764 * environment of the current class according to the creation sequence. This instruction appears only in the 765 * class definition. 766 * @return Instruction 767 * @param [ in ] imm0 - Number of symbols to create. 768 * @param [ in ] literalArray - Literal array of symbols. 769 */ 770 Instruction CreateCallruntimeCreateprivateproperty(uint64_t imm0, LiteralArray literalArray) &&; 771 772 /** 773 * @brief Creates instruction with opcode CALLRUNTIME_DEFINEPRIVATEPROPERTY. This instruction gets a token from the 774 * specified lexical position, and appends it to object `input0` as a property. 775 * @return Instruction 776 * @param [ in ] acc - Inst containing a value of a property. 777 * @param [ in ] imm0 - Lexical environment layer number. 778 * @param [ in ] imm1 - Slot number. 779 * @param [ in ] input0 - Inst containing object. 780 */ 781 Instruction CreateCallruntimeDefineprivateproperty(Instruction acc, uint64_t imm0, uint64_t imm1, 782 Instruction input0) &&; 783 784 /** 785 * @brief Creates instruction with opcode CALLRUNTIME_CALLINIT. This instruction sets the value of this as `input0`, 786 * invokes the function object stored in `acc` with no argument. 787 * @return Instruction 788 * @param [ in ] acc - Inst containing function object. 789 * @param [ in ] input0 - Inst containing object. 790 */ 791 Instruction CreateCallruntimeCallinit(Instruction acc, Instruction input0) &&; 792 793 /** 794 * @brief Creates instruction with opcode CALLRUNTIME_DEFINESENDABLECLASS. This instruction creates a sendable class 795 * object of `function` with literal `literalArray` and superclass `input0`, and stores it in `acc`. 796 * @return Instruction 797 * @param [ in ] function - Method of the constructor of the sendable class. 798 * @param [ in ] literalArray - Literal array. 799 * @param [ in ] imm0 - Number of formal parameters of method. 800 * @param [ in ] input0 - Inst contatining superclass object. 801 */ 802 Instruction CreateCallruntimeDefinesendableclass(core::Function function, LiteralArray literalArray, uint64_t imm0, 803 Instruction input0) &&; 804 805 /** 806 * @brief Creates instruction with opcode CALLRUNTIME_LDSENDABLECLASS. This instruction loads the sendable class in 807 * lexical environment `imm0` into `acc`. 808 * @return Instruction 809 * @param [ in ] imm0 - Lexical environment. 810 */ 811 Instruction CreateCallruntimeLdsendableclass(uint64_t imm0) &&; 812 813 /** 814 * @brief Creates instruction with opcode CALLRUNTIME_LDSENDABLEEXTERNALMODULEVAR. 815 * @return Instruction 816 * @param [ in ] imm0 - Index 817 */ 818 Instruction CreateCallruntimeLdsendableexternalmodulevar(uint64_t imm0) &&; 819 820 /** 821 * @brief Creates instruction with opcode CALLRUNTIME_WIDELDSENDABLEEXTERNALMODULEVAR. 822 * @return Instruction 823 * @param [ in ] imm0 - Index 824 */ 825 Instruction CreateCallruntimeWideldsendableexternalmodulevar(uint64_t imm0) &&; 826 827 /** 828 * @brief Creates instruction with opcode CALLRUNTIME_WIDENEWSENDABLEENV. 829 * @return Instruction 830 * @param [ in ] imm0 - Number of variables. 831 */ 832 Instruction CreateCallruntimeNewsendableenv(uint64_t imm0) &&; 833 834 /** 835 * @brief Creates instruction with opcode CALLRUNTIME_WIDENEWSENDABLEENV. 836 * @return Instruction 837 * @param [ in ] imm0 - Number of variables. 838 */ 839 Instruction CreateCallruntimeWidenewsendableenv(uint64_t imm0) &&; 840 841 /** 842 * @brief Creates instruction with opcode CALLRUNTIME_STSENDABLEVAR. 843 * @return Instruction 844 * @param [ in ] acc - Object to store. 845 * @param [ in ] imm0 - Lexical environment level. 846 * @param [ in ] imm1 - Slot number. 847 */ 848 Instruction CreateCallruntimeStsendablevar(Instruction acc, uint64_t imm0, uint64_t imm1) &&; 849 850 /** 851 * @brief Creates instruction with opcode CALLRUNTIME_WIDESTSENDABLEVAR. 852 * @return Instruction 853 * @param [ in ] acc - Object to store. 854 * @param [ in ] imm0 - Lexical environment level. 855 * @param [ in ] imm1 - Slot number. 856 */ 857 Instruction CreateCallruntimeWidestsendablevar(Instruction acc, uint64_t imm0, uint64_t imm1) &&; 858 859 /** 860 * @brief Creates instruction with opcode CALLRUNTIME_LDSENDABLEVAR. 861 * @return Instruction 862 * @param [ in ] imm0 - Lexical environment level. 863 * @param [ in ] imm1 - Slot number. 864 */ 865 Instruction CreateCallruntimeLdsendablevar(uint64_t imm0, uint64_t imm1) &&; 866 867 /** 868 * @brief Creates instruction with opcode CALLRUNTIME_WIDELDSENDABLEVAR. 869 * @return Instruction 870 * @param [ in ] imm0 - Lexical environment level. 871 * @param [ in ] imm1 - Slot number. 872 */ 873 Instruction CreateCallruntimeWideldsendablevar(uint64_t imm0, uint64_t imm1) &&; 874 875 /** 876 * @brief Creates instruction with opcode CALLRUNTIME_ISTRUE. 877 * @return Instruction 878 * @param [ in ] acc - Input object. 879 */ 880 Instruction CreateCallruntimeIstrue(Instruction acc) &&; 881 882 /** 883 * @brief Creates instruction with opcode CALLRUNTIME_ISFALSE. 884 * @return Instruction 885 * @param [ in ] acc - Input object. 886 */ 887 Instruction CreateCallruntimeIsfalse(Instruction acc) &&; 888 889 /** 890 * @brief Creates instruction with opcode THROW. This instruction throws the exception stored in `acc`. 891 * @return Instruction 892 * @param [ in ] acc - Inst containing exception. 893 */ 894 Instruction CreateThrow(Instruction acc) &&; 895 896 /** 897 * @brief Creates instruction with opcode THROW_NOTEXISTS. This instruction throws the exception that the method is 898 * undefined. 899 * @return Instruction 900 */ 901 Instruction CreateThrowNotexists() &&; 902 903 /** 904 * @brief Creates instruction with opcode THROW_PATTERNNONCOERCIBLE. This instruction throws the exception that the 905 * object is not coercible. 906 * @return Instruction 907 */ 908 Instruction CreateThrowPatternnoncoercible() &&; 909 910 /** 911 * @brief Creates instruction with opcode THROW_DELETESUPERPROPERTY. This instruction throws the exception of 912 * deleting the property of the superclass. 913 * @return Instruction 914 */ 915 Instruction CreateThrowDeletesuperproperty() &&; 916 917 /** 918 * @brief Creates instruction with opcode THROW_CONSTASSIGNMENT. This instruction throws the exception of 919 * assignment to the const variable `input0`. 920 * @return Instruction 921 * @param [ in ] input0 - Inst containing name of a const variable. 922 */ 923 Instruction CreateThrowConstassignment(Instruction input0) &&; 924 925 /** 926 * @brief Creates instruction with opcode THROW_IFNOTOBJECT. This instruction throws exception if `input0` is not an 927 * object. 928 * @return Instruction 929 * @param [ in ] input0 - Inst containing name of a const variable. 930 */ 931 Instruction CreateThrowIfnotobject(Instruction input0) &&; 932 933 /** 934 * @brief Creates instruction with opcode THROW_UNDEFINEDIFHOLE. This instruction throws the exception that `input1` 935 * is `undefined` if `input0` is hole. 936 * @return Instruction 937 * @param [ in ] input0 - Inst containing value of the object. 938 * @param [ in ] input1 - Inst containing name of the object. 939 */ 940 Instruction CreateThrowUndefinedifhole(Instruction input0, Instruction input1) &&; 941 942 /** 943 * @brief Creates instruction with opcode THROW_IFSUPERNOTCORRECTCALL. This instruction throws the exception if 944 * `super()` is not called correctly. 945 * @return Instruction 946 * @param [ in ] acc - Inst containing class object. 947 * @param [ in ] imm0 - Error type. 948 */ 949 Instruction CreateThrowIfsupernotcorrectcall(Instruction acc, uint64_t imm0) &&; 950 951 /** 952 * @brief Creates instruction with opcode THROW_UNDEFINEDIFHOLEWITHNAME. This instruction throws the exception that 953 * `string` is `undefined` if `acc` is hole. 954 * @return Instruction 955 * @param [ in ] acc - Inst containing value of the object. 956 * @param [ in ] string - String for exception. 957 */ 958 Instruction CreateThrowUndefinedifholewithname(Instruction acc, std::string_view string) &&; 959 960 /** 961 * @brief Creates instruction with opcode CALLARG0. This instruction invokes the function object stored in `acc` 962 * with no argument. 963 * @return Instruction 964 * @param [ in ] acc - Inst containing function object. 965 */ 966 Instruction CreateCallarg0(Instruction acc) &&; 967 968 /** 969 * @brief Creates instruction with opcode CALLARG1. This instruction invokes the function object stored in `acc` 970 * with `input0` argument. 971 * @return Instruction 972 * @param [ in ] acc - Inst containing function object. 973 * @param [ in ] input0 - Inst containing argument. 974 */ 975 Instruction CreateCallarg1(Instruction acc, Instruction input0) &&; 976 977 /** 978 * @brief Creates instruction with opcode CALLARGS2. This instruction invokes the function object stored in `acc` 979 * with `input0` and `input1` arguments. 980 * @return Instruction 981 * @param [ in ] acc - Inst containing function object. 982 * @param [ in ] input0 - Inst containing first argument. 983 * @param [ in ] input1 - Inst containing second argument. 984 */ 985 Instruction CreateCallargs2(Instruction acc, Instruction input0, Instruction input1) &&; 986 987 /** 988 * @brief Creates instruction with opcode CALLARGS3. This instruction invokes the function object stored in `acc` 989 * with `input0`, `input1`, `input2` arguments. 990 * @return Instruction 991 * @param [ in ] acc - Inst containing function object. 992 * @param [ in ] input0 - Inst containing first argument. 993 * @param [ in ] input1 - Inst containing second argument. 994 * @param [ in ] input2 - Inst containing third argument. 995 */ 996 Instruction CreateCallargs3(Instruction acc, Instruction input0, Instruction input1, Instruction input2) &&; 997 998 /** 999 * @brief Creates instruction with opcode CALLRANGE. This instruction invokes `acc` with arguments `inputs[0]`, ..., 1000 * `inputs[argCount-1]`. 1001 * @return Instruction 1002 * @param [ in ] acc - Inst containing function object. 1003 * @param [ in ] ... - Arguments. 1004 */ 1005 template <typename... Args> 1006 Instruction CreateCallrange(Instruction acc, Args... /*instrs*/) &&; 1007 1008 /** 1009 * @brief Creates instruction with opcode WIDE_CALLRANGE. This instruction invokes `acc` with arguments `inputs[0]`, 1010 * ..., `inputs[argCount-1]`. 1011 * @return Instruction 1012 * @param [ in ] acc - Inst containing function object. 1013 * @param [ in ] ... - Arguments. 1014 */ 1015 template <typename... Args> 1016 Instruction CreateWideCallrange(Instruction acc, Args... /*instrs*/) &&; 1017 1018 /** 1019 * @brief Creates instruction with opcode SUPERCALLSPREAD. This instruction invokes `acc`'s superclass constructor 1020 * with argument list `input0`. 1021 * @return Instruction 1022 * @param [ in ] acc - Inst containing class object. 1023 * @param [ in ] input0 - Inst containing parameter list. 1024 */ 1025 Instruction CreateSupercallspread(Instruction acc, Instruction input0) &&; 1026 1027 /** 1028 * @brief Creates instruction with opcode APPLY. 1029 * Sets the value of this as `input0`, 1030 * invokes the function object stored in `acc` with arguments list `input1`. 1031 * @return Instruction 1032 * @param [ in ] acc - Function object. 1033 * @param [ in ] input0 - This object . 1034 * @param [ in ] input1 - Arguments object. 1035 */ 1036 Instruction CreateApply(Instruction acc, Instruction input0, Instruction input1) &&; 1037 1038 /** 1039 * @brief Creates instruction with opcode CALLTHIS0. 1040 * Sets the value of this as `input0`, invokes the function object stored in `acc`. 1041 * @return Instruction 1042 * @param [ in ] acc - Function object. 1043 * @param [ in ] input0 - This object. 1044 */ 1045 Instruction CreateCallthis0(Instruction acc, Instruction input0) &&; 1046 1047 /** 1048 * @brief Creates instruction with opcode CALLTHIS1. 1049 * Sets the value of this as `input0`, 1050 * invokes the function object stored in `acc` with argument `input1`. 1051 * @return Instruction 1052 * @param [ in ] acc - Function object. 1053 * @param [ in ] input0 - This object. 1054 * @param [ in ] input1 - First argument. 1055 */ 1056 Instruction CreateCallthis1(Instruction acc, Instruction input0, Instruction input1) &&; 1057 1058 /** 1059 * @brief Creates instruction with opcode CALLTHIS2. 1060 * Sets the value of this as `input0`, 1061 * invokes the function object stored in `acc` with arguments `input1`, `input2`. 1062 * @return Instruction 1063 * @param [ in ] acc - Function object. 1064 * @param [ in ] input0 - This object. 1065 * @param [ in ] input1 - First argument. 1066 * @param [ in ] input2 - Second argument. 1067 */ 1068 Instruction CreateCallthis2(Instruction acc, Instruction input0, Instruction input1, Instruction input2) &&; 1069 1070 /** 1071 * @brief Creates instruction with opcode CALLTHIS3. 1072 * Sets the value of this as `input0`, 1073 * invokes the function object stored in `acc` with arguments `input1`, `input2`, and `input3`. 1074 * @return Instruction 1075 * @param [ in ] acc - Function object. 1076 * @param [ in ] input0 - This object. 1077 * @param [ in ] input1 - First argument. 1078 * @param [ in ] input2 - Second argument. 1079 * @param [ in ] input3 - Third argument. 1080 */ 1081 Instruction CreateCallthis3(Instruction acc, Instruction input0, Instruction input1, Instruction input2, 1082 Instruction input3) &&; 1083 1084 /** 1085 * @brief Creates instruction with opcode CALLTHISRANGE. 1086 * Sets the value of this as first variadic argument, invokes the function object stored in `acc` with arguments 1087 * `...`. 1088 * @return Instruction 1089 * @param [ in ] acc - Function object. 1090 * @param [ in ] ... - Object + arguments. 1091 */ 1092 template <typename... Args> 1093 Instruction CreateCallthisrange(Instruction acc, Args... /*instrs*/) &&; 1094 1095 /** 1096 * @brief Creates instruction with opcode WIDE_CALLTHISRANGE. 1097 * Sets the value of this as first variadic argument, invokes the function object stored in `acc` with arguments 1098 * `...`. 1099 * @return Instruction 1100 * @param [ in ] acc - Function object. 1101 * @param [ in ] ... - Object + arguments. 1102 */ 1103 template <typename... Args> 1104 Instruction CreateWideCallthisrange(Instruction acc, Args... /*instrs*/) &&; 1105 1106 /** 1107 * @brief Creates instruction with opcode SUPERCALLTHISRANGE. 1108 * Invokes super with arguments ... 1109 * This instruction appears only in non-arrow functions. 1110 * @return Instruction 1111 * @param [ in ] ... - Parameters. 1112 */ 1113 template <typename... Args> 1114 Instruction CreateSupercallthisrange(Args... /*instrs*/) &&; 1115 1116 /** 1117 * @brief Creates instruction with opcode WIDE_SUPERCALLTHISRANGE. 1118 * Invokes super with arguments ... 1119 * This instruction appears only in non-arrow functions. 1120 * @return Instruction 1121 * @param [ in ] ... - Parameters. 1122 */ 1123 template <typename... Args> 1124 Instruction CreateWideSupercallthisrange(Args... /*instrs*/) &&; 1125 1126 /** 1127 * @brief Creates instruction with opcode SUPERCALLARROWRANGE. 1128 * Invokes `acc`'s superclass constructor with arguments `...`. 1129 * This instruction appears only in arrow functions. 1130 * @return Instruction 1131 * @param [ in ] acc - Class object. 1132 * @param [ in ] ... - Parameters. 1133 */ 1134 template <typename... Args> 1135 Instruction CreateSupercallarrowrange(Instruction acc, Args... /*instrs*/) &&; 1136 1137 /** 1138 * @brief Creates instruction with opcode WIDE_SUPERCALLARROWRANGE. 1139 * Invokes `acc`'s superclass constructor with arguments `...`. 1140 * This instruction appears only in arrow functions. 1141 * @return Instruction 1142 * @param [ in ] acc - Class object. 1143 * @param [ in ] ... - Parameters. 1144 */ 1145 template <typename... Args> 1146 Instruction CreateWideSupercallarrowrange(Instruction acc, Args... /*instrs*/) &&; 1147 1148 /** 1149 * @brief Creates instruction with opcode DEFINEGETTERSETTERBYVALUE. 1150 * Defines accessors for `input0`'s property of the key `input1` with getter method `input2` 1151 * and setter method `input3`. If `input2` (`input3`) is undefined, then getter (setter) will not be set. 1152 * @return Instruction 1153 * @param [ in ] acc - Whether to set a name for the accessor. 1154 * @param [ in ] input0 - Destination object. 1155 * @param [ in ] input1 - Property key value. 1156 * @param [ in ] input2 - Getter function object. 1157 * @param [ in ] input3 - Setter function object. 1158 */ 1159 Instruction CreateDefinegettersetterbyvalue(Instruction acc, Instruction input0, Instruction input1, 1160 Instruction input2, Instruction input3) &&; 1161 1162 /** 1163 * @brief Creates instruction with opcode DEFINEFUNC. Creates a function instance of `function`. 1164 * @return Instruction 1165 * @param [ in ] function - Pointer to AbckitFunction. 1166 * @param [ in ] imm0 - Number of form parameters. 1167 */ 1168 Instruction CreateDefinefunc(core::Function function, uint64_t imm0) &&; 1169 1170 /** 1171 * @brief Creates instruction with opcode DEFINEMETHOD. 1172 * Creates a class method instance of `function` for the prototype `acc`. 1173 * @return Instruction 1174 * @param [ in ] acc - Prototype object of the class. 1175 * @param [ in ] function - Method. 1176 * @param [ in ] imm0 - Number of formal parameters. 1177 */ 1178 Instruction CreateDefinemethod(Instruction acc, core::Function function, uint64_t imm0) &&; 1179 1180 /** 1181 * @brief Creates instruction with opcode DEFINECLASSWITHBUFFER. 1182 * Creates a class object of `function` with literal `literalArray` and superclass `input0`. 1183 * @return Instruction 1184 * @param [ in ] function - Class constructor. 1185 * @param [ in ] literalArray - Literal array. 1186 * @param [ in ] imm0 - parameter count of `function`. 1187 * @param [ in ] input0 - Object containing parent class. 1188 */ 1189 Instruction CreateDefineclasswithbuffer(core::Function function, LiteralArray literalArray, uint64_t imm0, 1190 Instruction input0) &&; 1191 1192 /** 1193 * @brief Creates instruction with opcode RESUMEGENERATOR. Executes `GeneratorResume` for the generator `acc`. 1194 * @return Instruction 1195 * @param [ in ] acc - Generator object. 1196 */ 1197 Instruction CreateResumegenerator(Instruction acc) &&; 1198 1199 /** 1200 * @brief Creates instruction with opcode GETRESUMEMODE. 1201 * Gets the type of completion resumption value for the generator `acc`. 1202 * @return Instruction 1203 * @param [ in ] acc - Generator object. 1204 */ 1205 Instruction CreateGetresumemode(Instruction acc) &&; 1206 1207 /** 1208 * @brief Creates instruction with opcode Gettemplateobject. 1209 * Executes `GetTemplateObject` with argument `acc` of type templateLiteral. 1210 * @return Instruction 1211 * @param [ in ] acc - Argument object. 1212 */ 1213 Instruction CreateGettemplateobject(Instruction acc) &&; 1214 1215 /** 1216 * @brief Creates instruction with opcode GETNEXTPROPNAME. 1217 * Executes the `next()` method of the for-in iterator `input0`. 1218 * @return Instruction 1219 * @param [ in ] input0 - Iterator object. 1220 */ 1221 Instruction CreateGetnextpropname(Instruction input0) &&; 1222 1223 /** 1224 * @brief Creates instruction with opcode DELOBJPROP. Delete the `input0`'s property of the key `acc`. 1225 * @return Instruction 1226 * @param [ in ] acc - Key. 1227 * @param [ in ] input0 - Object to delete property from. 1228 */ 1229 Instruction CreateDelobjprop(Instruction acc, Instruction input0) &&; 1230 1231 /** 1232 * @brief Creates instruction with opcode SUSPENDGENERATOR. Suspends the generator `input0` with value `acc`. 1233 * @return Instruction 1234 * @param [ in ] acc - Value. 1235 * @param [ in ] input0 - Generator object. 1236 */ 1237 Instruction CreateSuspendgenerator(Instruction acc, Instruction input0) &&; 1238 1239 /** 1240 * @brief Creates instruction with opcode ASYNCFUNCTIONAWAITUNCAUGHT. 1241 * Executes `AwaitExpression` with function object `input0` and value `acc`. 1242 * @return Instruction 1243 * @param [ in ] acc - Value. 1244 * @param [ in ] input0 - Function object. 1245 */ 1246 Instruction CreateAsyncfunctionawaituncaught(Instruction acc, Instruction input0) &&; 1247 1248 /** 1249 * @brief Creates instruction with opcode COPYDATAPROPERTIES. Copies the properties of `acc` into `input0`. 1250 * @return Instruction 1251 * @param [ in ] acc - Object to load properties from. 1252 * @param [ in ] input0 - Destintaion object. 1253 */ 1254 Instruction CreateCopydataproperties(Instruction acc, Instruction input0) &&; 1255 1256 /** 1257 * @brief Creates instruction with opcode STARRAYSPREAD. 1258 * Stores `acc` in spreading way into `input0`'s elements starting from the index `input1`. 1259 * @return Instruction 1260 * @param [ in ] acc - Object to store. 1261 * @param [ in ] input0 - Destination object. 1262 * @param [ in ] input1 - Index. 1263 */ 1264 Instruction CreateStarrayspread(Instruction acc, Instruction input0, Instruction input1) &&; 1265 1266 /** 1267 * @brief Creates instruction with opcode SETOBJECTWITHPROTO. Set `acc`'s `__proto__` property as `input0`. 1268 * @return Instruction 1269 * @param [ in ] acc - Destination object. 1270 * @param [ in ] input0 - Object to store. 1271 */ 1272 Instruction CreateSetobjectwithproto(Instruction acc, Instruction input0) &&; 1273 1274 /** 1275 * @brief Creates instruction with opcode LDOBJBYVALUE. Loads `input0`'s property of the key `acc`. 1276 * @return Instruction 1277 * @param [ in ] acc - Key. 1278 * @param [ in ] input0 - Object to load from. 1279 */ 1280 Instruction CreateLdobjbyvalue(Instruction acc, Instruction input0) &&; 1281 1282 /** 1283 * @brief Creates instruction with opcode STOBJBYVALUE. Stores `acc` to `input0`'s property of the key `input1`. 1284 * @return Instruction 1285 * @param [ in ] acc - Object to store. 1286 * @param [ in ] input0 - Destonation object. 1287 * @param [ in ] input1 - Key. 1288 */ 1289 Instruction CreateStobjbyvalue(Instruction acc, Instruction input0, Instruction input1) &&; 1290 1291 /** 1292 * @brief Creates instruction with opcode STOWNBYVALUE. Stores `acc` to object `input0`'s property of the key 1293 * `input1`. 1294 * @return Instruction 1295 * @param [ in ] acc - Object to store . 1296 * @param [ in ] input0 - Destination object. 1297 * @param [ in ] input1 - Key. 1298 */ 1299 Instruction CreateStownbyvalue(Instruction acc, Instruction input0, Instruction input1) &&; 1300 1301 /** 1302 * @brief Creates instruction with opcode LDSUPERBYVALUE. Loads the property of `input0`'s superclass of the key 1303 * acc. 1304 * @return Instruction 1305 * @param [ in ] acc - Key . 1306 * @param [ in ] input0 - Object to load from. 1307 */ 1308 Instruction CreateLdsuperbyvalue(Instruction acc, Instruction input0) &&; 1309 1310 /** 1311 * @brief Creates instruction with opcode STSUPERBYVALUE. 1312 * Stores `acc` to the property of `input0`'s superclass of the key `input1`. 1313 * @return Instruction 1314 * @param [ in ] acc - Object to store. 1315 * @param [ in ] input0 - Destination object. 1316 * @param [ in ] input1 - Key. 1317 */ 1318 Instruction CreateStsuperbyvalue(Instruction acc, Instruction input0, Instruction input1) &&; 1319 1320 /** 1321 * @brief Creates instruction with opcode LDOBJBYINDEX. Loads `acc`'s property of the key `imm0`. 1322 * @return Instruction 1323 * @param [ in ] acc - Object to load from. 1324 * @param [ in ] imm0 - Index. 1325 */ 1326 Instruction CreateLdobjbyindex(Instruction acc, uint64_t imm0) &&; 1327 1328 /** 1329 * @brief Creates instruction with opcode WIDE_LDOBJBYINDEX. Loads `acc`'s property of the key `imm0`. 1330 * @return Instruction 1331 * @param [ in ] acc - Object to load from. 1332 * @param [ in ] imm0 - Index. 1333 */ 1334 Instruction CreateWideLdobjbyindex(Instruction acc, uint64_t imm0) &&; 1335 1336 /** 1337 * @brief Creates instruction with opcode STOBJBYINDEX. Stores `acc` to `input0`'s property of the key `imm0`. 1338 * @return Instruction 1339 * @param [ in ] acc - Object to store . 1340 * @param [ in ] input0 - Destination object . 1341 * @param [ in ] imm0 - Index. 1342 */ 1343 Instruction CreateStobjbyindex(Instruction acc, Instruction input0, uint64_t imm0) &&; 1344 1345 /** 1346 * @brief Creates instruction with opcode WIDE_STOBJBYINDEX. Stores `acc` to `input0`'s property of the key `imm0`. 1347 * @return Instruction 1348 * @param [ in ] acc - Object to store . 1349 * @param [ in ] input0 - Destination object . 1350 * @param [ in ] imm0 - Index. 1351 */ 1352 Instruction CreateWideStobjbyindex(Instruction acc, Instruction input0, uint64_t imm0) &&; 1353 1354 /** 1355 * @brief Creates instruction with opcode STOWNBYINDEX. Stores `acc` to object `input0`'s property of the key 1356 * `imm0`. 1357 * @return Instruction 1358 * @param [ in ] acc - Object to store. 1359 * @param [ in ] input0 - Destination object. 1360 * @param [ in ] imm0 - Index. 1361 */ 1362 Instruction CreateStownbyindex(Instruction acc, Instruction input0, uint64_t imm0) &&; 1363 1364 /** 1365 * @brief Creates instruction with opcode WIDE_STOWNBYINDEX. Stores `acc` to object `input0`'s property of the key 1366 * `imm0`. 1367 * @return Instruction 1368 * @param [ in ] acc - Object to store. 1369 * @param [ in ] input0 - Destination object. 1370 * @param [ in ] imm0 - Index. 1371 */ 1372 Instruction CreateWideStownbyindex(Instruction acc, Instruction input0, uint64_t imm0) &&; 1373 1374 /** 1375 * @brief Creates instruction with opcode Asyncfunctionresolve. Resolves the Promise object of `input0` with value 1376 * `acc`. 1377 * @return Instruction 1378 * @param [ in ] acc - Value. 1379 * @param [ in ] input0 - Promise object. 1380 */ 1381 Instruction CreateAsyncfunctionresolve(Instruction acc, Instruction input0) &&; 1382 1383 /** 1384 * @brief Creates instruction with opcode ASYNCFUNCTIONREJECT. Rejects the Promise object of `input0` with value 1385 * `acc`. 1386 * @return Instruction 1387 * @param [ in ] acc - Value. 1388 * @param [ in ] input0 - Promise object. 1389 */ 1390 Instruction CreateAsyncfunctionreject(Instruction acc, Instruction input0) &&; 1391 1392 /** 1393 * @brief Creates instruction with opcode COPYRESTARGS. Copies the rest parameters. 1394 * @return Instruction 1395 * @param [ in ] imm0 - The order in which the remaining parameters in the parameter list start. 1396 */ 1397 Instruction CreateCopyrestargs(uint64_t imm0) &&; 1398 1399 /** 1400 * @brief Creates instruction with opcode WIDE_COPYRESTARGS. Copies the rest parameters. 1401 * @return Instruction 1402 * @param [ in ] imm0 - The order in which the remaining parameters in the parameter list start. 1403 */ 1404 Instruction CreateWideCopyrestargs(uint64_t imm0) &&; 1405 1406 /** 1407 * @brief Creates instruction with opcode LDLEXVAR. 1408 * Loads the value at the `imm1`-th slot of the lexical environment beyond level `imm0`. 1409 * @return Instruction 1410 * @param [ in ] imm0 - Lexical environment level. 1411 * @param [ in ] imm1 - Slot number. 1412 */ 1413 Instruction CreateLdlexvar(uint64_t imm0, uint64_t imm1) &&; 1414 1415 /** 1416 * @brief Creates instruction with opcode WIDE_LDLEXVAR. 1417 * Loads the value at the `imm1`-th slot of the lexical environment beyond level `imm0`. 1418 * @return Instruction 1419 * @param [ in ] imm0 - Lexical environment level. 1420 * @param [ in ] imm1 - Slot number. 1421 */ 1422 Instruction CreateWideLdlexvar(uint64_t imm0, uint64_t imm1) &&; 1423 1424 /** 1425 * @brief Creates instruction with opcode STLEXVAR. 1426 * Stores `acc` in the `imm1`-th slot of the lexical environment beyond `imm0` level. 1427 * @return Instruction 1428 * @param [ in ] acc - Object to store. 1429 * @param [ in ] imm0 - Lexical environment level. 1430 * @param [ in ] imm1 - Slot number. 1431 */ 1432 Instruction CreateStlexvar(Instruction acc, uint64_t imm0, uint64_t imm1) &&; 1433 1434 /** 1435 * @brief Creates instruction with opcode WIDE_STLEXVAR. 1436 * Stores `acc` in the `imm1`-th slot of the lexical environment beyond `imm0` level. 1437 * @return Instruction 1438 * @param [ in ] acc - Object to store. 1439 * @param [ in ] imm0 - Lexical environment level. 1440 * @param [ in ] imm1 - Slot number. 1441 */ 1442 Instruction CreateWideStlexvar(Instruction acc, uint64_t imm0, uint64_t imm1) &&; 1443 1444 /** 1445 * @brief Creates instruction with opcode GETMODULENAMESPACE. Executes GetModuleNamespace for the `md`. 1446 * @return Instruction 1447 * @param [ in ] md - Module descriptor. 1448 */ 1449 Instruction CreateGetmodulenamespace(core::Module md) &&; 1450 1451 /** 1452 * @brief Creates instruction with opcode WIDE_GETMODULENAMESPACE. Executes GetModuleNamespace for the `md`. 1453 * @return Instruction 1454 * @param [ in ] md - Module descriptor. 1455 */ 1456 Instruction CreateWideGetmodulenamespace(core::Module md) &&; 1457 1458 /** 1459 * @brief Creates instruction with opcode STMODULEVAR. Stores `acc` to the module variable in the `ed`. 1460 * @return Instruction 1461 * @param [ in ] acc - Object to store. 1462 * @param [ in ] ed - Destination export descriptor. 1463 */ 1464 Instruction CreateStmodulevar(Instruction acc, core::ExportDescriptor ed) &&; 1465 1466 /** 1467 * @brief Creates instruction with opcode WIDE_STMODULEVAR. Stores `acc` to the module variable in the `ed`. 1468 * @return Instruction 1469 * @param [ in ] acc - Object to store. 1470 * @param [ in ] ed - Destination export descriptor. 1471 */ 1472 Instruction CreateWideStmodulevar(Instruction acc, core::ExportDescriptor ed) &&; 1473 1474 /** 1475 * @brief Creates instruction with opcode TRYLDGLOBALBYNAME. Loads the global variable of the name `string`. 1476 * If the global variable `string` does not exist, an exception is thrown. 1477 * @return Instruction 1478 * @param [ in ] string to load 1479 */ 1480 Instruction CreateTryldglobalbyname(std::string_view string) &&; 1481 1482 /** 1483 * @brief Creates instruction with opcode TRYSTGLOBALBYNAME. Stores `acc` to the global variable of the name 1484 * `string`. If the global variable `string` does not exist, an exception is thrown. 1485 * @return Instruction 1486 * @param [ in ] acc - Object to store. 1487 * @param [ in ] string - String containing name of global variable. 1488 */ 1489 Instruction CreateTrystglobalbyname(Instruction acc, std::string_view string) &&; 1490 1491 /** 1492 * @brief Creates instruction with opcode LDGLOBALVAR. Loads the global variable of the name `string`. 1493 * This variable must exist. 1494 * @return Instruction 1495 * @param [ in ] string - String containing name of global variable. 1496 */ 1497 Instruction CreateLdglobalvar(std::string_view string) &&; 1498 1499 /** 1500 * @brief Creates instruction with opcode STGLOBALVAR. Stores `acc` to the global variable of the name `string`. 1501 * This variable must exist. 1502 * @return Instruction 1503 * @param [ in ] acc - Object to store. 1504 * @param [ in ] string - String containing name of global variable. 1505 */ 1506 Instruction CreateStglobalvar(Instruction acc, std::string_view string) &&; 1507 1508 /** 1509 * @brief Creates instruction with opcode LDOBJBYNAME. Loads `acc`'s property of the key `string`. 1510 * @return Instruction 1511 * @param [ in ] acc - Object to load property from. 1512 * @param [ in ] string - String containing property key. 1513 */ 1514 Instruction CreateLdobjbyname(Instruction acc, std::string_view string) &&; 1515 1516 /** 1517 * @brief Creates instruction with opcode STOBJBYNAME. Stores `acc` to `input0`'s property of the key `string`. 1518 * @return Instruction 1519 * @param [ in ] acc - Object to store. 1520 * @param [ in ] string - String containing property key. 1521 * @param [ in ] input0 - Destination object. 1522 */ 1523 Instruction CreateStobjbyname(Instruction acc, std::string_view string, Instruction input0) &&; 1524 1525 /** 1526 * @brief Creates instruction with opcode STOWNBYNAME. Stores `acc` to `input0`'s property of the key `string`. 1527 * @return Instruction 1528 * @param [ in ] acc - Object to store. 1529 * @param [ in ] string - String containing property key. 1530 * @param [ in ] input0 - Destination object. 1531 */ 1532 Instruction CreateStownbyname(Instruction acc, std::string_view string, Instruction input0) &&; 1533 1534 /** 1535 * @brief Creates instruction with opcode LDSUPERBYNAME. Load the property of `acc`'s superclass of the key 1536 * `string`. 1537 * @return Instruction 1538 * @param [ in ] acc - Object to load property from. 1539 * @param [ in ] string - String containing property key. 1540 */ 1541 Instruction CreateLdsuperbyname(Instruction acc, std::string_view string) &&; 1542 1543 /** 1544 * @brief Creates instruction with opcode STSUPERBYNAME. 1545 * Stores `acc` to the property of `input0`'s superclass of the key `string`. 1546 * @return Instruction 1547 * @param [ in ] acc - Object to store. 1548 * @param [ in ] string - String containing property key. 1549 * @param [ in ] input0 - Destination object. 1550 */ 1551 Instruction CreateStsuperbyname(Instruction acc, std::string_view string, Instruction input0) &&; 1552 1553 /** 1554 * @brief Creates instruction with opcode LDLOCALMODULEVAR. Loads the local module variable. 1555 * @return Instruction 1556 * @param [ in ] ed - Export descriptor to load. 1557 */ 1558 Instruction CreateLdlocalmodulevar(core::ExportDescriptor ed) &&; 1559 1560 /** 1561 * @brief Creates instruction with opcode WIDE_LDLOCALMODULEVAR. Loads the local module variable. 1562 * @return Instruction 1563 * @param [ in ] ed - Export descriptor to load. 1564 */ 1565 Instruction CreateWideLdlocalmodulevar(core::ExportDescriptor ed) &&; 1566 1567 /** 1568 * @brief Creates instruction with opcode LDEXTERNALMODULEVAR. Loads the external module variable. 1569 * @return Instruction 1570 * @param [ in ] id - Import descriptor to load. 1571 */ 1572 Instruction CreateLdexternalmodulevar(core::ImportDescriptor id) &&; 1573 1574 /** 1575 * @brief Creates instruction with opcode WIDE_LDEXTERNALMODULEVAR. Loads the external module variable. 1576 * @return Instruction 1577 * @param [ in ] id - Import descriptor to load. 1578 */ 1579 Instruction CreateWideLdexternalmodulevar(core::ImportDescriptor id) &&; 1580 1581 /** 1582 * @brief Creates instruction with opcode STOWNBYVALUEWITHNAMESET. 1583 * Stores `acc` to object `input0`'s property of the key `input1`. 1584 * @return Instruction 1585 * @param [ in ] acc - Object to store. 1586 * @param [ in ] input0 - Destination object. 1587 * @param [ in ] input1 - Property key. 1588 */ 1589 Instruction CreateStownbyvaluewithnameset(Instruction acc, Instruction input0, Instruction input1) &&; 1590 1591 /** 1592 * @brief Creates instruction with opcode STOWNBYNAMEWITHNAMESET. 1593 * Stores `acc` to `input0`'s property of the key `string`. 1594 * @return Instruction 1595 * @param [ in ] acc - Object to store. 1596 * @param [ in ] string - String containing property key. 1597 * @param [ in ] input0 - Destination object. 1598 */ 1599 Instruction CreateStownbynamewithnameset(Instruction acc, std::string_view string, Instruction input0) &&; 1600 1601 /** 1602 * @brief Creates instruction with opcode LDBIGINT. Loads the BigInt instance defined by the `string`. 1603 * @return Instruction 1604 * @param [ in ] string - String containing value. 1605 */ 1606 Instruction CreateLdbigint(std::string_view string) &&; 1607 1608 /** 1609 * @brief Creates instruction with opcode LDTHISBYNAME. Loads this 's property of the key `string`, and stores it in 1610 * `acc`. 1611 * @return Instruction 1612 * @param [ in ] string - String containing the key. 1613 */ 1614 Instruction CreateLdthisbyname(std::string_view string) &&; 1615 1616 /** 1617 * @brief Creates instruction with opcode STTHISBYNAME. Stores `acc` to this's property of the key `string`. 1618 * @return Instruction 1619 * @param [ in ] acc - Inst containing attribute key value. 1620 * @param [ in ] string - String containing the key. 1621 */ 1622 Instruction CreateStthisbyname(Instruction acc, std::string_view string) &&; 1623 1624 /** 1625 * @brief Creates instruction with opcode LDTHISBYVALUE. Loads this's property of the key `acc`, and stores it in 1626 * `acc`. 1627 * @return Instruction 1628 * @param [ in ] acc - Inst containing attribute key value. 1629 */ 1630 Instruction CreateLdthisbyvalue(Instruction acc) &&; 1631 1632 /** 1633 * @brief Creates instruction with opcode STTHISBYVALUE. Stores `acc` to this's property of the key `input0`. 1634 * @return Instruction 1635 * @param [ in ] acc - Inst containing value. 1636 * @param [ in ] input0 - Inst containing attribute key value. 1637 */ 1638 Instruction CreateStthisbyvalue(Instruction acc, Instruction input0) &&; 1639 1640 /** 1641 * @brief Creates instruction with opcode WIDE_LDPATCHVAR. Load` the patch variable in the `imm0`-th slot into 1642 * `acc`. 1643 * @return Instruction 1644 * @param [ in ] imm0 - Long value containing patch variable index. 1645 */ 1646 Instruction CreateWideLdpatchvar(uint64_t imm0) &&; 1647 1648 /** 1649 * @brief Creates instruction with opcode WIDE_STPATCHVAR. Stores `acc` to the patch variable at the `imm0`-th slot. 1650 * @return Instruction 1651 * @param [ in ] acc - Inst containing value. 1652 * @param [ in ] imm0 - Long value containing patch variable index. 1653 */ 1654 Instruction CreateWideStpatchvar(Instruction acc, uint64_t imm0) &&; 1655 1656 /** 1657 * @brief Creates instruction with opcode DYNAMICIMPORT. Executes ImportCall with argument `acc`, and stores the 1658 * result in `acc`. 1659 * @return Instruction 1660 * @param [ in ] acc - Inst containing argument for ImportCall. 1661 */ 1662 Instruction CreateDynamicimport(Instruction acc) &&; 1663 1664 /** 1665 * @brief Creates instruction with opcode ASYNCGENERATORREJECT. Executes the abstract operation AsyncGeneratorReject 1666 * with generator `input0` and exception `acc`. 1667 * @return Instruction 1668 * @param [ in ] acc - Inst containing exception object. 1669 * @param [ in ] input0 - Inst containing generator object. 1670 */ 1671 Instruction CreateAsyncgeneratorreject(Instruction acc, Instruction input0) &&; 1672 1673 /** 1674 * @brief Creates instruction with opcode SETGENERATORSTATE. Sets the state of acc as B. 1675 * @return Instruction 1676 * @param [ in ] acc - Inst containing generator object. 1677 * @param [ in ] imm0 - Long value that is generator status. 1678 */ 1679 Instruction CreateSetgeneratorstate(Instruction acc, uint64_t imm0) &&; 1680 1681 /** 1682 * @brief Creates instruction with opcode RETURN. This instruction returns `acc`. 1683 * @return Instruction 1684 * @param [ in ] acc - Instruction to be returned. 1685 */ 1686 Instruction CreateReturn(Instruction acc) &&; 1687 1688 /** 1689 * @brief Creates instruction with opcode RETURNUNDEFINED. 1690 * @return Instruction 1691 */ 1692 Instruction CreateReturnundefined() &&; 1693 1694 /** 1695 * @brief Creates instruction with opcode IF. 1696 * @return Instruction 1697 * @param [ in ] acc - Instruction that will be compared to zero. 1698 * @param [ in ] cc - Condition code. 1699 */ 1700 Instruction CreateIf(Instruction acc, enum AbckitIsaApiDynamicConditionCode cc) &&; 1701 1702 private: DynamicIsa(const Graph & graph)1703 explicit DynamicIsa(const Graph &graph) : graph_(graph) {}; 1704 const Graph &graph_; 1705 }; 1706 1707 } // namespace abckit 1708 1709 #endif // CPP_ABCKIT_DYNAMIC_ISA_H 1710