Commit f0645612 authored by jarin's avatar jarin Committed by Commit Bot

This is a first step towards reducing the number of stores/loads when...

This is a first step towards reducing the number of stores/loads when suspending/resuming a generator.

Unfortunately, even for an empty generator, we still use 8 register for various things (try-finally, copies of generator object, parser-introduced temporaries). I will try to get rid of these in separate CLs.

Changes:

- SuspendGenerator bytecode now takes register list to save.
- ResumeGenerator was split into two bytecodes:
  * Resume generator reads the state out and marks the generator as
      'executing'.
  * RestoreGeneratorRegisters reloads the registers from
      the generator.
    + this required adding support for output register list.

- Introduced generator_object_ register in the bytecode generator.
  * in subsequent CLs, I will make better use of it, the goal is
      to get rid if the .generator_object local variable.

- Taught register optimizer to flush unassigned registers.

BUG=v8:6379

Review-Url: https://codereview.chromium.org/2894293003
Cr-Commit-Position: refs/heads/master@{#45675}
parent 19f7cc49
......@@ -28,31 +28,17 @@ void BytecodeLoopAssignments::Add(interpreter::Register r) {
}
}
void BytecodeLoopAssignments::AddPair(interpreter::Register r) {
void BytecodeLoopAssignments::AddList(interpreter::Register r, uint32_t count) {
if (r.is_parameter()) {
DCHECK(interpreter::Register(r.index() + 1).is_parameter());
bit_vector_->Add(r.ToParameterIndex(parameter_count_));
bit_vector_->Add(r.ToParameterIndex(parameter_count_) + 1);
} else {
DCHECK(!interpreter::Register(r.index() + 1).is_parameter());
bit_vector_->Add(parameter_count_ + r.index());
bit_vector_->Add(parameter_count_ + r.index() + 1);
}
}
void BytecodeLoopAssignments::AddTriple(interpreter::Register r) {
if (r.is_parameter()) {
DCHECK(interpreter::Register(r.index() + 1).is_parameter());
DCHECK(interpreter::Register(r.index() + 2).is_parameter());
bit_vector_->Add(r.ToParameterIndex(parameter_count_));
bit_vector_->Add(r.ToParameterIndex(parameter_count_) + 1);
bit_vector_->Add(r.ToParameterIndex(parameter_count_) + 2);
for (uint32_t i = 0; i < count; i++) {
DCHECK(interpreter::Register(r.index() + i).is_parameter());
bit_vector_->Add(r.ToParameterIndex(parameter_count_) + i);
}
} else {
DCHECK(!interpreter::Register(r.index() + 1).is_parameter());
DCHECK(!interpreter::Register(r.index() + 2).is_parameter());
bit_vector_->Add(parameter_count_ + r.index());
bit_vector_->Add(parameter_count_ + r.index() + 1);
bit_vector_->Add(parameter_count_ + r.index() + 2);
for (uint32_t i = 0; i < count; i++) {
DCHECK(!interpreter::Register(r.index() + i).is_parameter());
bit_vector_->Add(parameter_count_ + r.index() + i);
}
}
}
......@@ -112,6 +98,17 @@ void UpdateInLiveness(Bytecode bytecode, BytecodeLivenessState& in_liveness,
}
break;
}
case OperandType::kRegOutList: {
interpreter::Register r = accessor.GetRegisterOperand(i++);
uint32_t reg_count = accessor.GetRegisterCountOperand(i);
if (!r.is_parameter()) {
for (uint32_t j = 0; j < reg_count; ++j) {
DCHECK(!interpreter::Register(r.index() + j).is_parameter());
in_liveness.MarkRegisterDead(r.index() + j);
}
}
break;
}
case OperandType::kRegOutPair: {
interpreter::Register r = accessor.GetRegisterOperand(i);
if (!r.is_parameter()) {
......@@ -227,12 +224,18 @@ void UpdateAssignments(Bytecode bytecode, BytecodeLoopAssignments& assignments,
assignments.Add(accessor.GetRegisterOperand(i));
break;
}
case OperandType::kRegOutList: {
interpreter::Register r = accessor.GetRegisterOperand(i++);
uint32_t reg_count = accessor.GetRegisterCountOperand(i);
assignments.AddList(r, reg_count);
break;
}
case OperandType::kRegOutPair: {
assignments.AddPair(accessor.GetRegisterOperand(i));
assignments.AddList(accessor.GetRegisterOperand(i), 2);
break;
}
case OperandType::kRegOutTriple: {
assignments.AddTriple(accessor.GetRegisterOperand(i));
assignments.AddList(accessor.GetRegisterOperand(i), 3);
break;
}
default:
......
......@@ -24,8 +24,7 @@ class V8_EXPORT_PRIVATE BytecodeLoopAssignments {
BytecodeLoopAssignments(int parameter_count, int register_count, Zone* zone);
void Add(interpreter::Register r);
void AddPair(interpreter::Register r);
void AddTriple(interpreter::Register r);
void AddList(interpreter::Register r, uint32_t count);
void AddAll();
void Union(const BytecodeLoopAssignments& other);
......
......@@ -2277,15 +2277,20 @@ void BytecodeGraphBuilder::VisitSuspendGenerator() {
Node* state = environment()->LookupAccumulator();
Node* generator = environment()->LookupRegister(
bytecode_iterator().GetRegisterOperand(0));
interpreter::Register first_reg = bytecode_iterator().GetRegisterOperand(1);
// We assume we are storing a range starting from index 0.
CHECK_EQ(0, first_reg.index());
int register_count =
static_cast<int>(bytecode_iterator().GetRegisterCountOperand(2));
SuspendFlags flags = interpreter::SuspendGeneratorBytecodeFlags::Decode(
bytecode_iterator().GetFlagOperand(1));
bytecode_iterator().GetFlagOperand(3));
// The offsets used by the bytecode iterator are relative to a different base
// than what is used in the interpreter, hence the addition.
Node* offset =
jsgraph()->Constant(bytecode_iterator().current_offset() +
(BytecodeArray::kHeaderSize - kHeapObjectTag));
int register_count = environment()->register_count();
int value_input_count = 3 + register_count;
Node** value_inputs = local_zone()->NewArray<Node*>(value_input_count);
......@@ -2301,21 +2306,31 @@ void BytecodeGraphBuilder::VisitSuspendGenerator() {
value_input_count, value_inputs, false);
}
void BytecodeGraphBuilder::VisitResumeGenerator() {
void BytecodeGraphBuilder::VisitRestoreGeneratorState() {
Node* generator = environment()->LookupRegister(
bytecode_iterator().GetRegisterOperand(0));
Node* state =
NewNode(javascript()->GeneratorRestoreContinuation(), generator);
environment()->BindAccumulator(state, Environment::kAttachFrameState);
}
void BytecodeGraphBuilder::VisitRestoreGeneratorRegisters() {
Node* generator =
environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0));
interpreter::Register first_reg = bytecode_iterator().GetRegisterOperand(1);
// We assume we are restoring registers starting fromm index 0.
CHECK_EQ(0, first_reg.index());
int register_count =
static_cast<int>(bytecode_iterator().GetRegisterCountOperand(2));
// Bijection between registers and array indices must match that used in
// InterpreterAssembler::ExportRegisterFile.
for (int i = 0; i < environment()->register_count(); ++i) {
for (int i = 0; i < register_count; ++i) {
Node* value = NewNode(javascript()->GeneratorRestoreRegister(i), generator);
environment()->BindRegister(interpreter::Register(i), value);
}
Node* state =
NewNode(javascript()->GeneratorRestoreContinuation(), generator);
environment()->BindAccumulator(state);
}
void BytecodeGraphBuilder::VisitWide() {
......
......@@ -770,8 +770,9 @@ class V8_EXPORT_PRIVATE JSOperatorBuilder final
const Operator* GeneratorStore(int register_count,
SuspendFlags suspend_flags);
// Used to implement Ignition's ResumeGenerator bytecode.
// Used to implement Ignition's RestoreGeneratorState bytecode.
const Operator* GeneratorRestoreContinuation();
// Used to implement Ignition's RestoreGeneratorRegisters bytecode.
const Operator* GeneratorRestoreRegister(int index);
const Operator* StackCheck();
......
......@@ -261,6 +261,15 @@ class OperandHelper<OperandType::kRegOut> {
}
};
template <>
class OperandHelper<OperandType::kRegOutList> {
public:
INLINE(static uint32_t Convert(BytecodeArrayBuilder* builder,
RegisterList reg_list)) {
return builder->GetOutputRegisterListOperand(reg_list);
}
};
template <>
class OperandHelper<OperandType::kRegOutPair> {
public:
......@@ -1235,15 +1244,22 @@ BytecodeArrayBuilder& BytecodeArrayBuilder::LoadModuleVariable(int cell_index,
}
BytecodeArrayBuilder& BytecodeArrayBuilder::SuspendGenerator(
Register generator, SuspendFlags flags) {
OutputSuspendGenerator(generator,
Register generator, RegisterList registers, SuspendFlags flags) {
OutputSuspendGenerator(generator, registers, registers.register_count(),
SuspendGeneratorBytecodeFlags::Encode(flags));
return *this;
}
BytecodeArrayBuilder& BytecodeArrayBuilder::ResumeGenerator(
BytecodeArrayBuilder& BytecodeArrayBuilder::RestoreGeneratorState(
Register generator) {
OutputResumeGenerator(generator);
OutputRestoreGeneratorState(generator);
return *this;
}
BytecodeArrayBuilder& BytecodeArrayBuilder::RestoreGeneratorRegisters(
Register generator, RegisterList registers) {
OutputRestoreGeneratorRegisters(generator, registers,
registers.register_count());
return *this;
}
......
......@@ -401,8 +401,11 @@ class V8_EXPORT_PRIVATE BytecodeArrayBuilder final
// Generators.
BytecodeArrayBuilder& SuspendGenerator(Register generator,
RegisterList registers,
SuspendFlags flags);
BytecodeArrayBuilder& ResumeGenerator(Register generator);
BytecodeArrayBuilder& RestoreGeneratorState(Register generator);
BytecodeArrayBuilder& RestoreGeneratorRegisters(Register generator,
RegisterList registers);
// Exception handling.
BytecodeArrayBuilder& MarkHandler(int handler_id,
......
......@@ -174,6 +174,7 @@ std::ostream& BytecodeDecoder::Decode(std::ostream& os,
<< reg_list.last_register().ToString(parameter_count);
break;
}
case interpreter::OperandType::kRegOutList:
case interpreter::OperandType::kRegList: {
DCHECK_LT(i, number_of_operands - 1);
DCHECK_EQ(Bytecodes::GetOperandType(bytecode, i + 1),
......
......@@ -776,6 +776,7 @@ BytecodeGenerator::BytecodeGenerator(CompilationInfo* info)
execution_context_(nullptr),
execution_result_(nullptr),
generator_jump_table_(nullptr),
generator_object_(),
generator_state_(),
loop_depth_(0) {
DCHECK_EQ(closure_scope(), closure_scope()->GetClosureScope());
......@@ -962,6 +963,7 @@ void BytecodeGenerator::VisitIterationHeader(IterationStatement* stmt,
void BytecodeGenerator::BuildGeneratorPrologue() {
DCHECK_GT(info()->literal()->suspend_count(), 0);
generator_object_ = register_allocator()->NewRegister();
generator_state_ = register_allocator()->NewRegister();
generator_jump_table_ =
builder()->AllocateJumpTable(info()->literal()->suspend_count(), 0);
......@@ -970,19 +972,20 @@ void BytecodeGenerator::BuildGeneratorPrologue() {
// indicate that this is a resume call and to pass in the generator object.
// In ordinary calls, new.target is always undefined because generator
// functions are non-constructable.
Register generator_object = Register::new_target();
builder()->MoveRegister(Register::new_target(), generator_object_);
BytecodeLabel regular_call;
builder()
->LoadAccumulatorWithRegister(generator_object)
->LoadAccumulatorWithRegister(generator_object_)
.JumpIfUndefined(&regular_call);
// This is a resume call. Restore the current context and the registers,
// then perform state dispatch.
Register generator_context = register_allocator()->NewRegister();
builder()
->CallRuntime(Runtime::kInlineGeneratorGetContext, generator_object)
->CallRuntime(Runtime::kInlineGeneratorGetContext, generator_object_)
.PushContext(generator_context)
.ResumeGenerator(generator_object)
.RestoreGeneratorState(generator_object_)
.StoreAccumulatorInRegister(generator_state_)
.SwitchOnSmiNoFeedback(generator_jump_table_);
// We fall through when the generator state is not in the jump table.
......@@ -2518,8 +2521,8 @@ void BytecodeGenerator::VisitAssignment(Assignment* expr) {
}
}
void BytecodeGenerator::BuildGeneratorSuspend(Suspend* expr,
Register generator) {
void BytecodeGenerator::BuildGeneratorSuspend(Suspend* expr, Register generator,
RegisterList registers_to_save) {
RegisterAllocationScope register_scope(this);
builder()->SetExpressionPosition(expr);
......@@ -2528,7 +2531,7 @@ void BytecodeGenerator::BuildGeneratorSuspend(Suspend* expr,
// Save context, registers, and state. Then return.
builder()
->LoadLiteral(Smi::FromInt(expr->suspend_id()))
.SuspendGenerator(generator, expr->flags());
.SuspendGenerator(generator, registers_to_save, expr->flags());
if (expr->IsNonInitialAsyncGeneratorYield()) {
// AsyncGenerator yields (with the exception of the initial yield) delegate
......@@ -2549,10 +2552,13 @@ void BytecodeGenerator::BuildGeneratorSuspend(Suspend* expr,
builder()->Return(); // Hard return (ignore any finally blocks).
}
void BytecodeGenerator::BuildGeneratorResume(Suspend* expr,
Register generator) {
void BytecodeGenerator::BuildGeneratorResume(
Suspend* expr, Register generator, RegisterList registers_to_restore) {
RegisterAllocationScope register_scope(this);
// Clobbers all registers.
builder()->RestoreGeneratorRegisters(generator_object_, registers_to_restore);
// Update state to indicate that we have finished resuming. Loop headers
// rely on this.
builder()
......@@ -2623,10 +2629,11 @@ void BytecodeGenerator::BuildGeneratorResume(Suspend* expr,
void BytecodeGenerator::VisitSuspend(Suspend* expr) {
Register generator = VisitForRegisterValue(expr->generator_object());
BuildGeneratorSuspend(expr, generator);
RegisterList registers(0, register_allocator()->next_register_index());
BuildGeneratorSuspend(expr, generator, registers);
builder()->Bind(generator_jump_table_, static_cast<int>(expr->suspend_id()));
// Upon resume, we continue here.
BuildGeneratorResume(expr, generator);
BuildGeneratorResume(expr, generator, registers);
}
void BytecodeGenerator::VisitThrow(Throw* expr) {
......@@ -3728,7 +3735,8 @@ void BytecodeGenerator::BuildGeneratorObjectVariableInitialization() {
builder()
->MoveRegister(Register::function_closure(), args[0])
.MoveRegister(builder()->Receiver(), args[1])
.CallRuntime(Runtime::kInlineCreateJSGeneratorObject, args);
.CallRuntime(Runtime::kInlineCreateJSGeneratorObject, args)
.StoreAccumulatorInRegister(generator_object_);
BuildVariableAssignment(closure_scope()->generator_object_var(), Token::INIT,
FeedbackSlot::Invalid(), HoleCheckMode::kElided);
}
......
......@@ -136,8 +136,10 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> {
void BuildNewLocalWithContext(Scope* scope);
void BuildGeneratorPrologue();
void BuildGeneratorSuspend(Suspend* expr, Register generator);
void BuildGeneratorResume(Suspend* expr, Register generator);
void BuildGeneratorSuspend(Suspend* expr, Register generator,
RegisterList registers_to_save);
void BuildGeneratorResume(Suspend* expr, Register generator,
RegisterList registers_to_restore);
void VisitArgumentsObject(Variable* variable);
void VisitRestArgumentsArray(Variable* rest);
......@@ -256,6 +258,7 @@ class BytecodeGenerator final : public AstVisitor<BytecodeGenerator> {
ExpressionResultScope* execution_result_;
BytecodeJumpTable* generator_jump_table_;
Register generator_object_;
Register generator_state_;
int loop_depth_;
};
......
......@@ -20,6 +20,7 @@ namespace interpreter {
#define REGISTER_OUTPUT_OPERAND_TYPE_LIST(V) \
V(RegOut, OperandTypeInfo::kScalableSignedByte) \
V(RegOutList, OperandTypeInfo::kScalableSignedByte) \
V(RegOutPair, OperandTypeInfo::kScalableSignedByte) \
V(RegOutTriple, OperandTypeInfo::kScalableSignedByte)
......
......@@ -304,6 +304,7 @@ BytecodeRegisterOptimizer::GetMaterializedEquivalentNotAccumulator(
void BytecodeRegisterOptimizer::Materialize(RegisterInfo* info) {
if (!info->materialized()) {
RegisterInfo* materialized = info->GetMaterializedEquivalent();
DCHECK_NOT_NULL(materialized);
OutputRegisterTransfer(materialized, info);
}
}
......@@ -410,7 +411,7 @@ void BytecodeRegisterOptimizer::GrowRegisterMap(Register reg) {
for (size_t i = old_size; i < new_size; ++i) {
register_info_table_[i] =
new (zone()) RegisterInfo(RegisterFromRegisterInfoTableIndex(i),
NextEquivalenceId(), false, false);
NextEquivalenceId(), true, false);
}
}
}
......
......@@ -67,7 +67,7 @@ class V8_EXPORT_PRIVATE BytecodeRegisterOptimizer final
if (Bytecodes::IsJump(bytecode) || Bytecodes::IsSwitch(bytecode) ||
bytecode == Bytecode::kDebugger ||
bytecode == Bytecode::kSuspendGenerator ||
bytecode == Bytecode::kResumeGenerator) {
bytecode == Bytecode::kRestoreGeneratorRegisters) {
// All state must be flushed before emitting
// - a jump bytecode (as the register equivalents at the jump target
// aren't known)
......@@ -75,7 +75,7 @@ class V8_EXPORT_PRIVATE BytecodeRegisterOptimizer final
// aren't known)
// - a call to the debugger (as it can manipulate locals and parameters),
// - a generator suspend (as this involves saving all registers).
// - a generator resume (as this involves restoring all registers).
// - a generator register restore.
Flush();
}
......
......@@ -315,9 +315,11 @@ namespace interpreter {
V(Return, AccumulatorUse::kRead) \
\
/* Generators */ \
V(RestoreGeneratorState, AccumulatorUse::kWrite, OperandType::kReg) \
V(SuspendGenerator, AccumulatorUse::kRead, OperandType::kReg, \
OperandType::kFlag8) \
V(ResumeGenerator, AccumulatorUse::kWrite, OperandType::kReg) \
OperandType::kRegList, OperandType::kRegCount, OperandType::kFlag8) \
V(RestoreGeneratorRegisters, AccumulatorUse::kNone, OperandType::kReg, \
OperandType::kRegOutList, OperandType::kRegCount) \
\
/* Debugger */ \
V(Debugger, AccumulatorUse::kNone) \
......@@ -821,6 +823,7 @@ class V8_EXPORT_PRIVATE Bytecodes final {
case OperandType::kRegOutTriple:
return 3;
case OperandType::kRegList:
case OperandType::kRegOutList:
UNREACHABLE();
default:
return 0;
......
......@@ -1390,20 +1390,24 @@ bool InterpreterAssembler::TargetSupportsUnalignedAccess() {
#endif
}
Node* InterpreterAssembler::RegisterCount() {
Node* bytecode_array = LoadRegister(Register::bytecode_array());
Node* frame_size = LoadObjectField(
bytecode_array, BytecodeArray::kFrameSizeOffset, MachineType::Uint32());
return WordShr(ChangeUint32ToWord(frame_size),
IntPtrConstant(kPointerSizeLog2));
void InterpreterAssembler::AbortIfRegisterCountInvalid(Node* register_file,
Node* register_count) {
Node* array_size = LoadAndUntagFixedArrayBaseLength(register_file);
Label ok(this), abort(this, Label::kDeferred);
Branch(UintPtrLessThanOrEqual(register_count, array_size), &ok, &abort);
BIND(&abort);
Abort(kInvalidRegisterFileInGenerator);
Goto(&ok);
BIND(&ok);
}
Node* InterpreterAssembler::ExportRegisterFile(Node* array) {
Node* register_count = RegisterCount();
Node* InterpreterAssembler::ExportRegisterFile(Node* array,
Node* register_count) {
if (FLAG_debug_code) {
Node* array_size = LoadAndUntagFixedArrayBaseLength(array);
AbortIfWordNotEqual(array_size, register_count,
kInvalidRegisterFileInGenerator);
AbortIfRegisterCountInvalid(array, register_count);
}
Variable var_index(this, MachineType::PointerRepresentation());
......@@ -1432,12 +1436,10 @@ Node* InterpreterAssembler::ExportRegisterFile(Node* array) {
return array;
}
Node* InterpreterAssembler::ImportRegisterFile(Node* array) {
Node* register_count = RegisterCount();
Node* InterpreterAssembler::ImportRegisterFile(Node* array,
Node* register_count) {
if (FLAG_debug_code) {
Node* array_size = LoadAndUntagFixedArrayBaseLength(array);
AbortIfWordNotEqual(array_size, register_count,
kInvalidRegisterFileInGenerator);
AbortIfRegisterCountInvalid(array, register_count);
}
Variable var_index(this, MachineType::PointerRepresentation());
......
......@@ -81,12 +81,11 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
void GotoIfHasContextExtensionUpToDepth(compiler::Node* context,
compiler::Node* depth, Label* target);
// Number of registers.
compiler::Node* RegisterCount();
// Backup/restore register file to/from a fixed array of the correct length.
compiler::Node* ExportRegisterFile(compiler::Node* array);
compiler::Node* ImportRegisterFile(compiler::Node* array);
compiler::Node* ExportRegisterFile(compiler::Node* array,
compiler::Node* register_count);
compiler::Node* ImportRegisterFile(compiler::Node* array,
compiler::Node* register_count);
// Loads from and stores to the interpreter register file.
compiler::Node* LoadRegister(Register reg);
......@@ -221,6 +220,9 @@ class V8_EXPORT_PRIVATE InterpreterAssembler : public CodeStubAssembler {
void Abort(BailoutReason bailout_reason);
void AbortIfWordNotEqual(compiler::Node* lhs, compiler::Node* rhs,
BailoutReason bailout_reason);
// Abort if |register_count| is invalid for given register file array.
void AbortIfRegisterCountInvalid(compiler::Node* register_file,
compiler::Node* register_count);
// Dispatch to frame dropper trampoline if necessary.
void MaybeDropFrames(compiler::Node* context);
......
......@@ -3612,14 +3612,15 @@ IGNITION_HANDLER(Illegal, InterpreterAssembler) { Abort(kInvalidBytecode); }
// No operation.
IGNITION_HANDLER(Nop, InterpreterAssembler) { Dispatch(); }
// SuspendGenerator <generator>
// SuspendGenerator <generator> <first input register> <register count> <flags>
//
// Exports the register file and stores it into the generator. Also stores the
// current context, the state given in the accumulator, and the current bytecode
// offset (for debugging purposes) into the generator.
IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) {
Node* generator_reg = BytecodeOperandReg(0);
Node* flags = BytecodeOperandFlag(1);
Node* flags = BytecodeOperandFlag(3);
Node* generator = LoadRegister(generator_reg);
Label if_stepping(this, Label::kDeferred), ok(this);
......@@ -3637,7 +3638,13 @@ IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) {
Node* context = GetContext();
Node* state = GetAccumulator();
ExportRegisterFile(array);
// Bytecode operand 1 should be always 0 (we are always store registers
// from the beginning).
CSA_ASSERT(this, WordEqual(BytecodeOperandReg(1),
IntPtrConstant(Register(0).ToOperand())));
// Bytecode operand 2 is the number of registers to store to the generator.
Node* register_count = ChangeUint32ToWord(BytecodeOperandCount(2));
ExportRegisterFile(array, register_count);
StoreObjectField(generator, JSGeneratorObject::kContextOffset, context);
StoreObjectField(generator, JSGeneratorObject::kContinuationOffset, state);
......@@ -3686,18 +3693,14 @@ IGNITION_HANDLER(SuspendGenerator, InterpreterAssembler) {
}
}
// ResumeGenerator <generator>
// RestoreGeneratorState <generator>
//
// Imports the register file stored in the generator. Also loads the
// generator's state and stores it in the accumulator, before overwriting it
// with kGeneratorExecuting.
IGNITION_HANDLER(ResumeGenerator, InterpreterAssembler) {
// Loads the generator's state and stores it in the accumulator,
// before overwriting it with kGeneratorExecuting.
IGNITION_HANDLER(RestoreGeneratorState, InterpreterAssembler) {
Node* generator_reg = BytecodeOperandReg(0);
Node* generator = LoadRegister(generator_reg);
ImportRegisterFile(
LoadObjectField(generator, JSGeneratorObject::kRegisterFileOffset));
Node* old_state =
LoadObjectField(generator, JSGeneratorObject::kContinuationOffset);
Node* new_state = Int32Constant(JSGeneratorObject::kGeneratorExecuting);
......@@ -3708,6 +3711,28 @@ IGNITION_HANDLER(ResumeGenerator, InterpreterAssembler) {
Dispatch();
}
// RestoreGeneratorRegisters <generator> <first output register> <register
// count>
//
// Imports the register file stored in the generator.
IGNITION_HANDLER(RestoreGeneratorRegisters, InterpreterAssembler) {
Node* generator_reg = BytecodeOperandReg(0);
// Bytecode operand 1 is the start register. It should always be 0, so let's
// ignore it.
CSA_ASSERT(this, WordEqual(BytecodeOperandReg(1),
IntPtrConstant(Register(0).ToOperand())));
// Bytecode operand 2 is the number of registers to store to the generator.
Node* register_count = ChangeUint32ToWord(BytecodeOperandCount(2));
Node* generator = LoadRegister(generator_reg);
ImportRegisterFile(
LoadObjectField(generator, JSGeneratorObject::kRegisterFileOffset),
register_count);
Dispatch();
}
} // namespace
Handle<Code> GenerateBytecodeHandler(Isolate* isolate, Bytecode bytecode,
......
......@@ -14,98 +14,101 @@ snippet: "
}
f();
"
frame size: 26
frame size: 27
parameter count: 1
bytecode array length: 715
bytecode array length: 739
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(12),
B(ResumeGenerator), R(new_target),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(11), U8(1),
B(PushContext), R(13),
B(RestoreGeneratorState), R(11),
B(Star), R(12),
B(SwitchOnSmiNoFeedback), U8(0), U8(3), I8(0),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Mov), R(closure), R(13),
B(Mov), R(this), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(13), U8(2),
B(Star), R(12),
B(Mov), R(closure), R(14),
B(Mov), R(this), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Star), R(2),
/* 16 E> */ B(StackCheck),
B(LdaUndefined),
B(Star), R(13),
B(CallJSRuntime), U8(%async_function_promise_create), R(13), U8(1),
B(Star), R(14),
B(CallJSRuntime), U8(%async_function_promise_create), R(14), U8(1),
B(Star), R(7),
B(Mov), R(context), R(15),
B(Mov), R(context), R(16),
B(Mov), R(2), R(11),
B(Mov), R(context), R(17),
B(LdaZero),
B(Star), R(6),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(3), U8(17),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(4), U8(8),
B(Star), R(22),
B(LdaNamedProperty), R(22), U8(4), U8(8),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(10),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(10),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(21), U8(5), U8(4),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(6),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(22), U8(1),
B(LdaNamedProperty), R(22), U8(5), U8(4),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(6),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(23), U8(1),
B(Star), R(4),
B(Ldar), R(11),
B(Ldar), R(12),
B(SwitchOnSmiNoFeedback), U8(6), U8(1), I8(0),
B(LdaSmi), I8(-2),
/* 43 E> */ B(TestEqualStrictNoFeedback), R(11),
/* 43 E> */ B(TestEqualStrictNoFeedback), R(12),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 40 S> */ B(LdaUndefined),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kAbort), R(22), U8(1),
/* 40 S> */ B(LdaUndefined),
B(Star), R(23),
/* 40 E> */ B(LdaNamedProperty), R(4), U8(7), U8(14),
B(Star), R(24),
B(CallProperty0), R(24), R(4), U8(12),
B(Star), R(24),
B(Mov), R(2), R(23),
B(Mov), R(7), R(25),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(4),
B(Star), R(25),
B(CallProperty0), R(25), R(4), U8(12),
B(Star), R(25),
B(Mov), R(2), R(24),
B(Mov), R(7), R(26),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(23), U8(4),
B(LdaZero),
B(Mov), R(2), R(21),
B(Mov), R(7), R(22),
B(SuspendGenerator), R(21), U8(2),
B(Ldar), R(22),
B(Mov), R(2), R(22),
B(Mov), R(7), R(23),
B(SuspendGenerator), R(22), R(0), U8(23), U8(2),
B(Ldar), R(23),
/* 57 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(23),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(24),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(23),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(23),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(18),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(19),
B(LdaZero),
B(Star), R(17),
B(Star), R(18),
B(Jump), U8(101),
B(Ldar), R(22),
B(Ldar), R(23),
/* 40 E> */ B(ReThrow),
B(Mov), R(22), R(5),
B(Mov), R(23), R(5),
/* 40 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
......@@ -121,56 +124,106 @@ bytecodes: [
B(Mov), R(3), R(0),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(147), I8(0),
B(JumpLoop), U8(153), I8(0),
B(Jump), U8(40),
B(Star), R(21),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(10), U8(11),
B(Star), R(20),
B(CreateCatchContext), R(22), U8(10), U8(11),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(Ldar), R(21),
B(PushContext), R(22),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(20),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kReThrow), R(22), U8(1),
B(PopContext), R(21),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kReThrow), R(23), U8(1),
B(PopContext), R(22),
B(LdaSmi), I8(-1),
B(Star), R(17),
B(Jump), U8(8),
B(Star), R(18),
B(Jump), U8(8),
B(Star), R(19),
B(LdaSmi), I8(1),
B(Star), R(17),
B(Star), R(18),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(19),
B(Star), R(20),
B(LdaZero),
B(TestEqualStrict), R(6), U8(21),
B(JumpIfTrueConstant), U8(15),
B(JumpIfTrueConstant), U8(16),
B(LdaNamedProperty), R(4), U8(12), U8(22),
B(Star), R(9),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(248),
B(JumpConstant), U8(15),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(25),
B(JumpIfFalse), U8(139),
B(JumpIfFalse), U8(145),
B(Ldar), R(9),
B(TestTypeOf), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(20),
B(LdaConstant), U8(13),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kNewTypeError), R(20), U8(2),
B(LdaConstant), U8(13),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kNewTypeError), R(21), U8(2),
B(Throw),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
B(LdaUndefined),
B(Star), R(23),
B(Mov), R(9), R(25),
B(Mov), R(4), R(26),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(25), U8(2),
B(Star), R(25),
B(Mov), R(2), R(24),
B(Mov), R(7), R(26),
B(CallJSRuntime), U8(%async_function_await_caught), R(23), U8(4),
B(LdaSmi), I8(1),
B(Mov), R(2), R(22),
B(Mov), R(7), R(23),
B(SuspendGenerator), R(22), R(0), U8(23), U8(2),
B(Ldar), R(23),
/* 57 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(23),
B(LdaSmi), I8(-2),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(24),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(15),
B(LdaZero),
B(Star), R(14),
B(Jump), U8(237),
B(Ldar), R(23),
B(ReThrow),
B(Ldar), R(23),
B(Jump), U8(20),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(22), U8(10), U8(14),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(21),
B(PushContext), R(22),
B(PopContext), R(22),
B(Jump), U8(110),
B(LdaUndefined),
B(Star), R(22),
B(Mov), R(9), R(24),
......@@ -179,15 +232,16 @@ bytecodes: [
B(Star), R(24),
B(Mov), R(2), R(23),
B(Mov), R(7), R(25),
B(CallJSRuntime), U8(%async_function_await_caught), R(22), U8(4),
B(LdaSmi), I8(1),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(4),
B(LdaSmi), I8(2),
B(Mov), R(2), R(21),
B(Mov), R(7), R(22),
B(SuspendGenerator), R(21), U8(2),
B(SuspendGenerator), R(21), R(0), U8(22), U8(2),
B(Ldar), R(22),
/* 57 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(22),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
......@@ -202,142 +256,93 @@ bytecodes: [
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
B(Jump), U8(231),
B(Ldar), R(22),
B(ReThrow),
B(Ldar), R(22),
B(Jump), U8(20),
B(Star), R(21),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(10), U8(14),
B(Star), R(20),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(PopContext), R(21),
B(Jump), U8(104),
B(LdaUndefined),
B(Star), R(21),
B(Mov), R(9), R(23),
B(Mov), R(4), R(24),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(23), U8(2),
B(Star), R(23),
B(Mov), R(2), R(22),
B(Mov), R(7), R(24),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(21), U8(4),
B(LdaSmi), I8(2),
B(Mov), R(2), R(20),
B(Mov), R(7), R(21),
B(SuspendGenerator), R(20), U8(2),
B(Ldar), R(21),
/* 57 S> */ B(Return),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(20), U8(1),
B(Star), R(21),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(20), U8(1),
B(Star), R(22),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(24),
B(Mov), R(21), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(23), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
B(Jump), U8(121),
B(Ldar), R(21),
B(Ldar), R(22),
B(ReThrow),
B(Mov), R(21), R(10),
B(Mov), R(22), R(10),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(10), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
B(Ldar), R(19),
B(Ldar), R(20),
B(SetPendingMessage),
B(Ldar), R(17),
B(SwitchOnSmiNoFeedback), U8(16), U8(2), I8(0),
B(Ldar), R(18),
B(SwitchOnSmiNoFeedback), U8(17), U8(2), I8(0),
B(Jump), U8(13),
B(LdaZero),
B(Star), R(13),
B(Mov), R(18), R(14),
B(Star), R(14),
B(Mov), R(19), R(15),
B(Jump), U8(83),
B(Ldar), R(18),
B(Ldar), R(19),
B(ReThrow),
B(LdaUndefined),
B(Star), R(17),
B(Star), R(18),
B(LdaUndefined),
B(Star), R(19),
B(Mov), R(7), R(18),
B(CallJSRuntime), U8(%promise_resolve), R(17), U8(3),
B(Star), R(20),
B(Mov), R(7), R(19),
B(CallJSRuntime), U8(%promise_resolve), R(18), U8(3),
B(LdaZero),
B(Star), R(13),
B(Mov), R(7), R(14),
B(Star), R(14),
B(Mov), R(7), R(15),
B(Jump), U8(59),
B(Jump), U8(45),
B(Star), R(17),
B(Star), R(18),
B(Ldar), R(closure),
B(CreateCatchContext), R(17), U8(10), U8(18),
B(Star), R(16),
B(CreateCatchContext), R(18), U8(10), U8(19),
B(Star), R(17),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(16),
B(PushContext), R(17),
B(Ldar), R(17),
B(PushContext), R(18),
B(LdaUndefined),
B(Star), R(18),
B(Star), R(19),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(20),
B(LdaFalse),
B(Star), R(21),
B(Mov), R(7), R(19),
B(CallJSRuntime), U8(%promise_internal_reject), R(18), U8(4),
B(PopContext), R(17),
B(LdaFalse),
B(Star), R(22),
B(Mov), R(7), R(20),
B(CallJSRuntime), U8(%promise_internal_reject), R(19), U8(4),
B(PopContext), R(18),
B(LdaZero),
B(Star), R(13),
B(Mov), R(7), R(14),
B(Star), R(14),
B(Mov), R(7), R(15),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(13),
B(Jump), U8(8),
B(Star), R(14),
B(Jump), U8(8),
B(Star), R(15),
B(LdaSmi), I8(1),
B(Star), R(13),
B(Star), R(14),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(15),
B(LdaUndefined),
B(Star), R(16),
B(Mov), R(7), R(17),
B(CallJSRuntime), U8(%async_function_promise_release), R(16), U8(2),
B(Ldar), R(15),
B(LdaUndefined),
B(Star), R(17),
B(Mov), R(7), R(18),
B(CallJSRuntime), U8(%async_function_promise_release), R(17), U8(2),
B(Ldar), R(16),
B(SetPendingMessage),
B(Ldar), R(13),
B(SwitchOnSmiNoFeedback), U8(19), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(14),
B(SwitchOnSmiNoFeedback), U8(20), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(15),
/* 57 S> */ B(Return),
B(Ldar), R(14),
B(Ldar), R(15),
B(ReThrow),
B(LdaUndefined),
/* 57 S> */ B(Return),
]
constant pool: [
Smi [99],
Smi [395],
Smi [505],
Smi [102],
Smi [406],
Smi [522],
TUPLE2_TYPE,
SYMBOL_TYPE,
SYMBOL_TYPE,
Smi [57],
Smi [59],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -346,7 +351,8 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [259],
Smi [260],
Smi [271],
Smi [6],
Smi [14],
FIXED_ARRAY_TYPE,
......@@ -354,11 +360,11 @@ constant pool: [
Smi [9],
]
handlers: [
[56, 670, 676],
[59, 625, 627],
[65, 303, 309],
[68, 263, 265],
[370, 458, 460],
[62, 694, 700],
[65, 649, 651],
[71, 315, 321],
[74, 275, 277],
[382, 476, 478],
]
---
......@@ -368,98 +374,101 @@ snippet: "
}
f();
"
frame size: 26
frame size: 27
parameter count: 1
bytecode array length: 743
bytecode array length: 767
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(12),
B(ResumeGenerator), R(new_target),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(11), U8(1),
B(PushContext), R(13),
B(RestoreGeneratorState), R(11),
B(Star), R(12),
B(SwitchOnSmiNoFeedback), U8(0), U8(3), I8(0),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Mov), R(closure), R(13),
B(Mov), R(this), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(13), U8(2),
B(Star), R(12),
B(Mov), R(closure), R(14),
B(Mov), R(this), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Star), R(2),
/* 16 E> */ B(StackCheck),
B(LdaUndefined),
B(Star), R(13),
B(CallJSRuntime), U8(%async_function_promise_create), R(13), U8(1),
B(Star), R(14),
B(CallJSRuntime), U8(%async_function_promise_create), R(14), U8(1),
B(Star), R(7),
B(Mov), R(context), R(15),
B(Mov), R(context), R(16),
B(Mov), R(2), R(11),
B(Mov), R(context), R(17),
B(LdaZero),
B(Star), R(6),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(3), U8(17),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(4), U8(8),
B(Star), R(22),
B(LdaNamedProperty), R(22), U8(4), U8(8),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(10),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(10),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(21), U8(5), U8(4),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(6),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(22), U8(1),
B(LdaNamedProperty), R(22), U8(5), U8(4),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(6),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(23), U8(1),
B(Star), R(4),
B(Ldar), R(11),
B(Ldar), R(12),
B(SwitchOnSmiNoFeedback), U8(6), U8(1), I8(0),
B(LdaSmi), I8(-2),
/* 43 E> */ B(TestEqualStrictNoFeedback), R(11),
/* 43 E> */ B(TestEqualStrictNoFeedback), R(12),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 40 S> */ B(LdaUndefined),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kAbort), R(22), U8(1),
/* 40 S> */ B(LdaUndefined),
B(Star), R(23),
/* 40 E> */ B(LdaNamedProperty), R(4), U8(7), U8(14),
B(Star), R(24),
B(CallProperty0), R(24), R(4), U8(12),
B(Star), R(24),
B(Mov), R(2), R(23),
B(Mov), R(7), R(25),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(4),
B(Star), R(25),
B(CallProperty0), R(25), R(4), U8(12),
B(Star), R(25),
B(Mov), R(2), R(24),
B(Mov), R(7), R(26),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(23), U8(4),
B(LdaZero),
B(Mov), R(2), R(21),
B(Mov), R(7), R(22),
B(SuspendGenerator), R(21), U8(2),
B(Ldar), R(22),
B(Mov), R(2), R(22),
B(Mov), R(7), R(23),
B(SuspendGenerator), R(22), R(0), U8(23), U8(2),
B(Ldar), R(23),
/* 68 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(23),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(24),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(23),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(23),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(18),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(19),
B(LdaZero),
B(Star), R(17),
B(Star), R(18),
B(Jump), U8(104),
B(Ldar), R(22),
B(Ldar), R(23),
/* 40 E> */ B(ReThrow),
B(Mov), R(22), R(5),
B(Mov), R(23), R(5),
/* 40 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
......@@ -474,58 +483,108 @@ bytecodes: [
/* 23 E> */ B(StackCheck),
B(Mov), R(3), R(0),
/* 56 S> */ B(LdaSmi), I8(1),
B(Star), R(17),
B(Mov), R(0), R(18),
B(Star), R(18),
B(Mov), R(0), R(19),
B(Jump), U8(54),
B(Jump), U8(40),
B(Star), R(21),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(10), U8(11),
B(Star), R(20),
B(CreateCatchContext), R(22), U8(10), U8(11),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(Ldar), R(21),
B(PushContext), R(22),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(20),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kReThrow), R(22), U8(1),
B(PopContext), R(21),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kReThrow), R(23), U8(1),
B(PopContext), R(22),
B(LdaSmi), I8(-1),
B(Star), R(17),
B(Jump), U8(8),
B(Star), R(18),
B(Jump), U8(8),
B(Star), R(19),
B(LdaSmi), I8(2),
B(Star), R(17),
B(Star), R(18),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(19),
B(Star), R(20),
B(LdaZero),
B(TestEqualStrict), R(6), U8(21),
B(JumpIfTrueConstant), U8(15),
B(JumpIfTrueConstant), U8(16),
B(LdaNamedProperty), R(4), U8(12), U8(22),
B(Star), R(9),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(248),
B(JumpConstant), U8(15),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(25),
B(JumpIfFalse), U8(139),
B(JumpIfFalse), U8(145),
B(Ldar), R(9),
B(TestTypeOf), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(20),
B(LdaConstant), U8(13),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kNewTypeError), R(20), U8(2),
B(LdaConstant), U8(13),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kNewTypeError), R(21), U8(2),
B(Throw),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
B(LdaUndefined),
B(Star), R(23),
B(Mov), R(9), R(25),
B(Mov), R(4), R(26),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(25), U8(2),
B(Star), R(25),
B(Mov), R(2), R(24),
B(Mov), R(7), R(26),
B(CallJSRuntime), U8(%async_function_await_caught), R(23), U8(4),
B(LdaSmi), I8(1),
B(Mov), R(2), R(22),
B(Mov), R(7), R(23),
B(SuspendGenerator), R(22), R(0), U8(23), U8(2),
B(Ldar), R(23),
/* 68 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(23),
B(LdaSmi), I8(-2),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(24),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(15),
B(LdaZero),
B(Star), R(14),
B(Jump), U8(246),
B(Ldar), R(23),
B(ReThrow),
B(Ldar), R(23),
B(Jump), U8(20),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(22), U8(10), U8(14),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(21),
B(PushContext), R(22),
B(PopContext), R(22),
B(Jump), U8(110),
B(LdaUndefined),
B(Star), R(22),
B(Mov), R(9), R(24),
......@@ -534,15 +593,16 @@ bytecodes: [
B(Star), R(24),
B(Mov), R(2), R(23),
B(Mov), R(7), R(25),
B(CallJSRuntime), U8(%async_function_await_caught), R(22), U8(4),
B(LdaSmi), I8(1),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(4),
B(LdaSmi), I8(2),
B(Mov), R(2), R(21),
B(Mov), R(7), R(22),
B(SuspendGenerator), R(21), U8(2),
B(SuspendGenerator), R(21), R(0), U8(22), U8(2),
B(Ldar), R(22),
/* 68 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(22),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
......@@ -557,153 +617,104 @@ bytecodes: [
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
B(Jump), U8(240),
B(Ldar), R(22),
B(ReThrow),
B(Ldar), R(22),
B(Jump), U8(20),
B(Star), R(21),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(10), U8(14),
B(Star), R(20),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(PopContext), R(21),
B(Jump), U8(104),
B(LdaUndefined),
B(Star), R(21),
B(Mov), R(9), R(23),
B(Mov), R(4), R(24),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(23), U8(2),
B(Star), R(23),
B(Mov), R(2), R(22),
B(Mov), R(7), R(24),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(21), U8(4),
B(LdaSmi), I8(2),
B(Mov), R(2), R(20),
B(Mov), R(7), R(21),
B(SuspendGenerator), R(20), U8(2),
B(Ldar), R(21),
/* 68 S> */ B(Return),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(20), U8(1),
B(Star), R(21),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(20), U8(1),
B(Star), R(22),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(24),
B(Mov), R(21), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(23), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
B(Jump), U8(130),
B(Ldar), R(21),
B(Ldar), R(22),
B(ReThrow),
B(Mov), R(21), R(10),
B(Mov), R(22), R(10),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(10), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
B(Ldar), R(19),
B(Ldar), R(20),
B(SetPendingMessage),
B(Ldar), R(17),
B(SwitchOnSmiNoFeedback), U8(16), U8(3), I8(0),
B(Ldar), R(18),
B(SwitchOnSmiNoFeedback), U8(17), U8(3), I8(0),
B(Jump), U8(22),
B(LdaZero),
B(Star), R(13),
B(Mov), R(18), R(14),
B(Star), R(14),
B(Mov), R(19), R(15),
B(Jump), U8(92),
B(LdaSmi), I8(1),
B(Star), R(13),
B(Mov), R(18), R(14),
B(Star), R(14),
B(Mov), R(19), R(15),
B(Jump), U8(83),
B(Ldar), R(18),
B(Ldar), R(19),
B(ReThrow),
B(LdaUndefined),
B(Star), R(17),
B(Star), R(18),
B(LdaUndefined),
B(Star), R(19),
B(Mov), R(7), R(18),
B(CallJSRuntime), U8(%promise_resolve), R(17), U8(3),
B(Star), R(20),
B(Mov), R(7), R(19),
B(CallJSRuntime), U8(%promise_resolve), R(18), U8(3),
B(LdaZero),
B(Star), R(13),
B(Mov), R(7), R(14),
B(Star), R(14),
B(Mov), R(7), R(15),
B(Jump), U8(59),
B(Jump), U8(45),
B(Star), R(17),
B(Star), R(18),
B(Ldar), R(closure),
B(CreateCatchContext), R(17), U8(10), U8(19),
B(Star), R(16),
B(CreateCatchContext), R(18), U8(10), U8(20),
B(Star), R(17),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(16),
B(PushContext), R(17),
B(Ldar), R(17),
B(PushContext), R(18),
B(LdaUndefined),
B(Star), R(18),
B(Star), R(19),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(20),
B(LdaFalse),
B(Star), R(21),
B(Mov), R(7), R(19),
B(CallJSRuntime), U8(%promise_internal_reject), R(18), U8(4),
B(PopContext), R(17),
B(LdaFalse),
B(Star), R(22),
B(Mov), R(7), R(20),
B(CallJSRuntime), U8(%promise_internal_reject), R(19), U8(4),
B(PopContext), R(18),
B(LdaZero),
B(Star), R(13),
B(Mov), R(7), R(14),
B(Star), R(14),
B(Mov), R(7), R(15),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(13),
B(Jump), U8(8),
B(Star), R(14),
B(Jump), U8(8),
B(Star), R(15),
B(LdaSmi), I8(2),
B(Star), R(13),
B(Star), R(14),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(15),
B(LdaUndefined),
B(Star), R(16),
B(Mov), R(7), R(17),
B(CallJSRuntime), U8(%async_function_promise_release), R(16), U8(2),
B(Ldar), R(15),
B(LdaUndefined),
B(Star), R(17),
B(Mov), R(7), R(18),
B(CallJSRuntime), U8(%async_function_promise_release), R(17), U8(2),
B(Ldar), R(16),
B(SetPendingMessage),
B(Ldar), R(13),
B(SwitchOnSmiNoFeedback), U8(20), U8(3), I8(0),
B(Jump), U8(24),
B(Ldar), R(14),
B(SwitchOnSmiNoFeedback), U8(21), U8(3), I8(0),
B(Jump), U8(24),
B(Ldar), R(15),
/* 68 S> */ B(Return),
B(LdaUndefined),
B(Star), R(16),
B(Mov), R(7), R(17),
B(Mov), R(14), R(18),
B(CallJSRuntime), U8(%promise_resolve), R(16), U8(3),
B(Star), R(17),
B(Mov), R(7), R(18),
B(Mov), R(15), R(19),
B(CallJSRuntime), U8(%promise_resolve), R(17), U8(3),
B(Ldar), R(7),
/* 68 S> */ B(Return),
B(Ldar), R(14),
B(Ldar), R(15),
B(ReThrow),
B(LdaUndefined),
/* 68 S> */ B(Return),
]
constant pool: [
Smi [99],
Smi [398],
Smi [508],
Smi [102],
Smi [409],
Smi [525],
TUPLE2_TYPE,
SYMBOL_TYPE,
SYMBOL_TYPE,
Smi [57],
Smi [59],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -712,7 +723,8 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [259],
Smi [260],
Smi [271],
Smi [6],
Smi [14],
Smi [23],
......@@ -722,11 +734,11 @@ constant pool: [
Smi [25],
]
handlers: [
[56, 682, 688],
[59, 637, 639],
[65, 306, 312],
[68, 266, 268],
[373, 461, 463],
[62, 706, 712],
[65, 661, 663],
[71, 318, 324],
[74, 278, 280],
[385, 479, 481],
]
---
......@@ -739,98 +751,101 @@ snippet: "
}
f();
"
frame size: 26
frame size: 27
parameter count: 1
bytecode array length: 733
bytecode array length: 757
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(12),
B(ResumeGenerator), R(new_target),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(11), U8(1),
B(PushContext), R(13),
B(RestoreGeneratorState), R(11),
B(Star), R(12),
B(SwitchOnSmiNoFeedback), U8(0), U8(3), I8(0),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Mov), R(closure), R(13),
B(Mov), R(this), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(13), U8(2),
B(Star), R(12),
B(Mov), R(closure), R(14),
B(Mov), R(this), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Star), R(2),
/* 16 E> */ B(StackCheck),
B(LdaUndefined),
B(Star), R(13),
B(CallJSRuntime), U8(%async_function_promise_create), R(13), U8(1),
B(Star), R(14),
B(CallJSRuntime), U8(%async_function_promise_create), R(14), U8(1),
B(Star), R(7),
B(Mov), R(context), R(15),
B(Mov), R(context), R(16),
B(Mov), R(2), R(11),
B(Mov), R(context), R(17),
B(LdaZero),
B(Star), R(6),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
/* 43 S> */ B(CreateArrayLiteral), U8(3), U8(3), U8(17),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(4), U8(8),
B(Star), R(22),
B(LdaNamedProperty), R(22), U8(4), U8(8),
B(JumpIfUndefined), U8(17),
B(JumpIfNull), U8(15),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(10),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(10),
B(JumpIfJSReceiver), U8(23),
B(CallRuntime), U16(Runtime::kThrowSymbolAsyncIteratorInvalid), R(0), U8(0),
B(LdaNamedProperty), R(21), U8(5), U8(4),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(6),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(22), U8(1),
B(LdaNamedProperty), R(22), U8(5), U8(4),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(6),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateAsyncFromSyncIterator), R(23), U8(1),
B(Star), R(4),
B(Ldar), R(11),
B(Ldar), R(12),
B(SwitchOnSmiNoFeedback), U8(6), U8(1), I8(0),
B(LdaSmi), I8(-2),
/* 43 E> */ B(TestEqualStrictNoFeedback), R(11),
/* 43 E> */ B(TestEqualStrictNoFeedback), R(12),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 40 S> */ B(LdaUndefined),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kAbort), R(22), U8(1),
/* 40 S> */ B(LdaUndefined),
B(Star), R(23),
/* 40 E> */ B(LdaNamedProperty), R(4), U8(7), U8(14),
B(Star), R(24),
B(CallProperty0), R(24), R(4), U8(12),
B(Star), R(24),
B(Mov), R(2), R(23),
B(Mov), R(7), R(25),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(4),
B(Star), R(25),
B(CallProperty0), R(25), R(4), U8(12),
B(Star), R(25),
B(Mov), R(2), R(24),
B(Mov), R(7), R(26),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(23), U8(4),
B(LdaZero),
B(Mov), R(2), R(21),
B(Mov), R(7), R(22),
B(SuspendGenerator), R(21), U8(2),
B(Ldar), R(22),
B(Mov), R(2), R(22),
B(Mov), R(7), R(23),
B(SuspendGenerator), R(22), R(0), U8(23), U8(2),
B(Ldar), R(23),
/* 114 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(23),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(24),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(23),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(23),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(18),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(19),
B(LdaZero),
B(Star), R(17),
B(Star), R(18),
B(Jump), U8(119),
B(Ldar), R(22),
B(Ldar), R(23),
/* 40 E> */ B(ReThrow),
B(Mov), R(22), R(5),
B(Mov), R(23), R(5),
/* 40 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
......@@ -854,56 +869,106 @@ bytecodes: [
/* 103 S> */ B(Jump), U8(8),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(165), I8(0),
B(JumpLoop), U8(171), I8(0),
B(Jump), U8(40),
B(Star), R(21),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(10), U8(11),
B(Star), R(20),
B(CreateCatchContext), R(22), U8(10), U8(11),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(Ldar), R(21),
B(PushContext), R(22),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(22),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kReThrow), R(22), U8(1),
B(PopContext), R(21),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kReThrow), R(23), U8(1),
B(PopContext), R(22),
B(LdaSmi), I8(-1),
B(Star), R(17),
B(Jump), U8(8),
B(Star), R(18),
B(Jump), U8(8),
B(Star), R(19),
B(LdaSmi), I8(1),
B(Star), R(17),
B(Star), R(18),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(19),
B(Star), R(20),
B(LdaZero),
B(TestEqualStrict), R(6), U8(23),
B(JumpIfTrueConstant), U8(15),
B(JumpIfTrueConstant), U8(16),
B(LdaNamedProperty), R(4), U8(12), U8(24),
B(Star), R(9),
B(TestUndetectable),
B(JumpIfFalse), U8(4),
B(Jump), U8(248),
B(JumpConstant), U8(15),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(6), U8(27),
B(JumpIfFalse), U8(139),
B(JumpIfFalse), U8(145),
B(Ldar), R(9),
B(TestTypeOf), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(20),
B(LdaConstant), U8(13),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kNewTypeError), R(20), U8(2),
B(LdaConstant), U8(13),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kNewTypeError), R(21), U8(2),
B(Throw),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
B(LdaUndefined),
B(Star), R(23),
B(Mov), R(9), R(25),
B(Mov), R(4), R(26),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(25), U8(2),
B(Star), R(25),
B(Mov), R(2), R(24),
B(Mov), R(7), R(26),
B(CallJSRuntime), U8(%async_function_await_caught), R(23), U8(4),
B(LdaSmi), I8(1),
B(Mov), R(2), R(22),
B(Mov), R(7), R(23),
B(SuspendGenerator), R(22), R(0), U8(23), U8(2),
B(Ldar), R(23),
/* 114 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(23),
B(LdaSmi), I8(-2),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(24),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(24),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(15),
B(LdaZero),
B(Star), R(14),
B(Jump), U8(237),
B(Ldar), R(23),
B(ReThrow),
B(Ldar), R(23),
B(Jump), U8(20),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(22), U8(10), U8(14),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(21),
B(PushContext), R(22),
B(PopContext), R(22),
B(Jump), U8(110),
B(LdaUndefined),
B(Star), R(22),
B(Mov), R(9), R(24),
......@@ -912,15 +977,16 @@ bytecodes: [
B(Star), R(24),
B(Mov), R(2), R(23),
B(Mov), R(7), R(25),
B(CallJSRuntime), U8(%async_function_await_caught), R(22), U8(4),
B(LdaSmi), I8(1),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(22), U8(4),
B(LdaSmi), I8(2),
B(Mov), R(2), R(21),
B(Mov), R(7), R(22),
B(SuspendGenerator), R(21), U8(2),
B(SuspendGenerator), R(21), R(0), U8(22), U8(2),
B(Ldar), R(22),
/* 114 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(22),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
......@@ -935,142 +1001,93 @@ bytecodes: [
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
B(Jump), U8(231),
B(Ldar), R(22),
B(ReThrow),
B(Ldar), R(22),
B(Jump), U8(20),
B(Star), R(21),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(10), U8(14),
B(Star), R(20),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(PopContext), R(21),
B(Jump), U8(104),
B(LdaUndefined),
B(Star), R(21),
B(Mov), R(9), R(23),
B(Mov), R(4), R(24),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(23), U8(2),
B(Star), R(23),
B(Mov), R(2), R(22),
B(Mov), R(7), R(24),
B(CallJSRuntime), U8(%async_function_await_uncaught), R(21), U8(4),
B(LdaSmi), I8(2),
B(Mov), R(2), R(20),
B(Mov), R(7), R(21),
B(SuspendGenerator), R(20), U8(2),
B(Ldar), R(21),
/* 114 S> */ B(Return),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(20), U8(1),
B(Star), R(21),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(20), U8(1),
B(Star), R(22),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(24),
B(Mov), R(21), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(23), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(13),
B(Jump), U8(121),
B(Ldar), R(21),
B(Ldar), R(22),
B(ReThrow),
B(Mov), R(21), R(10),
B(Mov), R(22), R(10),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(10), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
B(Ldar), R(19),
B(Ldar), R(20),
B(SetPendingMessage),
B(Ldar), R(17),
B(SwitchOnSmiNoFeedback), U8(16), U8(2), I8(0),
B(Ldar), R(18),
B(SwitchOnSmiNoFeedback), U8(17), U8(2), I8(0),
B(Jump), U8(13),
B(LdaZero),
B(Star), R(13),
B(Mov), R(18), R(14),
B(Star), R(14),
B(Mov), R(19), R(15),
B(Jump), U8(83),
B(Ldar), R(18),
B(Ldar), R(19),
B(ReThrow),
B(LdaUndefined),
B(Star), R(17),
B(Star), R(18),
B(LdaUndefined),
B(Star), R(19),
B(Mov), R(7), R(18),
B(CallJSRuntime), U8(%promise_resolve), R(17), U8(3),
B(Star), R(20),
B(Mov), R(7), R(19),
B(CallJSRuntime), U8(%promise_resolve), R(18), U8(3),
B(LdaZero),
B(Star), R(13),
B(Mov), R(7), R(14),
B(Star), R(14),
B(Mov), R(7), R(15),
B(Jump), U8(59),
B(Jump), U8(45),
B(Star), R(17),
B(Star), R(18),
B(Ldar), R(closure),
B(CreateCatchContext), R(17), U8(10), U8(18),
B(Star), R(16),
B(CreateCatchContext), R(18), U8(10), U8(19),
B(Star), R(17),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(16),
B(PushContext), R(17),
B(Ldar), R(17),
B(PushContext), R(18),
B(LdaUndefined),
B(Star), R(18),
B(Star), R(19),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(20),
B(LdaFalse),
B(Star), R(21),
B(Mov), R(7), R(19),
B(CallJSRuntime), U8(%promise_internal_reject), R(18), U8(4),
B(PopContext), R(17),
B(LdaFalse),
B(Star), R(22),
B(Mov), R(7), R(20),
B(CallJSRuntime), U8(%promise_internal_reject), R(19), U8(4),
B(PopContext), R(18),
B(LdaZero),
B(Star), R(13),
B(Mov), R(7), R(14),
B(Star), R(14),
B(Mov), R(7), R(15),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(13),
B(Jump), U8(8),
B(Star), R(14),
B(Jump), U8(8),
B(Star), R(15),
B(LdaSmi), I8(1),
B(Star), R(13),
B(Star), R(14),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(15),
B(LdaUndefined),
B(Star), R(16),
B(Mov), R(7), R(17),
B(CallJSRuntime), U8(%async_function_promise_release), R(16), U8(2),
B(Ldar), R(15),
B(LdaUndefined),
B(Star), R(17),
B(Mov), R(7), R(18),
B(CallJSRuntime), U8(%async_function_promise_release), R(17), U8(2),
B(Ldar), R(16),
B(SetPendingMessage),
B(Ldar), R(13),
B(SwitchOnSmiNoFeedback), U8(19), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(14),
B(SwitchOnSmiNoFeedback), U8(20), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(15),
/* 114 S> */ B(Return),
B(Ldar), R(14),
B(Ldar), R(15),
B(ReThrow),
B(LdaUndefined),
/* 114 S> */ B(Return),
]
constant pool: [
Smi [99],
Smi [413],
Smi [523],
Smi [102],
Smi [424],
Smi [540],
TUPLE2_TYPE,
SYMBOL_TYPE,
SYMBOL_TYPE,
Smi [57],
Smi [59],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -1079,7 +1096,8 @@ constant pool: [
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE [""],
FIXED_ARRAY_TYPE,
Smi [259],
Smi [260],
Smi [271],
Smi [6],
Smi [14],
FIXED_ARRAY_TYPE,
......@@ -1087,11 +1105,11 @@ constant pool: [
Smi [9],
]
handlers: [
[56, 688, 694],
[59, 643, 645],
[65, 321, 327],
[68, 281, 283],
[388, 476, 478],
[62, 712, 718],
[65, 667, 669],
[71, 333, 339],
[74, 293, 295],
[400, 494, 496],
]
---
......
......@@ -641,75 +641,78 @@ snippet: "
}
f([1, 2, 3]);
"
frame size: 23
frame size: 24
parameter count: 2
bytecode array length: 435
bytecode array length: 446
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(12),
B(ResumeGenerator), R(new_target),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(11), U8(1),
B(PushContext), R(13),
B(RestoreGeneratorState), R(11),
B(Star), R(12),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Star), R(12),
B(CreateFunctionContext), U8(1),
B(PushContext), R(13),
B(PushContext), R(14),
B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(4),
B(Mov), R(closure), R(14),
B(Mov), R(this), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Mov), R(closure), R(15),
B(Mov), R(this), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(15), U8(2),
B(Star), R(3),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(16),
B(Star), R(11),
B(Mov), R(context), R(17),
B(LdaZero),
B(Mov), R(3), R(19),
B(Mov), R(3), R(18),
B(Mov), R(3), R(17),
/* 11 E> */ B(SuspendGenerator), R(17), U8(0),
B(Ldar), R(18),
/* 11 E> */ B(SuspendGenerator), R(18), R(0), U8(19), U8(0),
B(Ldar), R(19),
/* 55 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(19),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(17), U8(1),
B(Star), R(18),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(17), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(18), U8(1),
B(Star), R(19),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(18), U8(1),
B(Star), R(20),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(19),
B(TestEqualStrictNoFeedback), R(20),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(19),
B(TestEqualStrictNoFeedback), R(20),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(21),
B(Mov), R(18), R(20),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(20), U8(2),
B(Star), R(15),
B(Star), R(22),
B(Mov), R(19), R(21),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(21), U8(2),
B(Star), R(16),
B(LdaZero),
B(Star), R(14),
B(Star), R(15),
B(JumpConstant), U8(10),
B(Ldar), R(18),
B(Ldar), R(19),
/* 11 E> */ B(Throw),
B(LdaZero),
B(Star), R(7),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
/* 35 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(21),
B(LdaNamedProperty), R(21), U8(1), U8(3),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(5),
B(LdaNamedProperty), R(22), U8(1), U8(3),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(5),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(5),
/* 30 S> */ B(LdaNamedProperty), R(5), U8(2), U8(9),
B(Star), R(21),
B(CallProperty0), R(21), R(5), U8(7),
B(Star), R(22),
B(CallProperty0), R(22), R(5), U8(7),
B(Star), R(6),
/* 30 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(6), U8(1),
B(ToBooleanLogicalNot),
......@@ -729,29 +732,29 @@ bytecodes: [
B(Star), R(7),
B(JumpLoop), U8(53), I8(0),
B(Jump), U8(36),
B(Star), R(21),
B(Star), R(22),
B(Ldar), R(closure),
/* 50 E> */ B(CreateCatchContext), R(21), U8(5), U8(6),
B(PushContext), R(21),
B(Star), R(20),
/* 50 E> */ B(CreateCatchContext), R(22), U8(5), U8(6),
B(PushContext), R(22),
B(Star), R(21),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(7), U8(15),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(7),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kReThrow), R(22), U8(1),
B(PopContext), R(21),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kReThrow), R(23), U8(1),
B(PopContext), R(22),
B(LdaSmi), I8(-1),
B(Star), R(17),
B(Jump), U8(7),
B(Star), R(18),
B(Jump), U8(7),
B(Star), R(19),
B(LdaZero),
B(Star), R(17),
B(Star), R(18),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(19),
B(Star), R(20),
B(LdaZero),
B(TestEqualStrict), R(7), U8(16),
B(JumpIfTrue), U8(104),
......@@ -768,76 +771,76 @@ bytecodes: [
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(20),
B(LdaConstant), U8(8),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kNewTypeError), R(20), U8(2),
B(LdaConstant), U8(8),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kNewTypeError), R(21), U8(2),
B(Throw),
B(Mov), R(context), R(20),
B(Mov), R(9), R(21),
B(Mov), R(5), R(22),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(21), U8(2),
B(Mov), R(context), R(21),
B(Mov), R(9), R(22),
B(Mov), R(5), R(23),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(22), U8(2),
B(Jump), U8(20),
B(Star), R(21),
B(Star), R(22),
B(Ldar), R(closure),
B(CreateCatchContext), R(21), U8(5), U8(9),
B(Star), R(20),
B(CreateCatchContext), R(22), U8(5), U8(9),
B(Star), R(21),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(20),
B(PushContext), R(21),
B(PopContext), R(21),
B(Ldar), R(21),
B(PushContext), R(22),
B(PopContext), R(22),
B(Jump), U8(27),
B(Mov), R(9), R(20),
B(Mov), R(5), R(21),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(20), U8(2),
B(Mov), R(9), R(21),
B(Mov), R(5), R(22),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(21), U8(2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(10), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
B(Ldar), R(19),
B(Ldar), R(20),
B(SetPendingMessage),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(TestEqualStrictNoFeedback), R(18),
B(JumpIfFalse), U8(11),
B(LdaSmi), I8(1),
B(Star), R(14),
B(Mov), R(18), R(15),
B(Star), R(15),
B(Mov), R(19), R(16),
B(Jump), U8(31),
B(LdaUndefined),
B(Star), R(17),
B(LdaTrue),
B(Star), R(18),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(17), U8(2),
B(Star), R(15),
B(LdaTrue),
B(Star), R(19),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(18), U8(2),
B(Star), R(16),
B(LdaZero),
B(Star), R(14),
B(Star), R(15),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(14),
B(Jump), U8(8),
B(Star), R(15),
B(Jump), U8(8),
B(Star), R(16),
B(LdaSmi), I8(1),
B(Star), R(14),
B(Star), R(15),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(16),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(3), U8(1),
B(Ldar), R(16),
B(Ldar), R(17),
B(SetPendingMessage),
B(Ldar), R(14),
B(Ldar), R(15),
B(SwitchOnSmiNoFeedback), U8(11), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(15),
B(Ldar), R(16),
/* 55 S> */ B(Return),
B(Ldar), R(15),
B(Ldar), R(16),
B(ReThrow),
B(LdaUndefined),
/* 55 S> */ B(Return),
]
constant pool: [
Smi [54],
Smi [58],
SYMBOL_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
......@@ -852,10 +855,10 @@ constant pool: [
Smi [9],
]
handlers: [
[55, 396, 402],
[121, 239, 245],
[124, 203, 205],
[305, 315, 317],
[60, 407, 413],
[132, 250, 256],
[135, 214, 216],
[316, 326, 328],
]
---
......@@ -865,90 +868,93 @@ snippet: "
}
f([1, 2, 3]);
"
frame size: 25
frame size: 26
parameter count: 2
bytecode array length: 535
bytecode array length: 552
bytecodes: [
B(Mov), R(new_target), R(10),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(11),
B(ResumeGenerator), R(new_target),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(10), U8(1),
B(PushContext), R(12),
B(RestoreGeneratorState), R(10),
B(Star), R(11),
B(SwitchOnSmiNoFeedback), U8(0), U8(2), I8(0),
B(LdaSmi), I8(79),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(Star), R(11),
B(CreateFunctionContext), U8(1),
B(PushContext), R(12),
B(PushContext), R(13),
B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(4),
B(Mov), R(closure), R(13),
B(Mov), R(this), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(13), U8(2),
B(Mov), R(closure), R(14),
B(Mov), R(this), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Star), R(2),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(15),
B(Star), R(10),
B(Mov), R(context), R(16),
B(LdaZero),
B(Mov), R(2), R(18),
B(Mov), R(2), R(17),
B(Mov), R(2), R(16),
/* 11 E> */ B(SuspendGenerator), R(16), U8(0),
B(Ldar), R(17),
/* 11 E> */ B(SuspendGenerator), R(17), R(0), U8(18), U8(0),
B(Ldar), R(18),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(18),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(16), U8(1),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(16), U8(1),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(17), U8(1),
B(Star), R(18),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(17), U8(1),
B(Star), R(19),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(18),
B(TestEqualStrictNoFeedback), R(19),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(18),
B(TestEqualStrictNoFeedback), R(19),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(20),
B(Mov), R(17), R(19),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(19), U8(2),
B(Star), R(14),
B(Star), R(21),
B(Mov), R(18), R(20),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(20), U8(2),
B(Star), R(15),
B(LdaZero),
B(Star), R(13),
B(Star), R(14),
B(JumpConstant), U8(14),
B(Ldar), R(17),
B(Ldar), R(18),
/* 11 E> */ B(Throw),
B(LdaZero),
B(Star), R(6),
B(Mov), R(context), R(18),
B(Mov), R(context), R(19),
B(Mov), R(context), R(20),
/* 35 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(20),
B(LdaNamedProperty), R(20), U8(2), U8(3),
B(Star), R(21),
B(CallProperty0), R(21), R(20), U8(5),
B(LdaNamedProperty), R(21), U8(2), U8(3),
B(Star), R(22),
B(CallProperty0), R(22), R(21), U8(5),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
B(Ldar), R(10),
B(Ldar), R(11),
B(SwitchOnSmiNoFeedback), U8(3), U8(1), I8(1),
B(LdaSmi), I8(-2),
/* 35 E> */ B(TestEqualStrictNoFeedback), R(10),
/* 35 E> */ B(TestEqualStrictNoFeedback), R(11),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kAbort), R(20), U8(1),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kAbort), R(21), U8(1),
/* 30 S> */ B(LdaNamedProperty), R(4), U8(4), U8(9),
B(Star), R(20),
B(CallProperty0), R(20), R(4), U8(7),
B(Star), R(21),
B(CallProperty0), R(21), R(4), U8(7),
B(Star), R(5),
/* 30 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(5), U8(11),
B(JumpIfToBooleanTrue), U8(95),
B(JumpIfToBooleanTrue), U8(101),
B(LdaNamedProperty), R(5), U8(6), U8(13),
B(Star), R(7),
B(LdaSmi), I8(2),
......@@ -957,64 +963,65 @@ bytecodes: [
/* 21 E> */ B(StackCheck),
B(Mov), R(3), R(0),
/* 40 S> */ B(LdaFalse),
B(Star), R(23),
B(Mov), R(3), R(22),
/* 46 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(22), U8(2),
B(Star), R(22),
B(Mov), R(3), R(21),
/* 46 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(21), U8(2),
B(Star), R(21),
B(LdaSmi), I8(1),
B(Mov), R(2), R(20),
B(SuspendGenerator), R(20), U8(0),
B(Ldar), R(21),
B(Mov), R(2), R(21),
B(SuspendGenerator), R(21), R(0), U8(22), U8(0),
B(Ldar), R(22),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(22),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(20), U8(1),
B(Star), R(21),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(20), U8(1),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(21), U8(1),
B(Star), R(22),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(21), U8(1),
B(Star), R(23),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(22),
B(TestEqualStrictNoFeedback), R(23),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(22),
B(TestEqualStrictNoFeedback), R(23),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(24),
B(Mov), R(21), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(23), U8(2),
B(Star), R(17),
B(Star), R(25),
B(Mov), R(22), R(24),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(24), U8(2),
B(Star), R(18),
B(LdaZero),
B(Star), R(16),
B(Star), R(17),
B(Jump), U8(59),
B(Ldar), R(21),
B(Ldar), R(22),
/* 40 E> */ B(Throw),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(141), I8(0),
B(JumpLoop), U8(147), I8(0),
B(Jump), U8(36),
B(Star), R(20),
B(Star), R(21),
B(Ldar), R(closure),
B(CreateCatchContext), R(20), U8(7), U8(8),
B(PushContext), R(20),
B(Star), R(19),
B(CreateCatchContext), R(21), U8(7), U8(8),
B(PushContext), R(21),
B(Star), R(20),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(15),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kReThrow), R(21), U8(1),
B(PopContext), R(20),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kReThrow), R(22), U8(1),
B(PopContext), R(21),
B(LdaSmi), I8(-1),
B(Star), R(16),
B(Jump), U8(8),
B(Star), R(17),
B(Jump), U8(8),
B(Star), R(18),
B(LdaSmi), I8(1),
B(Star), R(16),
B(Star), R(17),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(18),
B(Star), R(19),
B(LdaZero),
B(TestEqualStrict), R(6), U8(16),
B(JumpIfTrue), U8(104),
......@@ -1031,83 +1038,83 @@ bytecodes: [
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(19),
B(LdaConstant), U8(10),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kNewTypeError), R(19), U8(2),
B(LdaConstant), U8(10),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kNewTypeError), R(20), U8(2),
B(Throw),
B(Mov), R(context), R(19),
B(Mov), R(8), R(20),
B(Mov), R(4), R(21),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(20), U8(2),
B(Mov), R(context), R(20),
B(Mov), R(8), R(21),
B(Mov), R(4), R(22),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(21), U8(2),
B(Jump), U8(20),
B(Star), R(20),
B(Star), R(21),
B(Ldar), R(closure),
B(CreateCatchContext), R(20), U8(7), U8(11),
B(Star), R(19),
B(CreateCatchContext), R(21), U8(7), U8(11),
B(Star), R(20),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(19),
B(PushContext), R(20),
B(PopContext), R(20),
B(Ldar), R(20),
B(PushContext), R(21),
B(PopContext), R(21),
B(Jump), U8(27),
B(Mov), R(8), R(19),
B(Mov), R(4), R(20),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(19), U8(2),
B(Mov), R(8), R(20),
B(Mov), R(4), R(21),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(20), U8(2),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(9), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
B(Ldar), R(18),
B(Ldar), R(19),
B(SetPendingMessage),
B(Ldar), R(16),
B(Ldar), R(17),
B(SwitchOnSmiNoFeedback), U8(12), U8(2), I8(0),
B(Jump), U8(19),
B(LdaZero),
B(Star), R(13),
B(Mov), R(17), R(14),
B(Star), R(14),
B(Mov), R(18), R(15),
B(Jump), U8(40),
B(LdaSmi), I8(1),
B(Star), R(13),
B(Mov), R(17), R(14),
B(Star), R(14),
B(Mov), R(18), R(15),
B(Jump), U8(31),
B(LdaUndefined),
B(Star), R(16),
B(LdaTrue),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(Star), R(14),
B(LdaTrue),
B(Star), R(18),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(17), U8(2),
B(Star), R(15),
B(LdaZero),
B(Star), R(13),
B(Star), R(14),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(13),
B(Jump), U8(8),
B(Star), R(14),
B(Jump), U8(8),
B(Star), R(15),
B(LdaSmi), I8(1),
B(Star), R(13),
B(Star), R(14),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(15),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(2), U8(1),
B(Ldar), R(15),
B(Ldar), R(16),
B(SetPendingMessage),
B(Ldar), R(13),
B(Ldar), R(14),
B(SwitchOnSmiNoFeedback), U8(15), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(14),
B(Ldar), R(15),
/* 49 S> */ B(Return),
B(Ldar), R(14),
B(Ldar), R(15),
B(ReThrow),
B(LdaUndefined),
/* 49 S> */ B(Return),
]
constant pool: [
Smi [54],
Smi [133],
Smi [58],
Smi [141],
SYMBOL_TYPE,
Smi [89],
Smi [91],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -1118,15 +1125,15 @@ constant pool: [
FIXED_ARRAY_TYPE,
Smi [6],
Smi [14],
Smi [398],
Smi [404],
Smi [6],
Smi [9],
]
handlers: [
[55, 496, 502],
[121, 327, 333],
[124, 291, 293],
[394, 404, 406],
[60, 513, 519],
[132, 344, 350],
[135, 308, 310],
[411, 421, 423],
]
---
......@@ -1348,67 +1355,69 @@ snippet: "
}
f([1, 2, 3]);
"
frame size: 27
frame size: 28
parameter count: 2
bytecode array length: 546
bytecode array length: 558
bytecodes: [
B(Mov), R(new_target), R(11),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(12),
B(ResumeGenerator), R(new_target),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(11), U8(1),
B(PushContext), R(13),
B(RestoreGeneratorState), R(11),
B(Star), R(12),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(Star), R(12),
B(CreateFunctionContext), U8(1),
B(PushContext), R(13),
B(PushContext), R(14),
B(Ldar), R(arg0),
B(StaCurrentContextSlot), U8(4),
B(Mov), R(closure), R(14),
B(Mov), R(this), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(14), U8(2),
B(Mov), R(closure), R(15),
B(Mov), R(this), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(15), U8(2),
B(Star), R(2),
/* 16 E> */ B(StackCheck),
B(LdaUndefined),
B(Star), R(14),
B(CallJSRuntime), U8(%async_function_promise_create), R(14), U8(1),
B(Star), R(15),
B(CallJSRuntime), U8(%async_function_promise_create), R(15), U8(1),
B(Star), R(3),
B(Mov), R(context), R(16),
B(Mov), R(context), R(17),
B(Mov), R(2), R(11),
B(Mov), R(context), R(18),
B(LdaZero),
B(Star), R(7),
B(Mov), R(context), R(20),
B(Mov), R(context), R(21),
B(Mov), R(context), R(22),
/* 40 S> */ B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(22),
B(LdaNamedProperty), R(22), U8(1), U8(3),
B(Star), R(23),
B(CallProperty0), R(23), R(22), U8(5),
B(LdaNamedProperty), R(23), U8(1), U8(3),
B(Star), R(24),
B(CallProperty0), R(24), R(23), U8(5),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(5),
B(Ldar), R(11),
B(Ldar), R(12),
B(SwitchOnSmiNoFeedback), U8(2), U8(1), I8(0),
B(LdaSmi), I8(-2),
/* 40 E> */ B(TestEqualStrictNoFeedback), R(11),
/* 40 E> */ B(TestEqualStrictNoFeedback), R(12),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kAbort), R(22), U8(1),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kAbort), R(23), U8(1),
/* 35 S> */ B(LdaNamedProperty), R(5), U8(3), U8(9),
B(Star), R(22),
B(CallProperty0), R(22), R(5), U8(7),
B(Star), R(23),
B(CallProperty0), R(23), R(5), U8(7),
B(Star), R(6),
/* 35 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(6), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(6), U8(1),
B(LdaNamedProperty), R(6), U8(4), U8(11),
B(JumpIfToBooleanTrue), U8(101),
B(JumpIfToBooleanTrue), U8(107),
B(LdaNamedProperty), R(6), U8(5), U8(13),
B(Star), R(8),
B(LdaSmi), I8(2),
......@@ -1417,69 +1426,70 @@ bytecodes: [
/* 26 E> */ B(StackCheck),
B(Mov), R(4), R(0),
/* 45 S> */ B(LdaUndefined),
B(Star), R(23),
B(Mov), R(2), R(24),
B(Mov), R(4), R(25),
B(Mov), R(3), R(26),
/* 51 E> */ B(CallJSRuntime), U8(%async_function_await_uncaught), R(23), U8(4),
B(Star), R(24),
B(Mov), R(2), R(25),
B(Mov), R(4), R(26),
B(Mov), R(3), R(27),
/* 51 E> */ B(CallJSRuntime), U8(%async_function_await_uncaught), R(24), U8(4),
B(LdaZero),
B(Mov), R(2), R(22),
B(Mov), R(3), R(23),
B(SuspendGenerator), R(22), U8(2),
B(Ldar), R(23),
B(Mov), R(2), R(23),
B(Mov), R(3), R(24),
B(SuspendGenerator), R(23), R(0), U8(24), U8(2),
B(Ldar), R(24),
/* 54 S> */ B(Return),
B(RestoreGeneratorRegisters), R(11), R(0), U8(24),
B(LdaSmi), I8(-2),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(22), U8(1),
B(Star), R(23),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(22), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(23), U8(1),
B(Star), R(24),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(23), U8(1),
B(Star), R(25),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(24),
B(TestEqualStrictNoFeedback), R(25),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(24),
B(TestEqualStrictNoFeedback), R(25),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(26),
B(Mov), R(23), R(25),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(25), U8(2),
B(Star), R(19),
B(Star), R(27),
B(Mov), R(24), R(26),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(26), U8(2),
B(Star), R(20),
B(LdaZero),
B(Star), R(18),
B(Star), R(19),
B(Jump), U8(63),
B(Ldar), R(23),
B(Ldar), R(24),
/* 45 E> */ B(ReThrow),
B(LdaZero),
B(Star), R(7),
B(JumpLoop), U8(147), I8(0),
B(JumpLoop), U8(153), I8(0),
B(Jump), U8(40),
B(Star), R(22),
B(Star), R(23),
B(Ldar), R(closure),
B(CreateCatchContext), R(22), U8(6), U8(7),
B(Star), R(21),
B(CreateCatchContext), R(23), U8(6), U8(7),
B(Star), R(22),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(21),
B(PushContext), R(22),
B(Ldar), R(22),
B(PushContext), R(23),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(7), U8(15),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(7),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kReThrow), R(23), U8(1),
B(PopContext), R(22),
B(Star), R(24),
B(CallRuntime), U16(Runtime::kReThrow), R(24), U8(1),
B(PopContext), R(23),
B(LdaSmi), I8(-1),
B(Star), R(18),
B(Jump), U8(8),
B(Star), R(19),
B(Jump), U8(8),
B(Star), R(20),
B(LdaSmi), I8(1),
B(Star), R(18),
B(Star), R(19),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(20),
B(Star), R(21),
B(LdaZero),
B(TestEqualStrict), R(7), U8(16),
B(JumpIfTrue), U8(104),
......@@ -1496,106 +1506,106 @@ bytecodes: [
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(21),
B(LdaConstant), U8(9),
B(Star), R(22),
B(CallRuntime), U16(Runtime::kNewTypeError), R(21), U8(2),
B(LdaConstant), U8(9),
B(Star), R(23),
B(CallRuntime), U16(Runtime::kNewTypeError), R(22), U8(2),
B(Throw),
B(Mov), R(context), R(21),
B(Mov), R(9), R(22),
B(Mov), R(5), R(23),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(22), U8(2),
B(Mov), R(context), R(22),
B(Mov), R(9), R(23),
B(Mov), R(5), R(24),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(23), U8(2),
B(Jump), U8(20),
B(Star), R(22),
B(Star), R(23),
B(Ldar), R(closure),
B(CreateCatchContext), R(22), U8(6), U8(10),
B(Star), R(21),
B(CreateCatchContext), R(23), U8(6), U8(10),
B(Star), R(22),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(21),
B(PushContext), R(22),
B(PopContext), R(22),
B(Ldar), R(22),
B(PushContext), R(23),
B(PopContext), R(23),
B(Jump), U8(27),
B(Mov), R(9), R(21),
B(Mov), R(5), R(22),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(21), U8(2),
B(Mov), R(9), R(22),
B(Mov), R(5), R(23),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(22), U8(2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(10), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(10), U8(1),
B(Ldar), R(20),
B(Ldar), R(21),
B(SetPendingMessage),
B(Ldar), R(18),
B(Ldar), R(19),
B(SwitchOnSmiNoFeedback), U8(11), U8(2), I8(0),
B(Jump), U8(13),
B(LdaZero),
B(Star), R(14),
B(Mov), R(19), R(15),
B(Star), R(15),
B(Mov), R(20), R(16),
B(Jump), U8(83),
B(Ldar), R(19),
B(Ldar), R(20),
B(ReThrow),
B(LdaUndefined),
B(Star), R(18),
B(Star), R(19),
B(LdaUndefined),
B(Star), R(20),
B(Mov), R(3), R(19),
B(CallJSRuntime), U8(%promise_resolve), R(18), U8(3),
B(Star), R(21),
B(Mov), R(3), R(20),
B(CallJSRuntime), U8(%promise_resolve), R(19), U8(3),
B(LdaZero),
B(Star), R(14),
B(Mov), R(3), R(15),
B(Star), R(15),
B(Mov), R(3), R(16),
B(Jump), U8(59),
B(Jump), U8(45),
B(Star), R(18),
B(Star), R(19),
B(Ldar), R(closure),
B(CreateCatchContext), R(18), U8(6), U8(13),
B(Star), R(17),
B(CreateCatchContext), R(19), U8(6), U8(13),
B(Star), R(18),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(17),
B(PushContext), R(18),
B(Ldar), R(18),
B(PushContext), R(19),
B(LdaUndefined),
B(Star), R(19),
B(Star), R(20),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(21),
B(LdaFalse),
B(Star), R(22),
B(Mov), R(3), R(20),
B(CallJSRuntime), U8(%promise_internal_reject), R(19), U8(4),
B(PopContext), R(18),
B(LdaFalse),
B(Star), R(23),
B(Mov), R(3), R(21),
B(CallJSRuntime), U8(%promise_internal_reject), R(20), U8(4),
B(PopContext), R(19),
B(LdaZero),
B(Star), R(14),
B(Mov), R(3), R(15),
B(Star), R(15),
B(Mov), R(3), R(16),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(14),
B(Jump), U8(8),
B(Star), R(15),
B(Jump), U8(8),
B(Star), R(16),
B(LdaSmi), I8(1),
B(Star), R(14),
B(Star), R(15),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(16),
B(LdaUndefined),
B(Star), R(17),
B(Mov), R(3), R(18),
B(CallJSRuntime), U8(%async_function_promise_release), R(17), U8(2),
B(Ldar), R(16),
B(LdaUndefined),
B(Star), R(18),
B(Mov), R(3), R(19),
B(CallJSRuntime), U8(%async_function_promise_release), R(18), U8(2),
B(Ldar), R(17),
B(SetPendingMessage),
B(Ldar), R(14),
B(Ldar), R(15),
B(SwitchOnSmiNoFeedback), U8(14), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(15),
B(Ldar), R(16),
/* 54 S> */ B(Return),
B(Ldar), R(15),
B(Ldar), R(16),
B(ReThrow),
B(LdaUndefined),
/* 54 S> */ B(Return),
]
constant pool: [
Smi [85],
Smi [88],
SYMBOL_TYPE,
Smi [95],
Smi [97],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -1611,10 +1621,10 @@ constant pool: [
Smi [9],
]
handlers: [
[64, 501, 507],
[67, 456, 458],
[73, 289, 295],
[76, 249, 251],
[356, 366, 368],
[70, 513, 519],
[73, 468, 470],
[79, 301, 307],
[82, 261, 263],
[368, 378, 380],
]
......@@ -11,94 +11,97 @@ snippet: "
function* f() { }
f();
"
frame size: 11
frame size: 12
parameter count: 1
bytecode array length: 163
bytecode array length: 174
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(1), U8(1),
B(PushContext), R(3),
B(RestoreGeneratorState), R(1),
B(Star), R(2),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(1),
B(Mov), R(closure), R(3),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(2),
B(Mov), R(closure), R(4),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(Star), R(0),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(5),
B(Star), R(1),
B(Mov), R(context), R(6),
B(LdaZero),
B(Mov), R(0), R(8),
B(Mov), R(0), R(7),
B(Mov), R(0), R(6),
/* 11 E> */ B(SuspendGenerator), R(6), U8(0),
B(Ldar), R(7),
/* 11 E> */ B(SuspendGenerator), R(7), R(0), U8(8), U8(0),
B(Ldar), R(8),
/* 16 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
B(LdaSmi), I8(-2),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(6), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(6), U8(1),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(7), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(7), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(8),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(10),
B(Mov), R(7), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(9), U8(2),
B(Star), R(4),
B(Star), R(11),
B(Mov), R(8), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(10), U8(2),
B(Star), R(5),
B(LdaZero),
B(Star), R(3),
B(Star), R(4),
B(Jump), U8(34),
B(Ldar), R(7),
B(Ldar), R(8),
/* 11 E> */ B(Throw),
B(LdaUndefined),
B(Star), R(6),
B(LdaTrue),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(4),
B(LdaTrue),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(5),
B(LdaZero),
B(Star), R(3),
B(Star), R(4),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(3),
B(Jump), U8(8),
B(Star), R(4),
B(Jump), U8(8),
B(Star), R(5),
B(LdaSmi), I8(1),
B(Star), R(3),
B(Star), R(4),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(5),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
B(Ldar), R(5),
B(Ldar), R(6),
B(SetPendingMessage),
B(Ldar), R(3),
B(Ldar), R(4),
B(SwitchOnSmiNoFeedback), U8(1), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(4),
B(Ldar), R(5),
/* 16 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
B(ReThrow),
B(LdaUndefined),
/* 16 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [50],
Smi [6],
Smi [9],
]
handlers: [
[47, 124, 130],
[52, 135, 141],
]
---
......@@ -106,128 +109,132 @@ snippet: "
function* f() { yield 42 }
f();
"
frame size: 11
frame size: 12
parameter count: 1
bytecode array length: 234
bytecode array length: 251
bytecodes: [
B(Mov), R(new_target), R(1),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(2),
B(ResumeGenerator), R(new_target),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(1), U8(1),
B(PushContext), R(3),
B(RestoreGeneratorState), R(1),
B(Star), R(2),
B(SwitchOnSmiNoFeedback), U8(0), U8(2), I8(0),
B(LdaSmi), I8(79),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kAbort), R(4), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(1),
B(Mov), R(closure), R(3),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(2),
B(Mov), R(closure), R(4),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(Star), R(0),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(5),
B(Star), R(1),
B(Mov), R(context), R(6),
B(LdaZero),
B(Mov), R(0), R(8),
B(Mov), R(0), R(7),
B(Mov), R(0), R(6),
/* 11 E> */ B(SuspendGenerator), R(6), U8(0),
B(Ldar), R(7),
/* 11 E> */ B(SuspendGenerator), R(7), R(0), U8(8), U8(0),
B(Ldar), R(8),
/* 25 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
B(LdaSmi), I8(-2),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(6), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(6), U8(1),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(7), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(7), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(8),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(10),
B(Mov), R(7), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(9), U8(2),
B(Star), R(4),
B(Star), R(11),
B(Mov), R(8), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(10), U8(2),
B(Star), R(5),
B(LdaZero),
B(Star), R(3),
B(Jump), U8(105),
B(Ldar), R(7),
B(Star), R(4),
B(Jump), U8(111),
B(Ldar), R(8),
/* 11 E> */ B(Throw),
/* 16 S> */ B(LdaSmi), I8(42),
B(Star), R(7),
B(Star), R(8),
B(LdaFalse),
B(Star), R(9),
/* 16 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(8), U8(2),
B(Star), R(8),
/* 16 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(7),
B(LdaSmi), I8(1),
B(Mov), R(0), R(6),
B(SuspendGenerator), R(6), U8(0),
B(Ldar), R(7),
B(Mov), R(0), R(7),
B(SuspendGenerator), R(7), R(0), U8(8), U8(0),
B(Ldar), R(8),
/* 25 S> */ B(Return),
B(RestoreGeneratorRegisters), R(1), R(0), U8(8),
B(LdaSmi), I8(-2),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(6), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(6), U8(1),
B(Star), R(2),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(7), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(7), U8(1),
B(Star), R(9),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(8),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(8),
B(TestEqualStrictNoFeedback), R(9),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(10),
B(Mov), R(7), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(9), U8(2),
B(Star), R(4),
B(Star), R(11),
B(Mov), R(8), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(10), U8(2),
B(Star), R(5),
B(LdaZero),
B(Star), R(3),
B(Star), R(4),
B(Jump), U8(34),
B(Ldar), R(7),
B(Ldar), R(8),
/* 16 E> */ B(Throw),
B(LdaUndefined),
B(Star), R(6),
B(LdaTrue),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(4),
B(LdaTrue),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
B(Star), R(5),
B(LdaZero),
B(Star), R(3),
B(Star), R(4),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(3),
B(Jump), U8(8),
B(Star), R(4),
B(Jump), U8(8),
B(Star), R(5),
B(LdaSmi), I8(1),
B(Star), R(3),
B(Star), R(4),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(5),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
B(Ldar), R(5),
B(Ldar), R(6),
B(SetPendingMessage),
B(Ldar), R(3),
B(Ldar), R(4),
B(SwitchOnSmiNoFeedback), U8(2), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(4),
B(Ldar), R(5),
/* 25 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
B(ReThrow),
B(LdaUndefined),
/* 25 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [117],
Smi [50],
Smi [127],
Smi [6],
Smi [9],
]
handlers: [
[47, 195, 201],
[52, 212, 218],
]
---
......@@ -235,86 +242,89 @@ snippet: "
function* f() { for (let x of [42]) yield x }
f();
"
frame size: 24
frame size: 25
parameter count: 1
bytecode array length: 529
bytecode array length: 546
bytecodes: [
B(Mov), R(new_target), R(10),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(11),
B(ResumeGenerator), R(new_target),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(10), U8(1),
B(PushContext), R(12),
B(RestoreGeneratorState), R(10),
B(Star), R(11),
B(SwitchOnSmiNoFeedback), U8(0), U8(2), I8(0),
B(LdaSmi), I8(79),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(Mov), R(closure), R(12),
B(Mov), R(this), R(13),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(12), U8(2),
B(Star), R(11),
B(Mov), R(closure), R(13),
B(Mov), R(this), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(13), U8(2),
B(Star), R(2),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(14),
B(Star), R(10),
B(Mov), R(context), R(15),
B(LdaZero),
B(Mov), R(2), R(17),
B(Mov), R(2), R(16),
B(Mov), R(2), R(15),
/* 11 E> */ B(SuspendGenerator), R(15), U8(0),
B(Ldar), R(16),
/* 11 E> */ B(SuspendGenerator), R(16), R(0), U8(17), U8(0),
B(Ldar), R(17),
/* 44 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(17),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(15), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(15), U8(1),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(16), U8(1),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(16), U8(1),
B(Star), R(18),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(17),
B(TestEqualStrictNoFeedback), R(18),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(17),
B(TestEqualStrictNoFeedback), R(18),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(19),
B(Mov), R(16), R(18),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(18), U8(2),
B(Star), R(13),
B(Star), R(20),
B(Mov), R(17), R(19),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(19), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(12),
B(Star), R(13),
B(JumpConstant), U8(15),
B(Ldar), R(16),
B(Ldar), R(17),
/* 11 E> */ B(Throw),
B(LdaZero),
B(Star), R(6),
B(Mov), R(context), R(17),
B(Mov), R(context), R(18),
B(Mov), R(context), R(19),
/* 30 S> */ B(CreateArrayLiteral), U8(2), U8(3), U8(17),
B(Star), R(19),
B(LdaNamedProperty), R(19), U8(3), U8(4),
B(Star), R(20),
B(CallProperty0), R(20), R(19), U8(6),
B(LdaNamedProperty), R(20), U8(3), U8(4),
B(Star), R(21),
B(CallProperty0), R(21), R(20), U8(6),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
B(Ldar), R(10),
B(Ldar), R(11),
B(SwitchOnSmiNoFeedback), U8(4), U8(1), I8(1),
B(LdaSmi), I8(-2),
/* 30 E> */ B(TestEqualStrictNoFeedback), R(10),
/* 30 E> */ B(TestEqualStrictNoFeedback), R(11),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(19),
B(CallRuntime), U16(Runtime::kAbort), R(19), U8(1),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kAbort), R(20), U8(1),
/* 25 S> */ B(LdaNamedProperty), R(4), U8(5), U8(10),
B(Star), R(19),
B(CallProperty0), R(19), R(4), U8(8),
B(Star), R(20),
B(CallProperty0), R(20), R(4), U8(8),
B(Star), R(5),
/* 25 E> */ B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(5), U8(1),
B(ToBooleanLogicalNot),
B(JumpIfFalse), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(5), U8(1),
B(LdaNamedProperty), R(5), U8(6), U8(12),
B(JumpIfToBooleanTrue), U8(95),
B(JumpIfToBooleanTrue), U8(101),
B(LdaNamedProperty), R(5), U8(7), U8(14),
B(Star), R(7),
B(LdaSmi), I8(2),
......@@ -323,64 +333,65 @@ bytecodes: [
/* 16 E> */ B(StackCheck),
B(Mov), R(3), R(0),
/* 36 S> */ B(LdaFalse),
B(Star), R(22),
B(Mov), R(3), R(21),
/* 42 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(21), U8(2),
B(Star), R(21),
B(Mov), R(3), R(20),
/* 42 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(20), U8(2),
B(Star), R(20),
B(LdaSmi), I8(1),
B(Mov), R(2), R(19),
B(SuspendGenerator), R(19), U8(0),
B(Ldar), R(20),
B(Mov), R(2), R(20),
B(SuspendGenerator), R(20), R(0), U8(21), U8(0),
B(Ldar), R(21),
/* 44 S> */ B(Return),
B(RestoreGeneratorRegisters), R(10), R(0), U8(21),
B(LdaSmi), I8(-2),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(19), U8(1),
B(Star), R(20),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(19), U8(1),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(20), U8(1),
B(Star), R(21),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(20), U8(1),
B(Star), R(22),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(21),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(21),
B(TestEqualStrictNoFeedback), R(22),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(23),
B(Mov), R(20), R(22),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(22), U8(2),
B(Star), R(16),
B(Star), R(24),
B(Mov), R(21), R(23),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(23), U8(2),
B(Star), R(17),
B(LdaZero),
B(Star), R(15),
B(Star), R(16),
B(Jump), U8(59),
B(Ldar), R(20),
B(Ldar), R(21),
/* 36 E> */ B(Throw),
B(LdaZero),
B(Star), R(6),
B(JumpLoop), U8(141), I8(0),
B(JumpLoop), U8(147), I8(0),
B(Jump), U8(36),
B(Star), R(19),
B(Star), R(20),
B(Ldar), R(closure),
B(CreateCatchContext), R(19), U8(8), U8(9),
B(PushContext), R(19),
B(Star), R(18),
B(CreateCatchContext), R(20), U8(8), U8(9),
B(PushContext), R(20),
B(Star), R(19),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(6), U8(16),
B(JumpIfFalse), U8(6),
B(LdaSmi), I8(1),
B(Star), R(6),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kReThrow), R(20), U8(1),
B(PopContext), R(19),
B(Star), R(21),
B(CallRuntime), U16(Runtime::kReThrow), R(21), U8(1),
B(PopContext), R(20),
B(LdaSmi), I8(-1),
B(Star), R(15),
B(Jump), U8(8),
B(Star), R(16),
B(Jump), U8(8),
B(Star), R(17),
B(LdaSmi), I8(1),
B(Star), R(15),
B(Star), R(16),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(17),
B(Star), R(18),
B(LdaZero),
B(TestEqualStrict), R(6), U8(17),
B(JumpIfTrue), U8(104),
......@@ -397,84 +408,84 @@ bytecodes: [
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(18),
B(LdaConstant), U8(11),
B(Star), R(19),
B(CallRuntime), U16(Runtime::kNewTypeError), R(18), U8(2),
B(LdaConstant), U8(11),
B(Star), R(20),
B(CallRuntime), U16(Runtime::kNewTypeError), R(19), U8(2),
B(Throw),
B(Mov), R(context), R(18),
B(Mov), R(8), R(19),
B(Mov), R(4), R(20),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(19), U8(2),
B(Mov), R(context), R(19),
B(Mov), R(8), R(20),
B(Mov), R(4), R(21),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(20), U8(2),
B(Jump), U8(20),
B(Star), R(19),
B(Star), R(20),
B(Ldar), R(closure),
B(CreateCatchContext), R(19), U8(8), U8(12),
B(Star), R(18),
B(CreateCatchContext), R(20), U8(8), U8(12),
B(Star), R(19),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(18),
B(PushContext), R(19),
B(PopContext), R(19),
B(Ldar), R(19),
B(PushContext), R(20),
B(PopContext), R(20),
B(Jump), U8(27),
B(Mov), R(8), R(18),
B(Mov), R(4), R(19),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(18), U8(2),
B(Mov), R(8), R(19),
B(Mov), R(4), R(20),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(19), U8(2),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(9), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(9), U8(1),
B(Ldar), R(17),
B(Ldar), R(18),
B(SetPendingMessage),
B(Ldar), R(15),
B(Ldar), R(16),
B(SwitchOnSmiNoFeedback), U8(13), U8(2), I8(0),
B(Jump), U8(19),
B(LdaZero),
B(Star), R(12),
B(Mov), R(16), R(13),
B(Star), R(13),
B(Mov), R(17), R(14),
B(Jump), U8(40),
B(LdaSmi), I8(1),
B(Star), R(12),
B(Mov), R(16), R(13),
B(Star), R(13),
B(Mov), R(17), R(14),
B(Jump), U8(31),
B(LdaUndefined),
B(Star), R(15),
B(LdaTrue),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(13),
B(LdaTrue),
B(Star), R(17),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(Star), R(14),
B(LdaZero),
B(Star), R(12),
B(Star), R(13),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(12),
B(Jump), U8(8),
B(Star), R(13),
B(Jump), U8(8),
B(Star), R(14),
B(LdaSmi), I8(1),
B(Star), R(12),
B(Star), R(13),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(14),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(2), U8(1),
B(Ldar), R(14),
B(Ldar), R(15),
B(SetPendingMessage),
B(Ldar), R(12),
B(Ldar), R(13),
B(SwitchOnSmiNoFeedback), U8(16), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(13),
B(Ldar), R(14),
/* 44 S> */ B(Return),
B(Ldar), R(13),
B(Ldar), R(14),
B(ReThrow),
B(LdaUndefined),
/* 44 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [127],
Smi [50],
Smi [135],
TUPLE2_TYPE,
SYMBOL_TYPE,
Smi [89],
Smi [91],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
......@@ -485,15 +496,15 @@ constant pool: [
FIXED_ARRAY_TYPE,
Smi [6],
Smi [14],
Smi [400],
Smi [406],
Smi [6],
Smi [9],
]
handlers: [
[47, 490, 496],
[113, 321, 327],
[116, 285, 287],
[388, 398, 400],
[52, 507, 513],
[124, 338, 344],
[127, 302, 304],
[405, 415, 417],
]
---
......@@ -502,55 +513,58 @@ snippet: "
function* f() { yield* g() }
f();
"
frame size: 19
frame size: 20
parameter count: 1
bytecode array length: 573
bytecode array length: 590
bytecodes: [
B(Mov), R(new_target), R(9),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(10),
B(ResumeGenerator), R(new_target),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(9), U8(1),
B(PushContext), R(11),
B(RestoreGeneratorState), R(9),
B(Star), R(10),
B(SwitchOnSmiNoFeedback), U8(0), U8(2), I8(0),
B(LdaSmi), I8(79),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kAbort), R(11), U8(1),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(9),
B(Mov), R(closure), R(11),
B(Mov), R(this), R(12),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(11), U8(2),
B(Star), R(10),
B(Mov), R(closure), R(12),
B(Mov), R(this), R(13),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(12), U8(2),
B(Star), R(0),
/* 38 E> */ B(StackCheck),
B(Mov), R(context), R(13),
B(Star), R(9),
B(Mov), R(context), R(14),
B(LdaZero),
B(Mov), R(0), R(16),
B(Mov), R(0), R(15),
B(Mov), R(0), R(14),
/* 38 E> */ B(SuspendGenerator), R(14), U8(0),
B(Ldar), R(15),
/* 38 E> */ B(SuspendGenerator), R(15), R(0), U8(16), U8(0),
B(Ldar), R(16),
/* 54 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(14), U8(1),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(14), U8(1),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(15), U8(1),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(15), U8(1),
B(Star), R(17),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(16),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(16),
B(TestEqualStrictNoFeedback), R(17),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(18),
B(Mov), R(15), R(17),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(17), U8(2),
B(Star), R(12),
B(Star), R(19),
B(Mov), R(16), R(18),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(18), U8(2),
B(Star), R(13),
B(LdaZero),
B(Star), R(11),
B(Star), R(12),
B(JumpConstant), U8(13),
B(Ldar), R(15),
B(Ldar), R(16),
/* 38 E> */ B(Throw),
/* 43 S> */ B(LdaUndefined),
B(Star), R(1),
......@@ -559,38 +573,38 @@ bytecodes: [
B(LdaUndefined),
B(Star), R(3),
B(LdaGlobal), U8(2), U8(5),
B(Star), R(16),
/* 50 E> */ B(CallUndefinedReceiver0), R(16), U8(3),
B(Star), R(14),
B(LdaNamedProperty), R(14), U8(3), U8(7),
B(Star), R(17),
/* 50 E> */ B(CallUndefinedReceiver0), R(17), U8(3),
B(Star), R(15),
B(CallProperty0), R(15), R(14), U8(9),
B(LdaNamedProperty), R(15), U8(3), U8(7),
B(Star), R(16),
B(CallProperty0), R(16), R(15), U8(9),
B(JumpIfJSReceiver), U8(7),
B(CallRuntime), U16(Runtime::kThrowSymbolIteratorInvalid), R(0), U8(0),
B(Star), R(4),
B(Ldar), R(9),
B(Ldar), R(10),
B(SwitchOnSmiNoFeedback), U8(4), U8(1), I8(1),
B(LdaSmi), I8(-2),
B(TestEqualStrictNoFeedback), R(9),
B(TestEqualStrictNoFeedback), R(10),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(Star), R(15),
B(CallRuntime), U16(Runtime::kAbort), R(15), U8(1),
B(StackCheck),
B(LdaZero),
B(TestEqualStrict), R(2), U8(15),
B(Mov), R(2), R(14),
B(Mov), R(2), R(15),
B(JumpIfTrue), U8(18),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(14), U8(19),
B(TestEqualStrict), R(15), U8(19),
B(JumpIfTrue), U8(39),
B(LdaSmi), I8(2),
B(TestEqualStrict), R(14), U8(28),
B(TestEqualStrict), R(15), U8(28),
B(JumpIfTrue), U8(88),
B(Jump), U8(246),
B(LdaNamedProperty), R(4), U8(5), U8(13),
B(Star), R(15),
B(CallProperty1), R(15), R(4), R(1), U8(11),
B(Star), R(16),
B(CallProperty1), R(16), R(4), R(1), U8(11),
B(Star), R(3),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(JumpIfToBooleanFalse), U8(4),
......@@ -602,17 +616,17 @@ bytecodes: [
B(TestUndetectable),
B(JumpIfFalse), U8(19),
B(LdaTrue),
B(Star), R(16),
B(Mov), R(1), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(12),
B(Star), R(17),
B(Mov), R(1), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(Star), R(13),
B(LdaZero),
B(Star), R(11),
B(Star), R(12),
B(JumpConstant), U8(14),
B(Mov), R(3), R(15),
B(Mov), R(4), R(16),
B(Mov), R(1), R(17),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(15), U8(3),
B(Mov), R(3), R(16),
B(Mov), R(4), R(17),
B(Mov), R(1), R(18),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(3),
B(Star), R(3),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(JumpIfToBooleanFalse), U8(4),
......@@ -629,53 +643,53 @@ bytecodes: [
B(JumpIfFalse), U8(4),
B(Jump), U8(96),
B(LdaZero),
B(Star), R(15),
B(Star), R(16),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(15), U8(26),
B(TestEqualStrict), R(16), U8(26),
B(JumpIfFalse), U8(61),
B(Ldar), R(6),
B(TestTypeOf), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(18),
B(Wide), B(LdaSmi), I16(130),
B(Star), R(15),
B(LdaConstant), U8(8),
B(Star), R(16),
B(CallRuntime), U16(Runtime::kNewTypeError), R(15), U8(2),
B(LdaConstant), U8(8),
B(Star), R(17),
B(CallRuntime), U16(Runtime::kNewTypeError), R(16), U8(2),
B(Throw),
B(Mov), R(context), R(15),
B(Mov), R(6), R(16),
B(Mov), R(4), R(17),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(2),
B(Mov), R(context), R(16),
B(Mov), R(6), R(17),
B(Mov), R(4), R(18),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(17), U8(2),
B(Jump), U8(20),
B(Star), R(16),
B(Star), R(17),
B(Ldar), R(closure),
B(CreateCatchContext), R(16), U8(9), U8(10),
B(Star), R(15),
B(CreateCatchContext), R(17), U8(9), U8(10),
B(Star), R(16),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(15),
B(PushContext), R(16),
B(PopContext), R(16),
B(Ldar), R(16),
B(PushContext), R(17),
B(PopContext), R(17),
B(Jump), U8(27),
B(Mov), R(6), R(15),
B(Mov), R(4), R(16),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(15), U8(2),
B(Mov), R(6), R(16),
B(Mov), R(4), R(17),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(2),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(7), U8(1),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(7),
B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(7), U8(1),
B(Wide), B(LdaSmi), I16(144),
B(Star), R(15),
B(LdaConstant), U8(8),
B(Star), R(16),
B(CallRuntime), U16(Runtime::kNewTypeError), R(15), U8(2),
B(LdaConstant), U8(8),
B(Star), R(17),
B(CallRuntime), U16(Runtime::kNewTypeError), R(16), U8(2),
B(Throw),
B(Mov), R(5), R(15),
B(Mov), R(4), R(16),
B(Mov), R(1), R(17),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(15), U8(3),
B(Mov), R(5), R(16),
B(Mov), R(4), R(17),
B(Mov), R(1), R(18),
B(InvokeIntrinsic), U8(Runtime::k_Call), R(16), U8(3),
B(Star), R(3),
B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(3), U8(1),
B(JumpIfToBooleanFalse), U8(4),
......@@ -684,72 +698,73 @@ bytecodes: [
B(Jump), U8(2),
B(LdaNamedProperty), R(3), U8(11), U8(29),
B(JumpIfToBooleanFalse), U8(4),
B(Jump), U8(42),
B(Jump), U8(48),
B(LdaSmi), I8(1),
B(Mov), R(0), R(14),
B(Mov), R(3), R(15),
B(SuspendGenerator), R(14), U8(1),
B(Ldar), R(15),
B(Mov), R(0), R(15),
B(Mov), R(3), R(16),
B(SuspendGenerator), R(15), R(0), U8(16), U8(1),
B(Ldar), R(16),
/* 54 S> */ B(Return),
B(RestoreGeneratorRegisters), R(9), R(0), U8(16),
B(LdaSmi), I8(-2),
B(Star), R(9),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(14), U8(1),
B(Star), R(10),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(15), U8(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(0), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(0), U8(1),
B(Star), R(2),
B(Wide), B(JumpLoop), U16(334), I16(0),
B(Wide), B(JumpLoop), U16(340), I16(0),
B(LdaSmi), I8(1),
B(TestEqualStrict), R(2), U8(31),
B(JumpIfFalse), U8(22),
B(LdaNamedProperty), R(3), U8(12), U8(32),
B(Star), R(14),
B(LdaTrue),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(14), U8(2),
B(Star), R(12),
B(LdaTrue),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(13),
B(LdaZero),
B(Star), R(11),
B(Star), R(12),
B(Jump), U8(37),
B(LdaNamedProperty), R(3), U8(12), U8(34),
B(Star), R(8),
B(LdaUndefined),
B(Star), R(14),
B(LdaTrue),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(14), U8(2),
B(Star), R(12),
B(LdaTrue),
B(Star), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(13),
B(LdaZero),
B(Star), R(11),
B(Star), R(12),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(11),
B(Jump), U8(8),
B(Star), R(12),
B(Jump), U8(8),
B(Star), R(13),
B(LdaSmi), I8(1),
B(Star), R(11),
B(Star), R(12),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(13),
B(Star), R(14),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
B(Ldar), R(13),
B(Ldar), R(14),
B(SetPendingMessage),
B(Ldar), R(11),
B(Ldar), R(12),
B(SwitchOnSmiNoFeedback), U8(15), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(12),
B(Ldar), R(13),
/* 54 S> */ B(Return),
B(Ldar), R(12),
B(Ldar), R(13),
B(ReThrow),
B(LdaUndefined),
/* 54 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [131],
Smi [50],
Smi [139],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["g"],
SYMBOL_TYPE,
Smi [311],
Smi [313],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["next"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["throw"],
......@@ -758,13 +773,13 @@ constant pool: [
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"],
Smi [444],
Smi [302],
Smi [450],
Smi [308],
Smi [6],
Smi [9],
]
handlers: [
[47, 534, 540],
[333, 343, 345],
[52, 551, 557],
[344, 354, 356],
]
......@@ -11,70 +11,73 @@ top level: yes
snippet: "
import \"bar\";
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 130
bytecode array length: 141
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 13 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 13 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(Ldar), R(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 13 S> */ B(Return),
]
constant pool: [
Smi [59],
Smi [63],
FIXED_ARRAY_TYPE,
]
handlers: [
......@@ -84,70 +87,73 @@ handlers: [
snippet: "
import {foo} from \"bar\";
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 130
bytecode array length: 141
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 24 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 24 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(Ldar), R(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 24 S> */ B(Return),
]
constant pool: [
Smi [59],
Smi [63],
FIXED_ARRAY_TYPE,
]
handlers: [
......@@ -159,71 +165,74 @@ snippet: "
goo(42);
{ let x; { goo(42) } };
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 192
bytecode array length: 203
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 64 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 64 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 32 S> */ B(LdaModuleVariable), I8(-1), U8(0),
B(JumpIfNotHole), U8(11),
B(LdaConstant), U8(2),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(4), U8(1),
B(Star), R(3),
B(LdaSmi), I8(42),
B(Star), R(4),
/* 32 E> */ B(CallUndefinedReceiver1), R(3), R(4), U8(3),
B(Star), R(5),
/* 32 E> */ B(CallUndefinedReceiver1), R(4), R(5), U8(3),
B(Ldar), R(closure),
B(CreateBlockContext), U8(3),
B(PushContext), R(3),
B(PushContext), R(4),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
/* 47 S> */ B(LdaUndefined),
......@@ -231,23 +240,23 @@ bytecodes: [
/* 52 S> */ B(LdaModuleVariable), I8(-1), U8(1),
B(JumpIfNotHole), U8(11),
B(LdaConstant), U8(2),
B(Star), R(6),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(6), U8(1),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kThrowReferenceError), R(5), U8(1),
B(Star), R(4),
B(LdaSmi), I8(42),
B(Star), R(5),
/* 52 E> */ B(CallUndefinedReceiver1), R(4), R(5), U8(5),
B(StaContextSlot), R(3), U8(5), U8(0),
B(PopContext), R(3),
B(Star), R(6),
/* 52 E> */ B(CallUndefinedReceiver1), R(5), R(6), U8(5),
B(StaContextSlot), R(4), U8(5), U8(0),
B(PopContext), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 64 S> */ B(Return),
]
constant pool: [
Smi [59],
Smi [63],
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["goo"],
FIXED_ARRAY_TYPE,
......@@ -261,58 +270,61 @@ snippet: "
foo++;
{ let x; { foo++ } };
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 172
bytecode array length: 183
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 49 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 17 S> */ B(LdaSmi), I8(42),
/* 17 E> */ B(StaModuleVariable), I8(1), U8(0),
......@@ -321,28 +333,28 @@ bytecodes: [
/* 24 E> */ B(StaModuleVariable), I8(1), U8(0),
B(Ldar), R(closure),
B(CreateBlockContext), U8(2),
B(PushContext), R(3),
B(PushContext), R(4),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
/* 34 S> */ B(LdaUndefined),
/* 34 E> */ B(StaCurrentContextSlot), U8(4),
/* 39 S> */ B(LdaModuleVariable), I8(1), U8(1),
B(ToNumber), R(4), U8(4),
B(Ldar), R(4),
B(ToNumber), R(5), U8(4),
B(Ldar), R(5),
B(Inc), U8(4),
/* 42 E> */ B(StaModuleVariable), I8(1), U8(1),
B(Ldar), R(4),
B(StaContextSlot), R(3), U8(5), U8(0),
B(PopContext), R(3),
B(Ldar), R(5),
B(StaContextSlot), R(4), U8(5), U8(0),
B(PopContext), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 49 S> */ B(Return),
]
constant pool: [
Smi [59],
Smi [63],
FIXED_ARRAY_TYPE,
FIXED_ARRAY_TYPE,
]
......@@ -355,60 +367,63 @@ snippet: "
foo++;
{ let x; { foo++ } };
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 176
bytecode array length: 187
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
B(Star), R(0),
B(LdaTheHole),
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 49 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 49 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 17 S> */ B(LdaSmi), I8(42),
/* 17 E> */ B(StaModuleVariable), I8(1), U8(0),
......@@ -417,28 +432,28 @@ bytecodes: [
/* 24 E> */ B(StaModuleVariable), I8(1), U8(0),
B(Ldar), R(closure),
B(CreateBlockContext), U8(2),
B(PushContext), R(3),
B(PushContext), R(4),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
/* 34 S> */ B(LdaUndefined),
/* 34 E> */ B(StaCurrentContextSlot), U8(4),
/* 39 S> */ B(LdaModuleVariable), I8(1), U8(1),
B(ToNumber), R(4), U8(4),
B(Ldar), R(4),
B(ToNumber), R(5), U8(4),
B(Ldar), R(5),
B(Inc), U8(4),
/* 42 E> */ B(StaModuleVariable), I8(1), U8(1),
B(Ldar), R(4),
B(StaContextSlot), R(3), U8(5), U8(0),
B(PopContext), R(3),
B(Ldar), R(5),
B(StaContextSlot), R(4), U8(5), U8(0),
B(PopContext), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 49 S> */ B(Return),
]
constant pool: [
Smi [63],
Smi [67],
FIXED_ARRAY_TYPE,
FIXED_ARRAY_TYPE,
]
......@@ -451,60 +466,63 @@ snippet: "
foo++;
{ let x; { foo++ } };
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 180
bytecode array length: 191
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
B(Star), R(0),
B(LdaTheHole),
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 51 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 51 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 19 S> */ B(LdaSmi), I8(42),
/* 19 E> */ B(StaModuleVariable), I8(1), U8(0),
......@@ -513,28 +531,28 @@ bytecodes: [
/* 26 E> */ B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
B(Ldar), R(closure),
B(CreateBlockContext), U8(2),
B(PushContext), R(3),
B(PushContext), R(4),
B(LdaTheHole),
B(StaCurrentContextSlot), U8(4),
/* 36 S> */ B(LdaUndefined),
/* 36 E> */ B(StaCurrentContextSlot), U8(4),
/* 41 S> */ B(LdaModuleVariable), I8(1), U8(1),
B(ToNumber), R(4), U8(4),
B(Ldar), R(4),
B(ToNumber), R(5), U8(4),
B(Ldar), R(5),
B(Inc), U8(4),
/* 44 E> */ B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0),
B(Ldar), R(4),
B(StaContextSlot), R(3), U8(5), U8(0),
B(PopContext), R(3),
B(Ldar), R(5),
B(StaContextSlot), R(4), U8(5), U8(0),
B(PopContext), R(4),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 51 S> */ B(Return),
]
constant pool: [
Smi [63],
Smi [67],
FIXED_ARRAY_TYPE,
FIXED_ARRAY_TYPE,
]
......@@ -545,74 +563,77 @@ handlers: [
snippet: "
export default (function () {});
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 141
bytecode array length: 152
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
B(Star), R(0),
B(LdaTheHole),
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 32 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 32 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(Ldar), R(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(5),
B(CreateClosure), U8(2), U8(3), U8(0),
B(StaModuleVariable), I8(1), U8(0),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 32 S> */ B(Return),
]
constant pool: [
Smi [63],
Smi [67],
FIXED_ARRAY_TYPE,
SHARED_FUNCTION_INFO_TYPE,
]
......@@ -623,86 +644,89 @@ handlers: [
snippet: "
export default (class {});
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 174
bytecode array length: 185
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
B(Star), R(0),
B(LdaTheHole),
B(StaModuleVariable), I8(1), U8(0),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 26 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 26 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(Ldar), R(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(5),
B(CreateClosure), U8(2), U8(3), U8(0),
B(Star), R(3),
B(LdaTheHole),
B(Star), R(4),
B(LdaTheHole),
B(Star), R(5),
B(LdaSmi), I8(16),
B(Star), R(6),
B(LdaSmi), I8(24),
B(Star), R(7),
B(Mov), R(3), R(5),
B(CallRuntime), U16(Runtime::kDefineClass), R(4), U8(4),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessor), R(3), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(3), U8(1),
B(LdaSmi), I8(24),
B(Star), R(8),
B(Mov), R(4), R(6),
B(CallRuntime), U16(Runtime::kDefineClass), R(5), U8(4),
B(Star), R(5),
B(CallRuntime), U16(Runtime::kInstallClassNameAccessor), R(4), U8(1),
B(CallRuntime), U16(Runtime::kToFastProperties), R(4), U8(1),
B(StaModuleVariable), I8(1), U8(0),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 26 S> */ B(Return),
]
constant pool: [
Smi [63],
Smi [67],
FIXED_ARRAY_TYPE,
SHARED_FUNCTION_INFO_TYPE,
]
......@@ -713,70 +737,73 @@ handlers: [
snippet: "
export {foo as goo} from \"bar\"
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 130
bytecode array length: 141
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 30 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 30 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(Ldar), R(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 30 S> */ B(Return),
]
constant pool: [
Smi [59],
Smi [63],
FIXED_ARRAY_TYPE,
]
handlers: [
......@@ -786,70 +813,73 @@ handlers: [
snippet: "
export * from \"bar\"
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 130
bytecode array length: 141
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(Star), R(0),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 19 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 19 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
B(Ldar), R(4),
B(Ldar), R(5),
B(StaCurrentContextSlot), U8(5),
B(LdaCurrentContextSlot), U8(5),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 19 S> */ B(Return),
]
constant pool: [
Smi [59],
Smi [63],
FIXED_ARRAY_TYPE,
]
handlers: [
......@@ -860,84 +890,87 @@ snippet: "
import * as foo from \"bar\"
foo.f(foo, foo.x);
"
frame size: 8
frame size: 9
parameter count: 2
bytecode array length: 168
bytecode array length: 179
bytecodes: [
B(Mov), R(new_target), R(0),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(1),
B(ResumeGenerator), R(new_target),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(0), U8(1),
B(PushContext), R(2),
B(RestoreGeneratorState), R(0),
B(Star), R(1),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(2),
B(CallRuntime), U16(Runtime::kAbort), R(2), U8(1),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kAbort), R(3), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(Star), R(1),
B(LdaConstant), U8(1),
B(Star), R(4),
B(Mov), R(arg0), R(2),
B(Mov), R(closure), R(3),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(2), U8(3),
B(PushContext), R(2),
B(Mov), R(this), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(3), U8(2),
B(Star), R(5),
B(Mov), R(arg0), R(3),
B(Mov), R(closure), R(4),
B(CallRuntime), U16(Runtime::kPushModuleContext), R(3), U8(3),
B(PushContext), R(3),
B(Mov), R(this), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(4), U8(2),
B(StaCurrentContextSlot), U8(4),
B(Star), R(0),
B(LdaZero),
B(Star), R(3),
B(CallRuntime), U16(Runtime::kGetModuleNamespace), R(3), U8(1),
B(Star), R(4),
B(CallRuntime), U16(Runtime::kGetModuleNamespace), R(4), U8(1),
B(StaCurrentContextSlot), U8(5),
/* 0 E> */ B(StackCheck),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(5),
B(LdaZero),
/* 0 E> */ B(SuspendGenerator), R(3), U8(0),
B(Ldar), R(4),
/* 0 E> */ B(SuspendGenerator), R(4), R(0), U8(5), U8(0),
B(Ldar), R(5),
/* 45 S> */ B(Return),
B(RestoreGeneratorRegisters), R(0), R(0), U8(5),
B(LdaSmi), I8(-2),
B(Star), R(0),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(3), U8(1),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(3), U8(1),
B(Star), R(1),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(4), U8(1),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(4), U8(1),
B(Star), R(6),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(22),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(5),
B(TestEqualStrictNoFeedback), R(6),
B(JumpIfTrue), U8(13),
B(LdaTrue),
B(Star), R(7),
B(Mov), R(4), R(6),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(6), U8(2),
B(Star), R(8),
B(Mov), R(5), R(7),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(7), U8(2),
/* 45 S> */ B(Return),
B(Ldar), R(4),
B(Ldar), R(5),
/* 0 E> */ B(Throw),
/* 27 S> */ B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(4),
/* 30 E> */ B(LdaNamedProperty), R(4), U8(2), U8(5),
B(Star), R(3),
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(5),
/* 30 E> */ B(LdaNamedProperty), R(5), U8(2), U8(5),
B(Star), R(4),
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(6),
/* 41 E> */ B(LdaNamedProperty), R(6), U8(3), U8(7),
B(Star), R(6),
/* 31 E> */ B(CallProperty2), R(3), R(4), R(5), R(6), U8(3),
B(LdaImmutableCurrentContextSlot), U8(5),
B(Star), R(7),
/* 41 E> */ B(LdaNamedProperty), R(7), U8(3), U8(7),
B(Star), R(7),
/* 31 E> */ B(CallProperty2), R(4), R(5), R(6), R(7), U8(3),
B(StaCurrentContextSlot), U8(6),
B(LdaCurrentContextSlot), U8(6),
B(Star), R(3),
B(LdaTrue),
B(Star), R(4),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(3), U8(2),
B(LdaTrue),
B(Star), R(5),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(4), U8(2),
/* 45 S> */ B(Return),
]
constant pool: [
Smi [69],
Smi [73],
FIXED_ARRAY_TYPE,
ONE_BYTE_INTERNALIZED_STRING_TYPE ["f"],
ONE_BYTE_INTERNALIZED_STRING_TYPE ["x"],
......
......@@ -271,55 +271,58 @@ snippet: "
}
f();
"
frame size: 17
frame size: 18
parameter count: 1
bytecode array length: 243
bytecode array length: 254
bytecodes: [
B(Mov), R(new_target), R(7),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(8),
B(ResumeGenerator), R(new_target),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(7), U8(1),
B(PushContext), R(9),
B(RestoreGeneratorState), R(7),
B(Star), R(8),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(9),
B(CallRuntime), U16(Runtime::kAbort), R(9), U8(1),
B(Star), R(10),
B(CallRuntime), U16(Runtime::kAbort), R(10), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(7),
B(Mov), R(closure), R(9),
B(Mov), R(this), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(9), U8(2),
B(Star), R(8),
B(Mov), R(closure), R(10),
B(Mov), R(this), R(11),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(10), U8(2),
B(Star), R(3),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(11),
B(Star), R(7),
B(Mov), R(context), R(12),
B(LdaZero),
B(Mov), R(3), R(14),
B(Mov), R(3), R(13),
B(Mov), R(3), R(12),
/* 11 E> */ B(SuspendGenerator), R(12), U8(0),
B(Ldar), R(13),
/* 11 E> */ B(SuspendGenerator), R(13), R(0), U8(14), U8(0),
B(Ldar), R(14),
/* 62 S> */ B(Return),
B(RestoreGeneratorRegisters), R(7), R(0), U8(14),
B(LdaSmi), I8(-2),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(12), U8(1),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(12), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(13), U8(1),
B(Star), R(14),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(13), U8(1),
B(Star), R(15),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(14),
B(TestEqualStrictNoFeedback), R(15),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(14),
B(TestEqualStrictNoFeedback), R(15),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(16),
B(Mov), R(13), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(10),
B(Star), R(17),
B(Mov), R(14), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(Star), R(11),
B(LdaZero),
B(Star), R(9),
B(Star), R(10),
B(Jump), U8(114),
B(Ldar), R(13),
B(Ldar), R(14),
/* 11 E> */ B(Throw),
/* 31 S> */ B(LdaZero),
B(Star), R(2),
......@@ -360,43 +363,43 @@ bytecodes: [
B(Jump), U8(5),
B(JumpLoop), U8(68), I8(0),
B(LdaUndefined),
B(Star), R(12),
B(LdaTrue),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(12), U8(2),
B(Star), R(10),
B(LdaTrue),
B(Star), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(13), U8(2),
B(Star), R(11),
B(LdaZero),
B(Star), R(9),
B(Star), R(10),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(9),
B(Jump), U8(8),
B(Star), R(10),
B(Jump), U8(8),
B(Star), R(11),
B(LdaSmi), I8(1),
B(Star), R(9),
B(Star), R(10),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(11),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(3), U8(1),
B(Ldar), R(11),
B(Ldar), R(12),
B(SetPendingMessage),
B(Ldar), R(9),
B(Ldar), R(10),
B(SwitchOnSmiNoFeedback), U8(1), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(10),
B(Ldar), R(11),
/* 62 S> */ B(Return),
B(Ldar), R(10),
B(Ldar), R(11),
B(ReThrow),
B(LdaUndefined),
/* 62 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [50],
Smi [6],
Smi [9],
]
handlers: [
[47, 204, 210],
[52, 215, 221],
]
---
......@@ -406,69 +409,72 @@ snippet: "
}
f();
"
frame size: 16
frame size: 17
parameter count: 1
bytecode array length: 352
bytecode array length: 369
bytecodes: [
B(Mov), R(new_target), R(6),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(7),
B(ResumeGenerator), R(new_target),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(6), U8(1),
B(PushContext), R(8),
B(RestoreGeneratorState), R(6),
B(Star), R(7),
B(SwitchOnSmiNoFeedback), U8(0), U8(2), I8(0),
B(LdaSmi), I8(79),
B(Star), R(8),
B(CallRuntime), U16(Runtime::kAbort), R(8), U8(1),
B(Star), R(9),
B(CallRuntime), U16(Runtime::kAbort), R(9), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(6),
B(Mov), R(closure), R(8),
B(Mov), R(this), R(9),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(8), U8(2),
B(Star), R(7),
B(Mov), R(closure), R(9),
B(Mov), R(this), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(9), U8(2),
B(Star), R(2),
/* 11 E> */ B(StackCheck),
B(Mov), R(context), R(10),
B(Star), R(6),
B(Mov), R(context), R(11),
B(LdaZero),
B(Mov), R(2), R(13),
B(Mov), R(2), R(12),
B(Mov), R(2), R(11),
/* 11 E> */ B(SuspendGenerator), R(11), U8(0),
B(Ldar), R(12),
/* 11 E> */ B(SuspendGenerator), R(12), R(0), U8(13), U8(0),
B(Ldar), R(13),
/* 56 S> */ B(Return),
B(RestoreGeneratorRegisters), R(6), R(0), U8(13),
B(LdaSmi), I8(-2),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(11), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(11), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(12), U8(1),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(12), U8(1),
B(Star), R(14),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(13),
B(TestEqualStrictNoFeedback), R(14),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(13),
B(TestEqualStrictNoFeedback), R(14),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(15),
B(Mov), R(12), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(14), U8(2),
B(Star), R(9),
B(Star), R(16),
B(Mov), R(13), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(10),
B(LdaZero),
B(Star), R(8),
B(Jump), U8(223),
B(Ldar), R(12),
B(Star), R(9),
B(Jump), U8(229),
B(Ldar), R(13),
/* 11 E> */ B(Throw),
/* 31 S> */ B(LdaZero),
B(Star), R(1),
B(Star), R(3),
B(LdaSmi), I8(1),
B(Star), R(4),
B(Ldar), R(6),
B(Ldar), R(7),
B(SwitchOnSmiNoFeedback), U8(2), U8(1), I8(1),
B(LdaSmi), I8(-2),
/* 54 E> */ B(TestEqualStrictNoFeedback), R(6),
/* 54 E> */ B(TestEqualStrictNoFeedback), R(7),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kAbort), R(11), U8(1),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
B(StackCheck),
B(Mov), R(3), R(0),
B(LdaSmi), I8(1),
......@@ -486,102 +492,103 @@ bytecodes: [
/* 36 E> */ B(TestLessThan), R(0), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(4),
B(Jump), U8(124),
B(Ldar), R(6),
B(Jump), U8(130),
B(Ldar), R(7),
B(SwitchOnSmiNoFeedback), U8(3), U8(1), I8(1),
B(LdaSmi), I8(-2),
B(TestEqualStrictNoFeedback), R(6),
B(TestEqualStrictNoFeedback), R(7),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(11),
B(CallRuntime), U16(Runtime::kAbort), R(11), U8(1),
B(Star), R(12),
B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1),
B(LdaSmi), I8(1),
B(TestEqual), R(5), U8(6),
B(JumpIfFalse), U8(84),
B(JumpIfFalse), U8(90),
/* 18 E> */ B(StackCheck),
/* 47 S> */ B(LdaFalse),
B(Star), R(14),
B(Mov), R(0), R(13),
/* 53 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(13), U8(2),
B(Star), R(13),
B(Mov), R(0), R(12),
/* 53 E> */ B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(12), U8(2),
B(Star), R(12),
B(LdaSmi), I8(1),
B(Mov), R(2), R(11),
B(SuspendGenerator), R(11), U8(0),
B(Ldar), R(12),
B(Mov), R(2), R(12),
B(SuspendGenerator), R(12), R(0), U8(13), U8(0),
B(Ldar), R(13),
/* 56 S> */ B(Return),
B(RestoreGeneratorRegisters), R(6), R(0), U8(13),
B(LdaSmi), I8(-2),
B(Star), R(6),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(11), U8(1),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(11), U8(1),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(12), U8(1),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(12), U8(1),
B(Star), R(14),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(13),
B(TestEqualStrictNoFeedback), R(14),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(13),
B(TestEqualStrictNoFeedback), R(14),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(15),
B(Mov), R(12), R(14),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(14), U8(2),
B(Star), R(9),
B(Star), R(16),
B(Mov), R(13), R(15),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(15), U8(2),
B(Star), R(10),
B(LdaZero),
B(Star), R(8),
B(Star), R(9),
B(Jump), U8(57),
B(Ldar), R(12),
B(Ldar), R(13),
/* 47 E> */ B(Throw),
B(LdaZero),
B(Star), R(5),
B(Mov), R(0), R(3),
B(Ldar), R(0),
B(JumpLoop), U8(107), I8(1),
B(JumpLoop), U8(113), I8(1),
B(LdaSmi), I8(1),
/* 54 E> */ B(TestEqual), R(5), U8(7),
B(JumpIfFalse), U8(4),
B(Jump), U8(5),
B(JumpLoop), U8(177), I8(0),
B(JumpLoop), U8(183), I8(0),
B(LdaUndefined),
B(Star), R(11),
B(LdaTrue),
B(Star), R(12),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(11), U8(2),
B(Star), R(9),
B(LdaTrue),
B(Star), R(13),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(12), U8(2),
B(Star), R(10),
B(LdaZero),
B(Star), R(8),
B(Star), R(9),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(8),
B(Jump), U8(8),
B(Star), R(9),
B(Jump), U8(8),
B(Star), R(10),
B(LdaSmi), I8(1),
B(Star), R(8),
B(Star), R(9),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(10),
B(Star), R(11),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(2), U8(1),
B(Ldar), R(10),
B(Ldar), R(11),
B(SetPendingMessage),
B(Ldar), R(8),
B(Ldar), R(9),
B(SwitchOnSmiNoFeedback), U8(4), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(9),
B(Ldar), R(10),
/* 56 S> */ B(Return),
B(Ldar), R(9),
B(Ldar), R(10),
B(ReThrow),
B(LdaUndefined),
/* 56 S> */ B(Return),
]
constant pool: [
Smi [46],
Smi [102],
Smi [56],
Smi [50],
Smi [110],
Smi [56],
Smi [52],
Smi [6],
Smi [9],
]
handlers: [
[47, 313, 319],
[52, 330, 336],
]
---
......@@ -715,46 +722,48 @@ snippet: "
}
f();
"
frame size: 18
frame size: 19
parameter count: 1
bytecode array length: 365
bytecode array length: 377
bytecodes: [
B(Mov), R(new_target), R(7),
B(Ldar), R(new_target),
B(JumpIfUndefined), U8(25),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(new_target), U8(1),
B(PushContext), R(8),
B(ResumeGenerator), R(new_target),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetContext), R(7), U8(1),
B(PushContext), R(9),
B(RestoreGeneratorState), R(7),
B(Star), R(8),
B(SwitchOnSmiNoFeedback), U8(0), U8(1), I8(0),
B(LdaSmi), I8(79),
B(Star), R(9),
B(CallRuntime), U16(Runtime::kAbort), R(9), U8(1),
B(Star), R(10),
B(CallRuntime), U16(Runtime::kAbort), R(10), U8(1),
B(LdaSmi), I8(-2),
B(Star), R(7),
B(Mov), R(closure), R(9),
B(Mov), R(this), R(10),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(9), U8(2),
B(Star), R(8),
B(Mov), R(closure), R(10),
B(Mov), R(this), R(11),
B(InvokeIntrinsic), U8(Runtime::k_CreateJSGeneratorObject), R(10), U8(2),
B(Star), R(2),
/* 16 E> */ B(StackCheck),
B(LdaUndefined),
B(Star), R(9),
B(CallJSRuntime), U8(%async_function_promise_create), R(9), U8(1),
B(Star), R(10),
B(CallJSRuntime), U8(%async_function_promise_create), R(10), U8(1),
B(Star), R(3),
B(Mov), R(context), R(11),
B(Mov), R(context), R(12),
B(Mov), R(2), R(7),
B(Mov), R(context), R(13),
/* 36 S> */ B(LdaZero),
B(Star), R(1),
B(Star), R(4),
B(LdaSmi), I8(1),
B(Star), R(5),
B(Ldar), R(7),
B(Ldar), R(8),
B(SwitchOnSmiNoFeedback), U8(1), U8(1), I8(0),
B(LdaSmi), I8(-2),
/* 59 E> */ B(TestEqualStrictNoFeedback), R(7),
/* 59 E> */ B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(StackCheck),
B(Mov), R(4), R(0),
B(LdaSmi), I8(1),
......@@ -772,131 +781,132 @@ bytecodes: [
/* 41 E> */ B(TestLessThan), R(0), U8(5),
B(JumpIfFalse), U8(4),
B(Jump), U8(4),
B(Jump), U8(130),
B(Ldar), R(7),
B(Jump), U8(136),
B(Ldar), R(8),
B(SwitchOnSmiNoFeedback), U8(2), U8(1), I8(0),
B(LdaSmi), I8(-2),
B(TestEqualStrictNoFeedback), R(7),
B(TestEqualStrictNoFeedback), R(8),
B(JumpIfTrue), U8(11),
B(LdaSmi), I8(79),
B(Star), R(13),
B(CallRuntime), U16(Runtime::kAbort), R(13), U8(1),
B(Star), R(14),
B(CallRuntime), U16(Runtime::kAbort), R(14), U8(1),
B(LdaSmi), I8(1),
B(TestEqual), R(6), U8(6),
B(JumpIfFalse), U8(90),
B(JumpIfFalse), U8(96),
/* 23 E> */ B(StackCheck),
/* 52 S> */ B(LdaUndefined),
B(Star), R(14),
B(Mov), R(2), R(15),
B(Mov), R(0), R(16),
B(Mov), R(3), R(17),
/* 58 E> */ B(CallJSRuntime), U8(%async_function_await_uncaught), R(14), U8(4),
B(Star), R(15),
B(Mov), R(2), R(16),
B(Mov), R(0), R(17),
B(Mov), R(3), R(18),
/* 58 E> */ B(CallJSRuntime), U8(%async_function_await_uncaught), R(15), U8(4),
B(LdaZero),
B(Mov), R(2), R(13),
B(Mov), R(3), R(14),
B(SuspendGenerator), R(13), U8(2),
B(Ldar), R(14),
B(Mov), R(2), R(14),
B(Mov), R(3), R(15),
B(SuspendGenerator), R(14), R(0), U8(15), U8(2),
B(Ldar), R(15),
/* 61 S> */ B(Return),
B(RestoreGeneratorRegisters), R(7), R(0), U8(15),
B(LdaSmi), I8(-2),
B(Star), R(7),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(13), U8(1),
B(Star), R(14),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(13), U8(1),
B(Star), R(8),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetInputOrDebugPos), R(14), U8(1),
B(Star), R(15),
B(InvokeIntrinsic), U8(Runtime::k_GeneratorGetResumeMode), R(14), U8(1),
B(Star), R(16),
B(LdaZero),
B(TestEqualStrictNoFeedback), R(15),
B(TestEqualStrictNoFeedback), R(16),
B(JumpIfTrue), U8(28),
B(LdaSmi), I8(2),
B(TestEqualStrictNoFeedback), R(15),
B(TestEqualStrictNoFeedback), R(16),
B(JumpIfTrue), U8(19),
B(LdaTrue),
B(Star), R(17),
B(Mov), R(14), R(16),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(16), U8(2),
B(Star), R(10),
B(Star), R(18),
B(Mov), R(15), R(17),
B(InvokeIntrinsic), U8(Runtime::k_CreateIterResultObject), R(17), U8(2),
B(Star), R(11),
B(LdaZero),
B(Star), R(9),
B(Star), R(10),
B(Jump), U8(106),
B(Ldar), R(14),
B(Ldar), R(15),
/* 52 E> */ B(ReThrow),
B(LdaZero),
B(Star), R(6),
B(Mov), R(0), R(4),
B(Ldar), R(0),
B(JumpLoop), U8(113), I8(1),
B(JumpLoop), U8(119), I8(1),
B(LdaSmi), I8(1),
/* 59 E> */ B(TestEqual), R(6), U8(7),
B(JumpIfFalse), U8(4),
B(Jump), U8(5),
B(JumpLoop), U8(183), I8(0),
B(JumpLoop), U8(189), I8(0),
B(LdaUndefined),
B(Star), R(13),
B(Star), R(14),
B(LdaUndefined),
B(Star), R(15),
B(Mov), R(3), R(14),
B(CallJSRuntime), U8(%promise_resolve), R(13), U8(3),
B(Star), R(16),
B(Mov), R(3), R(15),
B(CallJSRuntime), U8(%promise_resolve), R(14), U8(3),
B(LdaZero),
B(Star), R(9),
B(Mov), R(3), R(10),
B(Star), R(10),
B(Mov), R(3), R(11),
B(Jump), U8(59),
B(Jump), U8(45),
B(Star), R(13),
B(Star), R(14),
B(Ldar), R(closure),
B(CreateCatchContext), R(13), U8(3), U8(4),
B(Star), R(12),
B(CreateCatchContext), R(14), U8(3), U8(4),
B(Star), R(13),
B(LdaTheHole),
B(SetPendingMessage),
B(Ldar), R(12),
B(PushContext), R(13),
B(Ldar), R(13),
B(PushContext), R(14),
B(LdaUndefined),
B(Star), R(14),
B(Star), R(15),
B(LdaImmutableCurrentContextSlot), U8(4),
B(Star), R(16),
B(LdaFalse),
B(Star), R(17),
B(Mov), R(3), R(15),
B(CallJSRuntime), U8(%promise_internal_reject), R(14), U8(4),
B(PopContext), R(13),
B(LdaFalse),
B(Star), R(18),
B(Mov), R(3), R(16),
B(CallJSRuntime), U8(%promise_internal_reject), R(15), U8(4),
B(PopContext), R(14),
B(LdaZero),
B(Star), R(9),
B(Mov), R(3), R(10),
B(Star), R(10),
B(Mov), R(3), R(11),
B(Jump), U8(14),
B(LdaSmi), I8(-1),
B(Star), R(9),
B(Jump), U8(8),
B(Star), R(10),
B(Jump), U8(8),
B(Star), R(11),
B(LdaSmi), I8(1),
B(Star), R(9),
B(Star), R(10),
B(LdaTheHole),
B(SetPendingMessage),
B(Star), R(11),
B(LdaUndefined),
B(Star), R(12),
B(Mov), R(3), R(13),
B(CallJSRuntime), U8(%async_function_promise_release), R(12), U8(2),
B(Ldar), R(11),
B(LdaUndefined),
B(Star), R(13),
B(Mov), R(3), R(14),
B(CallJSRuntime), U8(%async_function_promise_release), R(13), U8(2),
B(Ldar), R(12),
B(SetPendingMessage),
B(Ldar), R(9),
B(Ldar), R(10),
B(SwitchOnSmiNoFeedback), U8(5), U8(2), I8(0),
B(Jump), U8(8),
B(Ldar), R(10),
B(Ldar), R(11),
/* 61 S> */ B(Return),
B(Ldar), R(10),
B(Ldar), R(11),
B(ReThrow),
B(LdaUndefined),
/* 61 S> */ B(Return),
]
constant pool: [
Smi [54],
Smi [56],
Smi [57],
Smi [56],
Smi [58],
ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"],
FIXED_ARRAY_TYPE,
Smi [6],
Smi [9],
]
handlers: [
[56, 320, 326],
[59, 275, 277],
[62, 332, 338],
[65, 287, 289],
]
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
function* h() { try {yield 42} finally {yield 43} };
function* g() { yield* h(); };
let x = g();
x.next();
%OptimizeFunctionOnNextCall(g);
x.throw(670);
try { x.next() } catch (e) { }
// Copyright 2017 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --allow-natives-syntax
function* foo() {
for (let i = 0; i < 10; i++) {
yield 1;
}
return 0;
}
g = foo();
%OptimizeFunctionOnNextCall(foo);
g.next();
g.next();
......@@ -358,7 +358,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) {
.StoreModuleVariable(1, 42);
// Emit generator operations.
builder.SuspendGenerator(reg, SuspendFlags::kYield).ResumeGenerator(reg);
builder.SuspendGenerator(reg, reg_list, SuspendFlags::kYield)
.RestoreGeneratorState(reg)
.RestoreGeneratorRegisters(reg, reg_list);
// Intrinsics handled by the interpreter.
builder.CallRuntime(Runtime::kInlineIsArray, reg_list);
......
......@@ -392,6 +392,7 @@ TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) {
case interpreter::OperandType::kRegList:
case interpreter::OperandType::kReg:
case interpreter::OperandType::kRegOut:
case interpreter::OperandType::kRegOutList:
case interpreter::OperandType::kRegOutPair:
case interpreter::OperandType::kRegOutTriple:
case interpreter::OperandType::kRegPair:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment