| 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/contexts.h" | 9 #include "src/contexts.h" |
| 10 #include "src/elements.h" | 10 #include "src/elements.h" |
| (...skipping 2161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2172 iterator, JSArrayIterator::kIteratedObjectMapOffset); | 2172 iterator, JSArrayIterator::kIteratedObjectMapOffset); |
| 2173 Node* array_map = assembler->LoadMap(array); | 2173 Node* array_map = assembler->LoadMap(array); |
| 2174 | 2174 |
| 2175 Label if_isfastarray(assembler), if_isnotfastarray(assembler); | 2175 Label if_isfastarray(assembler), if_isnotfastarray(assembler); |
| 2176 | 2176 |
| 2177 assembler->Branch(assembler->WordEqual(orig_map, array_map), &if_isfastarray, | 2177 assembler->Branch(assembler->WordEqual(orig_map, array_map), &if_isfastarray, |
| 2178 &if_isnotfastarray); | 2178 &if_isnotfastarray); |
| 2179 | 2179 |
| 2180 assembler->Bind(&if_isfastarray); | 2180 assembler->Bind(&if_isfastarray); |
| 2181 { | 2181 { |
| 2182 assembler->Assert( | 2182 CSA_ASSERT(assembler, |
| 2183 assembler->Word32Equal(assembler->LoadMapInstanceType(array_map), | 2183 assembler->Word32Equal(assembler->LoadMapInstanceType(array_map), |
| 2184 assembler->Int32Constant(JS_ARRAY_TYPE))); | 2184 assembler->Int32Constant(JS_ARRAY_TYPE))); |
| 2185 | 2185 |
| 2186 Node* length = assembler->LoadObjectField(array, JSArray::kLengthOffset); | 2186 Node* length = assembler->LoadObjectField(array, JSArray::kLengthOffset); |
| 2187 | 2187 |
| 2188 assembler->Assert(assembler->TaggedIsSmi(length)); | 2188 CSA_ASSERT(assembler, assembler->TaggedIsSmi(length)); |
| 2189 assembler->Assert(assembler->TaggedIsSmi(index)); | 2189 CSA_ASSERT(assembler, assembler->TaggedIsSmi(index)); |
| 2190 | 2190 |
| 2191 assembler->GotoUnless(assembler->SmiBelow(index, length), &set_done); | 2191 assembler->GotoUnless(assembler->SmiBelow(index, length), &set_done); |
| 2192 | 2192 |
| 2193 Node* one = assembler->SmiConstant(Smi::FromInt(1)); | 2193 Node* one = assembler->SmiConstant(Smi::FromInt(1)); |
| 2194 assembler->StoreObjectFieldNoWriteBarrier( | 2194 assembler->StoreObjectFieldNoWriteBarrier( |
| 2195 iterator, JSArrayIterator::kNextIndexOffset, | 2195 iterator, JSArrayIterator::kNextIndexOffset, |
| 2196 assembler->IntPtrAdd(assembler->BitcastTaggedToWord(index), | 2196 assembler->IntPtrAdd(assembler->BitcastTaggedToWord(index), |
| 2197 assembler->BitcastTaggedToWord(one))); | 2197 assembler->BitcastTaggedToWord(one))); |
| 2198 | 2198 |
| 2199 var_done.Bind(assembler->FalseConstant()); | 2199 var_done.Bind(assembler->FalseConstant()); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2377 | 2377 |
| 2378 assembler->Bind(&if_isdetached); | 2378 assembler->Bind(&if_isdetached); |
| 2379 { | 2379 { |
| 2380 var_length.Bind(assembler->SmiConstant(Smi::kZero)); | 2380 var_length.Bind(assembler->SmiConstant(Smi::kZero)); |
| 2381 assembler->Goto(&done); | 2381 assembler->Goto(&done); |
| 2382 } | 2382 } |
| 2383 | 2383 |
| 2384 assembler->Bind(&done); | 2384 assembler->Bind(&done); |
| 2385 length = var_length.value(); | 2385 length = var_length.value(); |
| 2386 } | 2386 } |
| 2387 assembler->Assert(assembler->TaggedIsSmi(length)); | 2387 CSA_ASSERT(assembler, assembler->TaggedIsSmi(length)); |
| 2388 assembler->Assert(assembler->TaggedIsSmi(index)); | 2388 CSA_ASSERT(assembler, assembler->TaggedIsSmi(index)); |
| 2389 | 2389 |
| 2390 assembler->GotoUnless(assembler->SmiBelow(index, length), &set_done); | 2390 assembler->GotoUnless(assembler->SmiBelow(index, length), &set_done); |
| 2391 | 2391 |
| 2392 Node* one = assembler->SmiConstant(Smi::FromInt(1)); | 2392 Node* one = assembler->SmiConstant(Smi::FromInt(1)); |
| 2393 assembler->StoreObjectFieldNoWriteBarrier( | 2393 assembler->StoreObjectFieldNoWriteBarrier( |
| 2394 iterator, JSArrayIterator::kNextIndexOffset, | 2394 iterator, JSArrayIterator::kNextIndexOffset, |
| 2395 assembler->IntPtrAdd(assembler->BitcastTaggedToWord(index), | 2395 assembler->IntPtrAdd(assembler->BitcastTaggedToWord(index), |
| 2396 assembler->BitcastTaggedToWord(one))); | 2396 assembler->BitcastTaggedToWord(one))); |
| 2397 var_done.Bind(assembler->FalseConstant()); | 2397 var_done.Bind(assembler->FalseConstant()); |
| 2398 | 2398 |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2583 Runtime::kThrowIncompatibleMethodReceiver, context, | 2583 Runtime::kThrowIncompatibleMethodReceiver, context, |
| 2584 assembler->HeapConstant(assembler->factory()->NewStringFromAsciiChecked( | 2584 assembler->HeapConstant(assembler->factory()->NewStringFromAsciiChecked( |
| 2585 "Array Iterator.prototype.next", TENURED)), | 2585 "Array Iterator.prototype.next", TENURED)), |
| 2586 iterator); | 2586 iterator); |
| 2587 assembler->Return(result); | 2587 assembler->Return(result); |
| 2588 } | 2588 } |
| 2589 } | 2589 } |
| 2590 | 2590 |
| 2591 } // namespace internal | 2591 } // namespace internal |
| 2592 } // namespace v8 | 2592 } // namespace v8 |
| OLD | NEW |