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 "src/bootstrapper.h" | 5 #include "src/bootstrapper.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 #include "src/extensions/externalize-string-extension.h" | 9 #include "src/extensions/externalize-string-extension.h" |
10 #include "src/extensions/free-buffer-extension.h" | 10 #include "src/extensions/free-buffer-extension.h" |
(...skipping 1159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1170 ASSERT(!function->has_initial_map()); | 1170 ASSERT(!function->has_initial_map()); |
1171 function->set_initial_map(*map); | 1171 function->set_initial_map(*map); |
1172 map->set_constructor(*function); | 1172 map->set_constructor(*function); |
1173 | 1173 |
1174 ASSERT(map->inobject_properties() > Heap::kArgumentsCalleeIndex); | 1174 ASSERT(map->inobject_properties() > Heap::kArgumentsCalleeIndex); |
1175 ASSERT(map->inobject_properties() > Heap::kArgumentsLengthIndex); | 1175 ASSERT(map->inobject_properties() > Heap::kArgumentsLengthIndex); |
1176 ASSERT(!map->is_dictionary_map()); | 1176 ASSERT(!map->is_dictionary_map()); |
1177 ASSERT(IsFastObjectElementsKind(map->elements_kind())); | 1177 ASSERT(IsFastObjectElementsKind(map->elements_kind())); |
1178 } | 1178 } |
1179 | 1179 |
| 1180 { |
| 1181 // --- S y m b o l --- |
| 1182 Handle<JSFunction> symbol_fun = InstallFunction( |
| 1183 global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, |
| 1184 isolate->initial_object_prototype(), Builtins::kIllegal); |
| 1185 native_context()->set_symbol_function(*symbol_fun); |
| 1186 } |
| 1187 |
1180 { // --- aliased arguments map | 1188 { // --- aliased arguments map |
1181 Handle<Map> map = Map::Copy(isolate->sloppy_arguments_map()); | 1189 Handle<Map> map = Map::Copy(isolate->sloppy_arguments_map()); |
1182 map->set_elements_kind(SLOPPY_ARGUMENTS_ELEMENTS); | 1190 map->set_elements_kind(SLOPPY_ARGUMENTS_ELEMENTS); |
1183 ASSERT_EQ(2, map->pre_allocated_property_fields()); | 1191 ASSERT_EQ(2, map->pre_allocated_property_fields()); |
1184 native_context()->set_aliased_arguments_map(*map); | 1192 native_context()->set_aliased_arguments_map(*map); |
1185 } | 1193 } |
1186 | 1194 |
1187 { // --- strict mode arguments map | 1195 { // --- strict mode arguments map |
1188 const PropertyAttributes attributes = | 1196 const PropertyAttributes attributes = |
1189 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); | 1197 static_cast<PropertyAttributes>(DONT_ENUM | DONT_DELETE | READ_ONLY); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1301 *external_map = Map::AsElementsKind(initial_map, external_kind); | 1309 *external_map = Map::AsElementsKind(initial_map, external_kind); |
1302 } | 1310 } |
1303 | 1311 |
1304 | 1312 |
1305 void Genesis::InitializeExperimentalGlobal() { | 1313 void Genesis::InitializeExperimentalGlobal() { |
1306 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); | 1314 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); |
1307 | 1315 |
1308 // TODO(mstarzinger): Move this into Genesis::InitializeGlobal once we no | 1316 // TODO(mstarzinger): Move this into Genesis::InitializeGlobal once we no |
1309 // longer need to live behind flags, so functions get added to the snapshot. | 1317 // longer need to live behind flags, so functions get added to the snapshot. |
1310 | 1318 |
1311 if (FLAG_harmony_symbols) { | |
1312 // --- S y m b o l --- | |
1313 Handle<JSFunction> symbol_fun = InstallFunction( | |
1314 global, "Symbol", JS_VALUE_TYPE, JSValue::kSize, | |
1315 isolate()->initial_object_prototype(), Builtins::kIllegal); | |
1316 native_context()->set_symbol_function(*symbol_fun); | |
1317 } | |
1318 | |
1319 if (FLAG_harmony_collections) { | 1319 if (FLAG_harmony_collections) { |
1320 // -- M a p | 1320 // -- M a p |
1321 InstallFunction(global, "Map", JS_MAP_TYPE, JSMap::kSize, | 1321 InstallFunction(global, "Map", JS_MAP_TYPE, JSMap::kSize, |
1322 isolate()->initial_object_prototype(), Builtins::kIllegal); | 1322 isolate()->initial_object_prototype(), Builtins::kIllegal); |
1323 // -- S e t | 1323 // -- S e t |
1324 InstallFunction(global, "Set", JS_SET_TYPE, JSSet::kSize, | 1324 InstallFunction(global, "Set", JS_SET_TYPE, JSSet::kSize, |
1325 isolate()->initial_object_prototype(), Builtins::kIllegal); | 1325 isolate()->initial_object_prototype(), Builtins::kIllegal); |
1326 { // -- S e t I t e r a t o r | 1326 { // -- S e t I t e r a t o r |
1327 Handle<JSObject> builtins(native_context()->builtins()); | 1327 Handle<JSObject> builtins(native_context()->builtins()); |
1328 Handle<JSFunction> set_iterator_function = | 1328 Handle<JSFunction> set_iterator_function = |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1576 INSTALL_NATIVE(JSFunction, "BeginPerformSplice", | 1576 INSTALL_NATIVE(JSFunction, "BeginPerformSplice", |
1577 observers_begin_perform_splice); | 1577 observers_begin_perform_splice); |
1578 INSTALL_NATIVE(JSFunction, "EndPerformSplice", | 1578 INSTALL_NATIVE(JSFunction, "EndPerformSplice", |
1579 observers_end_perform_splice); | 1579 observers_end_perform_splice); |
1580 INSTALL_NATIVE(JSFunction, "NativeObjectObserve", | 1580 INSTALL_NATIVE(JSFunction, "NativeObjectObserve", |
1581 native_object_observe); | 1581 native_object_observe); |
1582 INSTALL_NATIVE(JSFunction, "NativeObjectGetNotifier", | 1582 INSTALL_NATIVE(JSFunction, "NativeObjectGetNotifier", |
1583 native_object_get_notifier); | 1583 native_object_get_notifier); |
1584 INSTALL_NATIVE(JSFunction, "NativeObjectNotifierPerformChange", | 1584 INSTALL_NATIVE(JSFunction, "NativeObjectNotifierPerformChange", |
1585 native_object_notifier_perform_change); | 1585 native_object_notifier_perform_change); |
| 1586 INSTALL_NATIVE(Symbol, "symbolIterator", iterator_symbol); |
1586 } | 1587 } |
1587 | 1588 |
1588 | 1589 |
1589 void Genesis::InstallExperimentalNativeFunctions() { | 1590 void Genesis::InstallExperimentalNativeFunctions() { |
1590 if (FLAG_harmony_proxies) { | 1591 if (FLAG_harmony_proxies) { |
1591 INSTALL_NATIVE(JSFunction, "DerivedHasTrap", derived_has_trap); | 1592 INSTALL_NATIVE(JSFunction, "DerivedHasTrap", derived_has_trap); |
1592 INSTALL_NATIVE(JSFunction, "DerivedGetTrap", derived_get_trap); | 1593 INSTALL_NATIVE(JSFunction, "DerivedGetTrap", derived_get_trap); |
1593 INSTALL_NATIVE(JSFunction, "DerivedSetTrap", derived_set_trap); | 1594 INSTALL_NATIVE(JSFunction, "DerivedSetTrap", derived_set_trap); |
1594 INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate); | 1595 INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate); |
1595 } | 1596 } |
1596 | |
1597 if (FLAG_harmony_symbols) { | |
1598 INSTALL_NATIVE(Symbol, "symbolIterator", iterator_symbol); | |
1599 } | |
1600 } | 1597 } |
1601 | 1598 |
1602 #undef INSTALL_NATIVE | 1599 #undef INSTALL_NATIVE |
1603 | 1600 |
1604 | 1601 |
1605 Handle<JSFunction> Genesis::InstallInternalArray( | 1602 Handle<JSFunction> Genesis::InstallInternalArray( |
1606 Handle<JSBuiltinsObject> builtins, | 1603 Handle<JSBuiltinsObject> builtins, |
1607 const char* name, | 1604 const char* name, |
1608 ElementsKind elements_kind) { | 1605 ElementsKind elements_kind) { |
1609 // --- I n t e r n a l A r r a y --- | 1606 // --- I n t e r n a l A r r a y --- |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2006 strcmp(ExperimentalNatives::GetScriptName(i).start(), \ | 2003 strcmp(ExperimentalNatives::GetScriptName(i).start(), \ |
2007 "native " file) == 0) { \ | 2004 "native " file) == 0) { \ |
2008 if (!CompileExperimentalBuiltin(isolate(), i)) return false; \ | 2005 if (!CompileExperimentalBuiltin(isolate(), i)) return false; \ |
2009 } | 2006 } |
2010 | 2007 |
2011 | 2008 |
2012 bool Genesis::InstallExperimentalNatives() { | 2009 bool Genesis::InstallExperimentalNatives() { |
2013 for (int i = ExperimentalNatives::GetDebuggerCount(); | 2010 for (int i = ExperimentalNatives::GetDebuggerCount(); |
2014 i < ExperimentalNatives::GetBuiltinsCount(); | 2011 i < ExperimentalNatives::GetBuiltinsCount(); |
2015 i++) { | 2012 i++) { |
2016 INSTALL_EXPERIMENTAL_NATIVE(i, symbols, "symbol.js") | |
2017 INSTALL_EXPERIMENTAL_NATIVE(i, proxies, "proxy.js") | 2013 INSTALL_EXPERIMENTAL_NATIVE(i, proxies, "proxy.js") |
2018 INSTALL_EXPERIMENTAL_NATIVE(i, collections, "collection.js") | 2014 INSTALL_EXPERIMENTAL_NATIVE(i, collections, "collection.js") |
2019 INSTALL_EXPERIMENTAL_NATIVE(i, collections, "collection-iterator.js") | 2015 INSTALL_EXPERIMENTAL_NATIVE(i, collections, "collection-iterator.js") |
2020 INSTALL_EXPERIMENTAL_NATIVE(i, generators, "generator.js") | 2016 INSTALL_EXPERIMENTAL_NATIVE(i, generators, "generator.js") |
2021 INSTALL_EXPERIMENTAL_NATIVE(i, iteration, "array-iterator.js") | 2017 INSTALL_EXPERIMENTAL_NATIVE(i, iteration, "array-iterator.js") |
2022 INSTALL_EXPERIMENTAL_NATIVE(i, iteration, "string-iterator.js") | 2018 INSTALL_EXPERIMENTAL_NATIVE(i, iteration, "string-iterator.js") |
2023 INSTALL_EXPERIMENTAL_NATIVE(i, strings, "harmony-string.js") | 2019 INSTALL_EXPERIMENTAL_NATIVE(i, strings, "harmony-string.js") |
2024 INSTALL_EXPERIMENTAL_NATIVE(i, arrays, "harmony-array.js") | 2020 INSTALL_EXPERIMENTAL_NATIVE(i, arrays, "harmony-array.js") |
2025 } | 2021 } |
2026 | 2022 |
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2693 return from + sizeof(NestingCounterType); | 2689 return from + sizeof(NestingCounterType); |
2694 } | 2690 } |
2695 | 2691 |
2696 | 2692 |
2697 // Called when the top-level V8 mutex is destroyed. | 2693 // Called when the top-level V8 mutex is destroyed. |
2698 void Bootstrapper::FreeThreadResources() { | 2694 void Bootstrapper::FreeThreadResources() { |
2699 ASSERT(!IsActive()); | 2695 ASSERT(!IsActive()); |
2700 } | 2696 } |
2701 | 2697 |
2702 } } // namespace v8::internal | 2698 } } // namespace v8::internal |
OLD | NEW |