OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 "bootstrapper.h" | 5 #include "bootstrapper.h" |
6 | 6 |
7 #include "accessors.h" | 7 #include "accessors.h" |
8 #include "isolate-inl.h" | 8 #include "isolate-inl.h" |
9 #include "natives.h" | 9 #include "natives.h" |
10 #include "snapshot.h" | 10 #include "snapshot.h" |
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
856 // is 1. | 856 // is 1. |
857 array_function->shared()->set_length(1); | 857 array_function->shared()->set_length(1); |
858 | 858 |
859 Handle<Map> initial_map(array_function->initial_map()); | 859 Handle<Map> initial_map(array_function->initial_map()); |
860 | 860 |
861 // This assert protects an optimization in | 861 // This assert protects an optimization in |
862 // HGraphBuilder::JSArrayBuilder::EmitMapCode() | 862 // HGraphBuilder::JSArrayBuilder::EmitMapCode() |
863 ASSERT(initial_map->elements_kind() == GetInitialFastElementsKind()); | 863 ASSERT(initial_map->elements_kind() == GetInitialFastElementsKind()); |
864 Map::EnsureDescriptorSlack(initial_map, 1); | 864 Map::EnsureDescriptorSlack(initial_map, 1); |
865 | 865 |
866 Handle<Foreign> array_length(factory->NewForeign(&Accessors::ArrayLength)); | |
867 PropertyAttributes attribs = static_cast<PropertyAttributes>( | 866 PropertyAttributes attribs = static_cast<PropertyAttributes>( |
868 DONT_ENUM | DONT_DELETE); | 867 DONT_ENUM | DONT_DELETE); |
869 | 868 |
| 869 Handle<AccessorInfo> array_length = |
| 870 Accessors::ArrayLengthInfo(isolate, attribs); |
870 { // Add length. | 871 { // Add length. |
871 CallbacksDescriptor d(factory->length_string(), array_length, attribs); | 872 CallbacksDescriptor d( |
| 873 Handle<Name>(Name::cast(array_length->name())), |
| 874 array_length, attribs); |
872 array_function->initial_map()->AppendDescriptor(&d); | 875 array_function->initial_map()->AppendDescriptor(&d); |
873 } | 876 } |
874 | 877 |
875 // array_function is used internally. JS code creating array object should | 878 // array_function is used internally. JS code creating array object should |
876 // search for the 'Array' property on the global object and use that one | 879 // search for the 'Array' property on the global object and use that one |
877 // as the constructor. 'Array' property on a global object can be | 880 // as the constructor. 'Array' property on a global object can be |
878 // overwritten by JS code. | 881 // overwritten by JS code. |
879 native_context()->set_array_function(*array_function); | 882 native_context()->set_array_function(*array_function); |
880 | 883 |
881 // Cache the array maps, needed by ArrayConstructorStub | 884 // Cache the array maps, needed by ArrayConstructorStub |
(...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1607 array_function->shared()->DontAdaptArguments(); | 1610 array_function->shared()->DontAdaptArguments(); |
1608 | 1611 |
1609 Handle<Map> original_map(array_function->initial_map()); | 1612 Handle<Map> original_map(array_function->initial_map()); |
1610 Handle<Map> initial_map = Map::Copy(original_map); | 1613 Handle<Map> initial_map = Map::Copy(original_map); |
1611 initial_map->set_elements_kind(elements_kind); | 1614 initial_map->set_elements_kind(elements_kind); |
1612 array_function->set_initial_map(*initial_map); | 1615 array_function->set_initial_map(*initial_map); |
1613 | 1616 |
1614 // Make "length" magic on instances. | 1617 // Make "length" magic on instances. |
1615 Map::EnsureDescriptorSlack(initial_map, 1); | 1618 Map::EnsureDescriptorSlack(initial_map, 1); |
1616 | 1619 |
1617 Handle<Foreign> array_length(factory()->NewForeign( | |
1618 &Accessors::ArrayLength)); | |
1619 PropertyAttributes attribs = static_cast<PropertyAttributes>( | 1620 PropertyAttributes attribs = static_cast<PropertyAttributes>( |
1620 DONT_ENUM | DONT_DELETE); | 1621 DONT_ENUM | DONT_DELETE); |
1621 | 1622 |
| 1623 Handle<AccessorInfo> array_length = |
| 1624 Accessors::ArrayLengthInfo(isolate(), attribs); |
1622 { // Add length. | 1625 { // Add length. |
1623 CallbacksDescriptor d( | 1626 CallbacksDescriptor d( |
1624 factory()->length_string(), array_length, attribs); | 1627 Handle<Name>(Name::cast(array_length->name())), array_length, attribs); |
1625 array_function->initial_map()->AppendDescriptor(&d); | 1628 array_function->initial_map()->AppendDescriptor(&d); |
1626 } | 1629 } |
1627 | 1630 |
1628 return array_function; | 1631 return array_function; |
1629 } | 1632 } |
1630 | 1633 |
1631 | 1634 |
1632 bool Genesis::InstallNatives() { | 1635 bool Genesis::InstallNatives() { |
1633 HandleScope scope(isolate()); | 1636 HandleScope scope(isolate()); |
1634 | 1637 |
(...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2688 return from + sizeof(NestingCounterType); | 2691 return from + sizeof(NestingCounterType); |
2689 } | 2692 } |
2690 | 2693 |
2691 | 2694 |
2692 // Called when the top-level V8 mutex is destroyed. | 2695 // Called when the top-level V8 mutex is destroyed. |
2693 void Bootstrapper::FreeThreadResources() { | 2696 void Bootstrapper::FreeThreadResources() { |
2694 ASSERT(!IsActive()); | 2697 ASSERT(!IsActive()); |
2695 } | 2698 } |
2696 | 2699 |
2697 } } // namespace v8::internal | 2700 } } // namespace v8::internal |
OLD | NEW |