Chromium Code Reviews| 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/code-stub-assembler.h" | 9 #include "src/code-stub-assembler.h" |
| 10 #include "src/contexts.h" | 10 #include "src/contexts.h" |
| (...skipping 1684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1695 len_var.Bind(IntPtrConstant(0)); | 1695 len_var.Bind(IntPtrConstant(0)); |
| 1696 | 1696 |
| 1697 // Take slow path if not a JSArray, if retrieving elements requires | 1697 // Take slow path if not a JSArray, if retrieving elements requires |
| 1698 // traversing prototype, or if access checks are required. | 1698 // traversing prototype, or if access checks are required. |
| 1699 BranchIfFastJSArray(array, context, | 1699 BranchIfFastJSArray(array, context, |
| 1700 CodeStubAssembler::FastJSArrayAccessMode::INBOUNDS_READ, | 1700 CodeStubAssembler::FastJSArrayAccessMode::INBOUNDS_READ, |
| 1701 &init_len, &call_runtime); | 1701 &init_len, &call_runtime); |
| 1702 | 1702 |
| 1703 Bind(&init_len); | 1703 Bind(&init_len); |
| 1704 { | 1704 { |
| 1705 // Handle case where JSArray length is not an Smi in the runtime | 1705 // JSArray length is always an Smi for fast arrays. |
| 1706 Node* len = LoadObjectField(array, JSArray::kLengthOffset); | 1706 CSA_ASSERT(this, |
| 1707 GotoIfNot(TaggedIsSmi(len), &call_runtime); | 1707 TaggedIsSmi(LoadObjectField(array, JSArray::kLengthOffset))); |
| 1708 Node* len = LoadAndUntagObjectField(array, JSArray::kLengthOffset); | |
| 1708 | 1709 |
| 1709 len_var.Bind(SmiToWord(len)); | 1710 len_var.Bind(len); |
|
caitp
2017/02/25 18:03:06
Do we still need `len_var`? It never changes at an
vabr (Chromium)
2017/02/25 18:35:48
So that I learn more:
(1) Changing would mean that
caitp
2017/02/25 18:40:12
There's another Bind() call before this line, but
| |
| 1710 | 1711 |
| 1711 GotoIf(IsUndefined(start_from), &select_loop); | 1712 GotoIf(IsUndefined(start_from), &select_loop); |
| 1712 | 1713 |
| 1713 // Bailout to slow path if startIndex is not an Smi. | 1714 // Bailout to slow path if startIndex is not an Smi. |
| 1714 Branch(TaggedIsSmi(start_from), &init_k, &call_runtime); | 1715 Branch(TaggedIsSmi(start_from), &init_k, &call_runtime); |
| 1715 } | 1716 } |
| 1716 | 1717 |
| 1717 Bind(&init_k); | 1718 Bind(&init_k); |
| 1718 CSA_ASSERT(this, TaggedIsSmi(start_from)); | 1719 CSA_ASSERT(this, TaggedIsSmi(start_from)); |
| 1719 Node* const untagged_start_from = SmiToWord(start_from); | 1720 Node* const untagged_start_from = SmiToWord(start_from); |
| (...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2849 { | 2850 { |
| 2850 Node* message = assembler.SmiConstant(MessageTemplate::kDetachedOperation); | 2851 Node* message = assembler.SmiConstant(MessageTemplate::kDetachedOperation); |
| 2851 assembler.CallRuntime(Runtime::kThrowTypeError, context, message, | 2852 assembler.CallRuntime(Runtime::kThrowTypeError, context, message, |
| 2852 assembler.HeapConstant(operation)); | 2853 assembler.HeapConstant(operation)); |
| 2853 assembler.Unreachable(); | 2854 assembler.Unreachable(); |
| 2854 } | 2855 } |
| 2855 } | 2856 } |
| 2856 | 2857 |
| 2857 } // namespace internal | 2858 } // namespace internal |
| 2858 } // namespace v8 | 2859 } // namespace v8 |
| OLD | NEW |