Chromium Code Reviews| Index: src/interpreter/interpreter-intrinsics.cc |
| diff --git a/src/interpreter/interpreter-intrinsics.cc b/src/interpreter/interpreter-intrinsics.cc |
| index 3893b027b1a2ae361c0bc63a4d16e4f1bf016926..2769353718437f909ac7865c19c5f05e54b970c2 100644 |
| --- a/src/interpreter/interpreter-intrinsics.cc |
| +++ b/src/interpreter/interpreter-intrinsics.cc |
| @@ -298,6 +298,42 @@ Node* IntrinsicsHelper::ClassOf(Node* args_reg, Node* arg_count, |
| return __ ClassOf(value); |
| } |
| +Node* IntrinsicsHelper::CreateAsyncFromSyncIterator(Node* args_reg, |
| + Node* arg_count, |
| + Node* context) { |
| + InterpreterAssembler::Label not_receiver( |
| + assembler_, InterpreterAssembler::Label::kDeferred); |
| + InterpreterAssembler::Label done(assembler_); |
| + InterpreterAssembler::Variable return_value(assembler_, |
| + MachineRepresentation::kTagged); |
| + |
| + Node* sync_iterator = __ LoadRegister(args_reg); |
| + |
| + __ GotoIf(__ TaggedIsSmi(sync_iterator), ¬_receiver); |
| + __ GotoUnless(__ IsJSReceiver(sync_iterator), ¬_receiver); |
| + |
| + Node* const native_context = __ LoadNativeContext(context); |
| + Node* const map = __ LoadContextElement( |
| + native_context, Context::ASYNC_FROM_SYNC_ITERATOR_MAP_INDEX); |
| + Node* const iterator = __ AllocateJSObjectFromMap(map); |
| + |
| + __ StoreObjectFieldNoWriteBarrier( |
| + iterator, JSAsyncFromSyncIterator::kSyncIteratorOffset, sync_iterator); |
| + |
| + return_value.Bind(iterator); |
| + __ Goto(&done); |
| + |
| + __ Bind(¬_receiver); |
| + { |
| + return_value.Bind( |
| + __ CallRuntime(Runtime::kThrowSymbolIteratorInvalid, context)); |
|
jgruber
2017/02/17 12:28:23
Can we TailCallRuntime from here (v8:5939)?. Other
caitp
2017/02/17 14:56:11
Done.
|
| + __ Goto(&done); |
| + } |
| + |
| + __ Bind(&done); |
| + return return_value.value(); |
| +} |
| + |
| void IntrinsicsHelper::AbortIfArgCountMismatch(int expected, Node* actual) { |
| InterpreterAssembler::Label match(assembler_); |
| Node* comparison = __ Word32Equal(actual, __ Int32Constant(expected)); |