| 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 #include "src/code-stub-assembler.h" | 4 #include "src/code-stub-assembler.h" | 
| 5 #include "src/code-factory.h" | 5 #include "src/code-factory.h" | 
| 6 #include "src/frames-inl.h" | 6 #include "src/frames-inl.h" | 
| 7 #include "src/frames.h" | 7 #include "src/frames.h" | 
| 8 #include "src/ic/handler-configuration.h" | 8 #include "src/ic/handler-configuration.h" | 
| 9 #include "src/ic/stub-cache.h" | 9 #include "src/ic/stub-cache.h" | 
| 10 | 10 | 
| (...skipping 8832 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 8843   Variable var_map_index(this, MachineType::PointerRepresentation()); | 8843   Variable var_map_index(this, MachineType::PointerRepresentation()); | 
| 8844   Variable var_array_map(this, MachineRepresentation::kTagged); | 8844   Variable var_array_map(this, MachineRepresentation::kTagged); | 
| 8845 | 8845 | 
| 8846   Label return_result(this); | 8846   Label return_result(this); | 
| 8847   Label allocate_iterator(this); | 8847   Label allocate_iterator(this); | 
| 8848 | 8848 | 
| 8849   if (mode == IterationKind::kKeys) { | 8849   if (mode == IterationKind::kKeys) { | 
| 8850     // There are only two key iterator maps, branch depending on whether or not | 8850     // There are only two key iterator maps, branch depending on whether or not | 
| 8851     // the receiver is a TypedArray or not. | 8851     // the receiver is a TypedArray or not. | 
| 8852 | 8852 | 
| 8853     Label if_isarray(this), if_istypedarray(this), if_isgeneric(this); | 8853     Label if_istypedarray(this), if_isgeneric(this); | 
| 8854     Label* kInstanceTypeHandlers[] = {&if_isarray, &if_istypedarray}; |  | 
| 8855 | 8854 | 
| 8856     static int32_t kInstanceType[] = {JS_ARRAY_TYPE, JS_TYPED_ARRAY_TYPE}; | 8855     Branch(Word32Equal(array_type, Int32Constant(JS_TYPED_ARRAY_TYPE)), | 
|  | 8856            &if_istypedarray, &if_isgeneric); | 
| 8857 | 8857 | 
| 8858     Switch(array_type, &if_isgeneric, kInstanceType, kInstanceTypeHandlers, | 8858     Bind(&if_isgeneric); | 
| 8859            arraysize(kInstanceType)); | 8859     { | 
|  | 8860       Label if_isfast(this), if_isslow(this); | 
|  | 8861       BranchIfFastJSArray(array, context, &if_isfast, &if_isslow); | 
| 8860 | 8862 | 
| 8861     Bind(&if_isarray); | 8863       Bind(&if_isfast); | 
| 8862     { | 8864       { | 
| 8863       var_map_index.Bind( | 8865         var_map_index.Bind( | 
| 8864           IntPtrConstant(Context::FAST_ARRAY_KEY_ITERATOR_MAP_INDEX)); | 8866             IntPtrConstant(Context::FAST_ARRAY_KEY_ITERATOR_MAP_INDEX)); | 
| 8865       var_array_map.Bind(array_map); | 8867         var_array_map.Bind(array_map); | 
| 8866       Goto(&allocate_iterator); | 8868         Goto(&allocate_iterator); | 
|  | 8869       } | 
|  | 8870 | 
|  | 8871       Bind(&if_isslow); | 
|  | 8872       { | 
|  | 8873         var_map_index.Bind( | 
|  | 8874             IntPtrConstant(Context::GENERIC_ARRAY_KEY_ITERATOR_MAP_INDEX)); | 
|  | 8875         var_array_map.Bind(UndefinedConstant()); | 
|  | 8876         Goto(&allocate_iterator); | 
|  | 8877       } | 
| 8867     } | 8878     } | 
| 8868 | 8879 | 
| 8869     Bind(&if_istypedarray); | 8880     Bind(&if_istypedarray); | 
| 8870     { | 8881     { | 
| 8871       var_map_index.Bind( | 8882       var_map_index.Bind( | 
| 8872           IntPtrConstant(Context::TYPED_ARRAY_KEY_ITERATOR_MAP_INDEX)); | 8883           IntPtrConstant(Context::TYPED_ARRAY_KEY_ITERATOR_MAP_INDEX)); | 
| 8873       var_array_map.Bind(UndefinedConstant()); | 8884       var_array_map.Bind(UndefinedConstant()); | 
| 8874       Goto(&allocate_iterator); | 8885       Goto(&allocate_iterator); | 
| 8875     } | 8886     } | 
| 8876 |  | 
| 8877     Bind(&if_isgeneric); |  | 
| 8878     { |  | 
| 8879       var_map_index.Bind( |  | 
| 8880           IntPtrConstant(Context::GENERIC_ARRAY_KEY_ITERATOR_MAP_INDEX)); |  | 
| 8881       var_array_map.Bind(UndefinedConstant()); |  | 
| 8882       Goto(&allocate_iterator); |  | 
| 8883     } |  | 
| 8884   } else { | 8887   } else { | 
| 8885     Label if_istypedarray(this), if_isgeneric(this); | 8888     Label if_istypedarray(this), if_isgeneric(this); | 
| 8886     Branch(Word32Equal(array_type, Int32Constant(JS_TYPED_ARRAY_TYPE)), | 8889     Branch(Word32Equal(array_type, Int32Constant(JS_TYPED_ARRAY_TYPE)), | 
| 8887            &if_istypedarray, &if_isgeneric); | 8890            &if_istypedarray, &if_isgeneric); | 
| 8888 | 8891 | 
| 8889     Bind(&if_isgeneric); | 8892     Bind(&if_isgeneric); | 
| 8890     { | 8893     { | 
| 8891       Label if_isfast(this), if_isslow(this); | 8894       Label if_isfast(this), if_isslow(this); | 
| 8892       BranchIfFastJSArray(array, context, &if_isfast, &if_isslow); | 8895       BranchIfFastJSArray(array, context, &if_isfast, &if_isslow); | 
| 8893 | 8896 | 
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 9100   STATIC_ASSERT(FAST_HOLEY_ELEMENTS == (FAST_ELEMENTS | 1)); | 9103   STATIC_ASSERT(FAST_HOLEY_ELEMENTS == (FAST_ELEMENTS | 1)); | 
| 9101   STATIC_ASSERT(FAST_HOLEY_DOUBLE_ELEMENTS == (FAST_DOUBLE_ELEMENTS | 1)); | 9104   STATIC_ASSERT(FAST_HOLEY_DOUBLE_ELEMENTS == (FAST_DOUBLE_ELEMENTS | 1)); | 
| 9102 | 9105 | 
| 9103   // Check prototype chain if receiver does not have packed elements. | 9106   // Check prototype chain if receiver does not have packed elements. | 
| 9104   Node* holey_elements = Word32And(elements_kind, Int32Constant(1)); | 9107   Node* holey_elements = Word32And(elements_kind, Int32Constant(1)); | 
| 9105   return Word32Equal(holey_elements, Int32Constant(1)); | 9108   return Word32Equal(holey_elements, Int32Constant(1)); | 
| 9106 } | 9109 } | 
| 9107 | 9110 | 
| 9108 }  // namespace internal | 9111 }  // namespace internal | 
| 9109 }  // namespace v8 | 9112 }  // namespace v8 | 
| OLD | NEW | 
|---|