Chromium Code Reviews| 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/api-natives.h" | 8 #include "src/api-natives.h" |
| 9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
| 10 #include "src/extensions/externalize-string-extension.h" | 10 #include "src/extensions/externalize-string-extension.h" |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) | 182 HARMONY_INPROGRESS(DECLARE_FEATURE_INITIALIZATION) |
| 183 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) | 183 HARMONY_STAGED(DECLARE_FEATURE_INITIALIZATION) |
| 184 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) | 184 HARMONY_SHIPPING(DECLARE_FEATURE_INITIALIZATION) |
| 185 #undef DECLARE_FEATURE_INITIALIZATION | 185 #undef DECLARE_FEATURE_INITIALIZATION |
| 186 | 186 |
| 187 Handle<JSFunction> InstallInternalArray(Handle<JSBuiltinsObject> builtins, | 187 Handle<JSFunction> InstallInternalArray(Handle<JSBuiltinsObject> builtins, |
| 188 const char* name, | 188 const char* name, |
| 189 ElementsKind elements_kind); | 189 ElementsKind elements_kind); |
| 190 bool InstallNatives(); | 190 bool InstallNatives(); |
| 191 | 191 |
| 192 void InstallTypedArray( | 192 void InstallTypedArray(const char* name, ElementsKind elements_kind, |
| 193 const char* name, | 193 Handle<JSFunction>* fun, Handle<Map>* external_map, |
| 194 ElementsKind elements_kind, | 194 bool is_shared); |
|
Jarin
2015/04/16 14:55:28
Could you introduce an enum for the various places
binji
2015/04/16 21:00:33
Done.
| |
| 195 Handle<JSFunction>* fun, | |
| 196 Handle<Map>* external_map); | |
| 197 bool InstallExperimentalNatives(); | 195 bool InstallExperimentalNatives(); |
| 198 void InstallBuiltinFunctionIds(); | 196 void InstallBuiltinFunctionIds(); |
| 199 void InstallJSFunctionResultCaches(); | 197 void InstallJSFunctionResultCaches(); |
| 200 void InitializeNormalizedMapCaches(); | 198 void InitializeNormalizedMapCaches(); |
| 201 | 199 |
| 202 enum ExtensionTraversalState { | 200 enum ExtensionTraversalState { |
| 203 UNVISITED, VISITED, INSTALLED | 201 UNVISITED, VISITED, INSTALLED |
| 204 }; | 202 }; |
| 205 | 203 |
| 206 class ExtensionStates { | 204 class ExtensionStates { |
| (...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1146 Handle<JSFunction> array_buffer_fun = | 1144 Handle<JSFunction> array_buffer_fun = |
| 1147 InstallFunction( | 1145 InstallFunction( |
| 1148 global, "ArrayBuffer", JS_ARRAY_BUFFER_TYPE, | 1146 global, "ArrayBuffer", JS_ARRAY_BUFFER_TYPE, |
| 1149 JSArrayBuffer::kSizeWithInternalFields, | 1147 JSArrayBuffer::kSizeWithInternalFields, |
| 1150 isolate->initial_object_prototype(), | 1148 isolate->initial_object_prototype(), |
| 1151 Builtins::kIllegal); | 1149 Builtins::kIllegal); |
| 1152 native_context()->set_array_buffer_fun(*array_buffer_fun); | 1150 native_context()->set_array_buffer_fun(*array_buffer_fun); |
| 1153 } | 1151 } |
| 1154 | 1152 |
| 1155 { // -- T y p e d A r r a y s | 1153 { // -- T y p e d A r r a y s |
| 1156 #define INSTALL_TYPED_ARRAY(Type, type, TYPE, ctype, size) \ | 1154 #define INSTALL_TYPED_ARRAY(Type, type, TYPE, ctype, size) \ |
| 1157 { \ | 1155 { \ |
| 1158 Handle<JSFunction> fun; \ | 1156 Handle<JSFunction> fun; \ |
| 1159 Handle<Map> external_map; \ | 1157 Handle<Map> external_map; \ |
| 1160 InstallTypedArray(#Type "Array", \ | 1158 InstallTypedArray(#Type "Array", TYPE##_ELEMENTS, &fun, &external_map, \ |
| 1161 TYPE##_ELEMENTS, \ | 1159 false); \ |
| 1162 &fun, \ | 1160 native_context()->set_##type##_array_fun(*fun); \ |
| 1163 &external_map); \ | 1161 native_context()->set_##type##_array_external_map(*external_map); \ |
| 1164 native_context()->set_##type##_array_fun(*fun); \ | 1162 } |
| 1165 native_context()->set_##type##_array_external_map(*external_map); \ | |
| 1166 } | |
| 1167 TYPED_ARRAYS(INSTALL_TYPED_ARRAY) | 1163 TYPED_ARRAYS(INSTALL_TYPED_ARRAY) |
| 1168 #undef INSTALL_TYPED_ARRAY | 1164 #undef INSTALL_TYPED_ARRAY |
| 1169 | 1165 |
| 1170 Handle<JSFunction> data_view_fun = | 1166 Handle<JSFunction> data_view_fun = |
| 1171 InstallFunction( | 1167 InstallFunction( |
| 1172 global, "DataView", JS_DATA_VIEW_TYPE, | 1168 global, "DataView", JS_DATA_VIEW_TYPE, |
| 1173 JSDataView::kSizeWithInternalFields, | 1169 JSDataView::kSizeWithInternalFields, |
| 1174 isolate->initial_object_prototype(), | 1170 isolate->initial_object_prototype(), |
| 1175 Builtins::kIllegal); | 1171 Builtins::kIllegal); |
| 1176 native_context()->set_data_view_fun(*data_view_fun); | 1172 native_context()->set_data_view_fun(*data_view_fun); |
| 1177 } | 1173 } |
| 1178 | 1174 |
| 1175 { // -- S h a r e d A r r a y B u f f e r | |
| 1176 Handle<JSFunction> shared_array_buffer_fun = InstallFunction( | |
| 1177 global, "SharedArrayBuffer", JS_SHARED_ARRAY_BUFFER_TYPE, | |
| 1178 JSArrayBuffer::kSizeWithInternalFields, | |
| 1179 isolate->initial_object_prototype(), Builtins::kIllegal); | |
| 1180 native_context()->set_shared_array_buffer_fun(*shared_array_buffer_fun); | |
| 1181 } | |
| 1182 | |
| 1183 { // -- S h a r e d T y p e d A r r a y s | |
| 1184 #define INSTALL_SHARED_TYPED_ARRAY(Type, type, TYPE, ctype, size) \ | |
| 1185 { \ | |
| 1186 Handle<JSFunction> fun; \ | |
| 1187 Handle<Map> external_map; \ | |
| 1188 InstallTypedArray("Shared" #Type "Array", TYPE##_ELEMENTS, &fun, \ | |
| 1189 &external_map, true); \ | |
| 1190 native_context()->set_shared_##type##_array_fun(*fun); \ | |
| 1191 native_context()->set_shared_##type##_array_external_map(*external_map); \ | |
| 1192 } | |
| 1193 TYPED_ARRAYS(INSTALL_SHARED_TYPED_ARRAY) | |
| 1194 #undef INSTALL_SHARED_TYPED_ARRAY | |
| 1195 } | |
| 1196 | |
| 1179 // -- M a p | 1197 // -- M a p |
| 1180 InstallFunction(global, "Map", JS_MAP_TYPE, JSMap::kSize, | 1198 InstallFunction(global, "Map", JS_MAP_TYPE, JSMap::kSize, |
| 1181 isolate->initial_object_prototype(), Builtins::kIllegal); | 1199 isolate->initial_object_prototype(), Builtins::kIllegal); |
| 1182 | 1200 |
| 1183 // -- S e t | 1201 // -- S e t |
| 1184 InstallFunction(global, "Set", JS_SET_TYPE, JSSet::kSize, | 1202 InstallFunction(global, "Set", JS_SET_TYPE, JSSet::kSize, |
| 1185 isolate->initial_object_prototype(), Builtins::kIllegal); | 1203 isolate->initial_object_prototype(), Builtins::kIllegal); |
| 1186 | 1204 |
| 1187 { // Set up the iterator result object | 1205 { // Set up the iterator result object |
| 1188 STATIC_ASSERT(JSGeneratorObject::kResultPropertyCount == 2); | 1206 STATIC_ASSERT(JSGeneratorObject::kResultPropertyCount == 2); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1364 native_context()->set_call_as_constructor_delegate(*delegate); | 1382 native_context()->set_call_as_constructor_delegate(*delegate); |
| 1365 delegate->shared()->DontAdaptArguments(); | 1383 delegate->shared()->DontAdaptArguments(); |
| 1366 } | 1384 } |
| 1367 | 1385 |
| 1368 // Initialize the embedder data slot. | 1386 // Initialize the embedder data slot. |
| 1369 Handle<FixedArray> embedder_data = factory->NewFixedArray(3); | 1387 Handle<FixedArray> embedder_data = factory->NewFixedArray(3); |
| 1370 native_context()->set_embedder_data(*embedder_data); | 1388 native_context()->set_embedder_data(*embedder_data); |
| 1371 } | 1389 } |
| 1372 | 1390 |
| 1373 | 1391 |
| 1374 void Genesis::InstallTypedArray( | 1392 void Genesis::InstallTypedArray(const char* name, ElementsKind elements_kind, |
| 1375 const char* name, | 1393 Handle<JSFunction>* fun, |
| 1376 ElementsKind elements_kind, | 1394 Handle<Map>* external_map, bool is_shared) { |
| 1377 Handle<JSFunction>* fun, | 1395 InstanceType type = |
| 1378 Handle<Map>* external_map) { | 1396 is_shared ? JS_SHARED_TYPED_ARRAY_TYPE : JS_TYPED_ARRAY_TYPE; |
| 1379 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); | 1397 Handle<JSObject> global = Handle<JSObject>(native_context()->global_object()); |
| 1380 Handle<JSFunction> result = InstallFunction( | 1398 Handle<JSFunction> result = InstallFunction( |
| 1381 global, name, JS_TYPED_ARRAY_TYPE, JSTypedArray::kSize, | 1399 global, name, type, JSTypedArray::kSize, |
| 1382 isolate()->initial_object_prototype(), Builtins::kIllegal); | 1400 isolate()->initial_object_prototype(), Builtins::kIllegal); |
| 1383 | 1401 |
| 1384 Handle<Map> initial_map = isolate()->factory()->NewMap( | 1402 Handle<Map> initial_map = isolate()->factory()->NewMap( |
| 1385 JS_TYPED_ARRAY_TYPE, | 1403 type, JSTypedArray::kSizeWithInternalFields, elements_kind); |
| 1386 JSTypedArray::kSizeWithInternalFields, | |
| 1387 elements_kind); | |
| 1388 JSFunction::SetInitialMap(result, initial_map, | 1404 JSFunction::SetInitialMap(result, initial_map, |
| 1389 handle(initial_map->prototype(), isolate())); | 1405 handle(initial_map->prototype(), isolate())); |
| 1390 *fun = result; | 1406 *fun = result; |
| 1391 | 1407 |
| 1392 ElementsKind external_kind = GetNextTransitionElementsKind(elements_kind); | 1408 ElementsKind external_kind = GetNextTransitionElementsKind(elements_kind); |
| 1393 *external_map = Map::AsElementsKind(initial_map, external_kind); | 1409 *external_map = Map::AsElementsKind(initial_map, external_kind); |
| 1394 } | 1410 } |
| 1395 | 1411 |
| 1396 | 1412 |
| 1397 void Genesis::InitializeExperimentalGlobal() { | 1413 void Genesis::InitializeExperimentalGlobal() { |
| (...skipping 1565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2963 return from + sizeof(NestingCounterType); | 2979 return from + sizeof(NestingCounterType); |
| 2964 } | 2980 } |
| 2965 | 2981 |
| 2966 | 2982 |
| 2967 // Called when the top-level V8 mutex is destroyed. | 2983 // Called when the top-level V8 mutex is destroyed. |
| 2968 void Bootstrapper::FreeThreadResources() { | 2984 void Bootstrapper::FreeThreadResources() { |
| 2969 DCHECK(!IsActive()); | 2985 DCHECK(!IsActive()); |
| 2970 } | 2986 } |
| 2971 | 2987 |
| 2972 } } // namespace v8::internal | 2988 } } // namespace v8::internal |
| OLD | NEW |