Index: src/compiler/bytecode-graph-builder.cc |
diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc |
index d22746d9ecbfa8378621b4eef81d13f8da7c09cf..53b013040a6ad76a41bbe4f6a0c349fdc123e8d6 100644 |
--- a/src/compiler/bytecode-graph-builder.cc |
+++ b/src/compiler/bytecode-graph-builder.cc |
@@ -1874,8 +1874,34 @@ void BytecodeGraphBuilder::VisitSuspendGenerator() { |
environment()->LookupRegister(interpreter::Register(i)); |
} |
- MakeNode(javascript()->GeneratorStore(register_count), value_input_count, |
- value_inputs, false); |
+ MakeNode(javascript()->GeneratorStore(register_count, SuspendType::kYield), |
+ value_input_count, value_inputs, false); |
+} |
+ |
+void BytecodeGraphBuilder::VisitAwaitGenerator() { |
+ Node* state = environment()->LookupAccumulator(); |
+ Node* generator = |
+ environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); |
+ // 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); |
+ value_inputs[0] = generator; |
+ value_inputs[1] = state; |
+ value_inputs[2] = offset; |
+ for (int i = 0; i < register_count; ++i) { |
+ value_inputs[3 + i] = |
+ environment()->LookupRegister(interpreter::Register(i)); |
+ } |
+ |
+ MakeNode(javascript()->GeneratorStore(register_count, SuspendType::kAwait), |
+ value_input_count, value_inputs, false); |
} |
void BytecodeGraphBuilder::VisitResumeGenerator() { |