Commit 4268685a authored by rmcilroy@chromium.org's avatar rmcilroy@chromium.org

Update constant pool correctly when resuming a generator

This CL depends on the following CLs landing first:
  https://codereview.chromium.org/188063002/
  https://codereview.chromium.org/190793002/

R=ulan@chromium.org

Review URL: https://codereview.chromium.org/190823002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20012 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 5aaa5136
......@@ -2188,12 +2188,21 @@ void FullCodeGenerator::EmitGeneratorResume(Expression *generator,
__ cmp(r3, Operand(0));
__ b(ne, &slow_resume);
__ ldr(r3, FieldMemOperand(r4, JSFunction::kCodeEntryOffset));
__ ldr(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset));
__ SmiUntag(r2);
__ add(r3, r3, r2);
__ mov(r2, Operand(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)));
__ str(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset));
__ Jump(r3);
{ ConstantPoolUnavailableScope constant_pool_unavailable(masm_);
if (FLAG_enable_ool_constant_pool) {
// Load the new code object's constant pool pointer.
__ ldr(pp,
MemOperand(r3, Code::kConstantPoolOffset - Code::kHeaderSize));
}
__ ldr(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset));
__ SmiUntag(r2);
__ add(r3, r3, r2);
__ mov(r2, Operand(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)));
__ str(r2, FieldMemOperand(r1, JSGeneratorObject::kContinuationOffset));
__ Jump(r3);
}
__ bind(&slow_resume);
}
......
......@@ -3089,6 +3089,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_ResumeJSGeneratorObject) {
int offset = generator_object->continuation();
ASSERT(offset > 0);
frame->set_pc(pc + offset);
if (FLAG_enable_ool_constant_pool) {
frame->set_constant_pool(
generator_object->function()->code()->constant_pool());
}
generator_object->set_continuation(JSGeneratorObject::kGeneratorExecuting);
FixedArray* operand_stack = generator_object->operand_stack();
......
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