OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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/builtins/builtins.h" | 5 #include "src/builtins/builtins.h" |
6 #include "src/builtins/builtins-utils.h" | 6 #include "src/builtins/builtins-utils.h" |
7 | 7 |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/regexp/regexp-utils.h" | 9 #include "src/regexp/regexp-utils.h" |
10 | 10 |
(...skipping 1263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1274 typedef compiler::Node Node; | 1274 typedef compiler::Node Node; |
1275 CodeStubAssembler assembler(state); | 1275 CodeStubAssembler assembler(state); |
1276 | 1276 |
1277 Node* receiver = assembler.Parameter(0); | 1277 Node* receiver = assembler.Parameter(0); |
1278 Node* context = assembler.Parameter(3); | 1278 Node* context = assembler.Parameter(3); |
1279 | 1279 |
1280 Node* string = assembler.ToThisString(context, receiver, | 1280 Node* string = assembler.ToThisString(context, receiver, |
1281 "String.prototype[Symbol.iterator]"); | 1281 "String.prototype[Symbol.iterator]"); |
1282 | 1282 |
1283 Node* native_context = assembler.LoadNativeContext(context); | 1283 Node* native_context = assembler.LoadNativeContext(context); |
1284 Node* map = assembler.LoadFixedArrayElement( | 1284 Node* map = assembler.LoadContextElement(native_context, |
1285 native_context, | 1285 Context::STRING_ITERATOR_MAP_INDEX); |
1286 assembler.IntPtrConstant(Context::STRING_ITERATOR_MAP_INDEX), 0, | |
1287 CodeStubAssembler::INTPTR_PARAMETERS); | |
1288 Node* iterator = assembler.Allocate(JSStringIterator::kSize); | 1286 Node* iterator = assembler.Allocate(JSStringIterator::kSize); |
1289 assembler.StoreMapNoWriteBarrier(iterator, map); | 1287 assembler.StoreMapNoWriteBarrier(iterator, map); |
1290 assembler.StoreObjectFieldRoot(iterator, JSValue::kPropertiesOffset, | 1288 assembler.StoreObjectFieldRoot(iterator, JSValue::kPropertiesOffset, |
1291 Heap::kEmptyFixedArrayRootIndex); | 1289 Heap::kEmptyFixedArrayRootIndex); |
1292 assembler.StoreObjectFieldRoot(iterator, JSObject::kElementsOffset, | 1290 assembler.StoreObjectFieldRoot(iterator, JSObject::kElementsOffset, |
1293 Heap::kEmptyFixedArrayRootIndex); | 1291 Heap::kEmptyFixedArrayRootIndex); |
1294 assembler.StoreObjectFieldNoWriteBarrier( | 1292 assembler.StoreObjectFieldNoWriteBarrier( |
1295 iterator, JSStringIterator::kStringOffset, string); | 1293 iterator, JSStringIterator::kStringOffset, string); |
1296 Node* index = assembler.SmiConstant(Smi::kZero); | 1294 Node* index = assembler.SmiConstant(Smi::kZero); |
1297 assembler.StoreObjectFieldNoWriteBarrier( | 1295 assembler.StoreObjectFieldNoWriteBarrier( |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1433 assembler.StoreObjectFieldNoWriteBarrier( | 1431 assembler.StoreObjectFieldNoWriteBarrier( |
1434 iterator, JSStringIterator::kNextIndexOffset, | 1432 iterator, JSStringIterator::kNextIndexOffset, |
1435 assembler.SmiAdd(position, length)); | 1433 assembler.SmiAdd(position, length)); |
1436 var_done.Bind(assembler.BooleanConstant(false)); | 1434 var_done.Bind(assembler.BooleanConstant(false)); |
1437 assembler.Goto(&return_result); | 1435 assembler.Goto(&return_result); |
1438 } | 1436 } |
1439 | 1437 |
1440 assembler.Bind(&return_result); | 1438 assembler.Bind(&return_result); |
1441 { | 1439 { |
1442 Node* native_context = assembler.LoadNativeContext(context); | 1440 Node* native_context = assembler.LoadNativeContext(context); |
1443 Node* map = assembler.LoadFixedArrayElement( | 1441 Node* map = assembler.LoadContextElement( |
1444 native_context, | 1442 native_context, Context::ITERATOR_RESULT_MAP_INDEX); |
1445 assembler.IntPtrConstant(Context::ITERATOR_RESULT_MAP_INDEX), 0, | |
1446 CodeStubAssembler::INTPTR_PARAMETERS); | |
1447 Node* result = assembler.Allocate(JSIteratorResult::kSize); | 1443 Node* result = assembler.Allocate(JSIteratorResult::kSize); |
1448 assembler.StoreMapNoWriteBarrier(result, map); | 1444 assembler.StoreMapNoWriteBarrier(result, map); |
1449 assembler.StoreObjectFieldRoot(result, JSIteratorResult::kPropertiesOffset, | 1445 assembler.StoreObjectFieldRoot(result, JSIteratorResult::kPropertiesOffset, |
1450 Heap::kEmptyFixedArrayRootIndex); | 1446 Heap::kEmptyFixedArrayRootIndex); |
1451 assembler.StoreObjectFieldRoot(result, JSIteratorResult::kElementsOffset, | 1447 assembler.StoreObjectFieldRoot(result, JSIteratorResult::kElementsOffset, |
1452 Heap::kEmptyFixedArrayRootIndex); | 1448 Heap::kEmptyFixedArrayRootIndex); |
1453 assembler.StoreObjectFieldNoWriteBarrier( | 1449 assembler.StoreObjectFieldNoWriteBarrier( |
1454 result, JSIteratorResult::kValueOffset, var_value.value()); | 1450 result, JSIteratorResult::kValueOffset, var_value.value()); |
1455 assembler.StoreObjectFieldNoWriteBarrier( | 1451 assembler.StoreObjectFieldNoWriteBarrier( |
1456 result, JSIteratorResult::kDoneOffset, var_done.value()); | 1452 result, JSIteratorResult::kDoneOffset, var_done.value()); |
1457 assembler.Return(result); | 1453 assembler.Return(result); |
1458 } | 1454 } |
1459 | 1455 |
1460 assembler.Bind(&throw_bad_receiver); | 1456 assembler.Bind(&throw_bad_receiver); |
1461 { | 1457 { |
1462 // The {receiver} is not a valid JSGeneratorObject. | 1458 // The {receiver} is not a valid JSGeneratorObject. |
1463 Node* result = assembler.CallRuntime( | 1459 Node* result = assembler.CallRuntime( |
1464 Runtime::kThrowIncompatibleMethodReceiver, context, | 1460 Runtime::kThrowIncompatibleMethodReceiver, context, |
1465 assembler.HeapConstant(assembler.factory()->NewStringFromAsciiChecked( | 1461 assembler.HeapConstant(assembler.factory()->NewStringFromAsciiChecked( |
1466 "String Iterator.prototype.next", TENURED)), | 1462 "String Iterator.prototype.next", TENURED)), |
1467 iterator); | 1463 iterator); |
1468 assembler.Return(result); // Never reached. | 1464 assembler.Return(result); // Never reached. |
1469 } | 1465 } |
1470 } | 1466 } |
1471 | 1467 |
1472 } // namespace internal | 1468 } // namespace internal |
1473 } // namespace v8 | 1469 } // namespace v8 |
OLD | NEW |