| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/interpreter/bytecode-generator.h" | 5 #include "src/interpreter/bytecode-generator.h" |
| 6 | 6 |
| 7 #include "src/ast/compile-time-value.h" | 7 #include "src/ast/compile-time-value.h" |
| 8 #include "src/ast/scopes.h" | 8 #include "src/ast/scopes.h" |
| 9 #include "src/builtins/builtins-constructor.h" | 9 #include "src/builtins/builtins-constructor.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 // The generator resume trampoline abuses the new.target register both to | 792 // The generator resume trampoline abuses the new.target register both to |
| 793 // indicate that this is a resume call and to pass in the generator object. | 793 // indicate that this is a resume call and to pass in the generator object. |
| 794 // In ordinary calls, new.target is always undefined because generator | 794 // In ordinary calls, new.target is always undefined because generator |
| 795 // functions are non-constructable. | 795 // functions are non-constructable. |
| 796 Register generator_object = Register::new_target(); | 796 Register generator_object = Register::new_target(); |
| 797 BytecodeLabel regular_call; | 797 BytecodeLabel regular_call; |
| 798 builder() | 798 builder() |
| 799 ->LoadAccumulatorWithRegister(generator_object) | 799 ->LoadAccumulatorWithRegister(generator_object) |
| 800 .JumpIfUndefined(®ular_call); | 800 .JumpIfUndefined(®ular_call); |
| 801 | 801 |
| 802 // This is a resume call. Restore registers and perform state dispatch. | 802 // This is a resume call. Restore the current context and the registers, then |
| 803 // (The current context has already been restored by the trampoline.) | 803 // perform state dispatch. |
| 804 Register dummy = register_allocator()->NewRegister(); |
| 804 builder() | 805 builder() |
| 805 ->ResumeGenerator(generator_object) | 806 ->CallRuntime(Runtime::kInlineGeneratorGetContext, generator_object) |
| 807 .PushContext(dummy) |
| 808 .ResumeGenerator(generator_object) |
| 806 .StoreAccumulatorInRegister(generator_state_); | 809 .StoreAccumulatorInRegister(generator_state_); |
| 807 BuildIndexedJump(generator_state_, 0, generator_resume_points_.size(), | 810 BuildIndexedJump(generator_state_, 0, generator_resume_points_.size(), |
| 808 generator_resume_points_); | 811 generator_resume_points_); |
| 809 | 812 |
| 810 builder() | 813 builder() |
| 811 ->Bind(®ular_call) | 814 ->Bind(®ular_call) |
| 812 .LoadLiteral(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)) | 815 .LoadLiteral(Smi::FromInt(JSGeneratorObject::kGeneratorExecuting)) |
| 813 .StoreAccumulatorInRegister(generator_state_); | 816 .StoreAccumulatorInRegister(generator_state_); |
| 814 // This is a regular call. Fall through to the ordinary function prologue, | 817 // This is a regular call. Fall through to the ordinary function prologue, |
| 815 // after which we will run into the generator object creation and other extra | 818 // after which we will run into the generator object creation and other extra |
| (...skipping 2543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3359 } | 3362 } |
| 3360 | 3363 |
| 3361 Runtime::FunctionId BytecodeGenerator::StoreKeyedToSuperRuntimeId() { | 3364 Runtime::FunctionId BytecodeGenerator::StoreKeyedToSuperRuntimeId() { |
| 3362 return is_strict(language_mode()) ? Runtime::kStoreKeyedToSuper_Strict | 3365 return is_strict(language_mode()) ? Runtime::kStoreKeyedToSuper_Strict |
| 3363 : Runtime::kStoreKeyedToSuper_Sloppy; | 3366 : Runtime::kStoreKeyedToSuper_Sloppy; |
| 3364 } | 3367 } |
| 3365 | 3368 |
| 3366 } // namespace interpreter | 3369 } // namespace interpreter |
| 3367 } // namespace internal | 3370 } // namespace internal |
| 3368 } // namespace v8 | 3371 } // namespace v8 |
| OLD | NEW |