Index: src/bootstrapper.cc |
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc |
index bde867442585bb44732512edbae9b4342f69014e..47f9ff42cb9e57f013708c8518087021282edeb9 100644 |
--- a/src/bootstrapper.cc |
+++ b/src/bootstrapper.cc |
@@ -197,6 +197,8 @@ |
Handle<JSFunction> empty_function, |
ContextType context_type); |
void InitializeExperimentalGlobal(); |
+ // Typed arrays are not serializable and have to initialized afterwards. |
+ bool InitializeBuiltinTypedArrays(); |
// Depending on the situation, expose and/or get rid of the utils object. |
void ConfigureUtilsObject(ContextType context_type); |
@@ -1784,6 +1786,26 @@ |
SharedFlag::kNotShared); |
return isolate->factory()->NewJSTypedArray(type, buffer, 0, num_elements, |
TENURED); |
+} |
+ |
+ |
+bool Genesis::InitializeBuiltinTypedArrays() { |
+ HandleScope scope(isolate()); |
+ const size_t num_elements = 2; |
+ double* data = NULL; |
+ Handle<JSTypedArray> rempio2result = |
+ CreateTypedArray(isolate(), kExternalFloat64Array, num_elements, &data); |
+ for (size_t i = 0; i < num_elements; i++) data[i] = 0; |
+ |
+ Handle<JSObject> utils = |
+ Handle<JSObject>::cast(isolate()->natives_utils_object()); |
+ Handle<String> name_string = isolate()->factory()->NewStringFromAsciiChecked( |
+ "InitializeBuiltinTypedArrays"); |
+ Handle<Object> fun = JSObject::GetDataProperty(utils, name_string); |
+ Handle<Object> receiver = isolate()->factory()->undefined_value(); |
+ Handle<Object> args[] = {utils, rempio2result}; |
+ return !Execution::Call(isolate(), fun, receiver, arraysize(args), args) |
+ .is_null(); |
} |
@@ -3231,6 +3253,7 @@ |
// snapshot as we should be able to turn them off at runtime. Re-installing |
// them after they have already been deserialized would also fail. |
if (context_type == FULL_CONTEXT) { |
+ if (!InitializeBuiltinTypedArrays()) return; |
if (!isolate->serializer_enabled()) { |
InitializeExperimentalGlobal(); |
if (!InstallExperimentalNatives()) return; |
@@ -3243,6 +3266,7 @@ |
// for each new context. |
} else if (context_type == DEBUG_CONTEXT) { |
DCHECK(!isolate->serializer_enabled()); |
+ if (!InitializeBuiltinTypedArrays()) return; |
InitializeExperimentalGlobal(); |
if (!InstallDebuggerNatives()) return; |
} |