From 02fdc4114f719570034d718a14ba8ae0adf87b2d Mon Sep 17 00:00:00 2001 From: "dslomov@chromium.org" Date: Tue, 20 Aug 2013 13:55:52 +0000 Subject: [PATCH] Promote ArrayBuffer, DataView and typed arrays to non-experimental. The primary reason for this change is to bake these guys into the snapshot. Flag definitions (--harmony-typed-arrays, --harmony-array-buffer) are still there so that Blink does not complain, but they are noop and default to true. R=mstarzinger@chromium.org BUG=270527 Committed: https://code.google.com/p/v8/source/detail?r=16137 Committed: https://code.google.com/p/v8/source/detail?r=16228 Review URL: https://codereview.chromium.org/22390008 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16248 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/bootstrapper.cc | 108 +++++++++++++++++++++-------------------------- src/d8.cc | 9 ++-- src/flag-definitions.h | 4 +- test/cctest/cctest.cc | 2 - test/cctest/test-api.cc | 14 ------ test/cctest/test-heap.cc | 6 --- tools/gyp/v8.gyp | 4 +- 7 files changed, 55 insertions(+), 92 deletions(-) diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 82b2320..c69ab75 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -1064,6 +1064,54 @@ void Genesis::InitializeGlobal(Handle inner_global, native_context()->set_json_object(*json_object); } + { // -- A r r a y B u f f e r + Handle array_buffer_fun = + InstallFunction( + global, "ArrayBuffer", JS_ARRAY_BUFFER_TYPE, + JSArrayBuffer::kSizeWithInternalFields, + isolate->initial_object_prototype(), + Builtins::kIllegal, true, true); + native_context()->set_array_buffer_fun(*array_buffer_fun); + } + + { // -- T y p e d A r r a y s + Handle int8_fun = InstallTypedArray("Int8Array", + EXTERNAL_BYTE_ELEMENTS); + native_context()->set_int8_array_fun(*int8_fun); + Handle uint8_fun = InstallTypedArray("Uint8Array", + EXTERNAL_UNSIGNED_BYTE_ELEMENTS); + native_context()->set_uint8_array_fun(*uint8_fun); + Handle int16_fun = InstallTypedArray("Int16Array", + EXTERNAL_SHORT_ELEMENTS); + native_context()->set_int16_array_fun(*int16_fun); + Handle uint16_fun = InstallTypedArray("Uint16Array", + EXTERNAL_UNSIGNED_SHORT_ELEMENTS); + native_context()->set_uint16_array_fun(*uint16_fun); + Handle int32_fun = InstallTypedArray("Int32Array", + EXTERNAL_INT_ELEMENTS); + native_context()->set_int32_array_fun(*int32_fun); + Handle uint32_fun = InstallTypedArray("Uint32Array", + EXTERNAL_UNSIGNED_INT_ELEMENTS); + native_context()->set_uint32_array_fun(*uint32_fun); + Handle float_fun = InstallTypedArray("Float32Array", + EXTERNAL_FLOAT_ELEMENTS); + native_context()->set_float_array_fun(*float_fun); + Handle double_fun = InstallTypedArray("Float64Array", + EXTERNAL_DOUBLE_ELEMENTS); + native_context()->set_double_array_fun(*double_fun); + Handle uint8c_fun = InstallTypedArray("Uint8ClampedArray", + EXTERNAL_PIXEL_ELEMENTS); + native_context()->set_uint8c_array_fun(*uint8c_fun); + + Handle data_view_fun = + InstallFunction( + global, "DataView", JS_DATA_VIEW_TYPE, + JSDataView::kSizeWithInternalFields, + isolate->initial_object_prototype(), + Builtins::kIllegal, true, true); + native_context()->set_data_view_fun(*data_view_fun); + } + { // --- arguments_boilerplate_ // Make sure we can recognize argument objects at runtime. // This is done by introducing an anonymous function with @@ -1331,56 +1379,6 @@ void Genesis::InitializeExperimentalGlobal() { } } - if (FLAG_harmony_array_buffer) { - // -- A r r a y B u f f e r - Handle array_buffer_fun = - InstallFunction( - global, "ArrayBuffer", JS_ARRAY_BUFFER_TYPE, - JSArrayBuffer::kSizeWithInternalFields, - isolate()->initial_object_prototype(), - Builtins::kIllegal, true, true); - native_context()->set_array_buffer_fun(*array_buffer_fun); - } - - if (FLAG_harmony_typed_arrays) { - // -- T y p e d A r r a y s - Handle int8_fun = InstallTypedArray("Int8Array", - EXTERNAL_BYTE_ELEMENTS); - native_context()->set_int8_array_fun(*int8_fun); - Handle uint8_fun = InstallTypedArray("Uint8Array", - EXTERNAL_UNSIGNED_BYTE_ELEMENTS); - native_context()->set_uint8_array_fun(*uint8_fun); - Handle int16_fun = InstallTypedArray("Int16Array", - EXTERNAL_SHORT_ELEMENTS); - native_context()->set_int16_array_fun(*int16_fun); - Handle uint16_fun = InstallTypedArray("Uint16Array", - EXTERNAL_UNSIGNED_SHORT_ELEMENTS); - native_context()->set_uint16_array_fun(*uint16_fun); - Handle int32_fun = InstallTypedArray("Int32Array", - EXTERNAL_INT_ELEMENTS); - native_context()->set_int32_array_fun(*int32_fun); - Handle uint32_fun = InstallTypedArray("Uint32Array", - EXTERNAL_UNSIGNED_INT_ELEMENTS); - native_context()->set_uint32_array_fun(*uint32_fun); - Handle float_fun = InstallTypedArray("Float32Array", - EXTERNAL_FLOAT_ELEMENTS); - native_context()->set_float_array_fun(*float_fun); - Handle double_fun = InstallTypedArray("Float64Array", - EXTERNAL_DOUBLE_ELEMENTS); - native_context()->set_double_array_fun(*double_fun); - Handle uint8c_fun = InstallTypedArray("Uint8ClampedArray", - EXTERNAL_PIXEL_ELEMENTS); - native_context()->set_uint8c_array_fun(*uint8c_fun); - - Handle data_view_fun = - InstallFunction( - global, "DataView", JS_DATA_VIEW_TYPE, - JSDataView::kSizeWithInternalFields, - isolate()->initial_object_prototype(), - Builtins::kIllegal, true, true); - native_context()->set_data_view_fun(*data_view_fun); - } - if (FLAG_harmony_generators) { // Create generator meta-objects and install them on the builtins object. Handle builtins(native_context()->builtins()); @@ -2060,16 +2058,6 @@ bool Genesis::InstallExperimentalNatives() { "native object-observe.js") == 0) { if (!CompileExperimentalBuiltin(isolate(), i)) return false; } - if (FLAG_harmony_array_buffer && - strcmp(ExperimentalNatives::GetScriptName(i).start(), - "native arraybuffer.js") == 0) { - if (!CompileExperimentalBuiltin(isolate(), i)) return false; - } - if (FLAG_harmony_typed_arrays && - strcmp(ExperimentalNatives::GetScriptName(i).start(), - "native typedarray.js") == 0) { - if (!CompileExperimentalBuiltin(isolate(), i)) return false; - } if (FLAG_harmony_generators && strcmp(ExperimentalNatives::GetScriptName(i).start(), "native generator.js") == 0) { diff --git a/src/d8.cc b/src/d8.cc index c7b66c2..fe4d744 100644 --- a/src/d8.cc +++ b/src/d8.cc @@ -1556,11 +1556,10 @@ int Shell::RunMain(Isolate* isolate, int argc, char* argv[]) { #ifdef V8_SHARED static void SetStandaloneFlagsViaCommandLine() { - int fake_argc = 3; - char **fake_argv = new char*[3]; + int fake_argc = 2; + char **fake_argv = new char*[2]; fake_argv[0] = NULL; - fake_argv[1] = strdup("--harmony-typed-arrays"); - fake_argv[2] = strdup("--trace-hydrogen-file=hydrogen.cfg"); + fake_argv[1] = strdup("--trace-hydrogen-file=hydrogen.cfg"); v8::V8::SetFlagsFromCommandLine(&fake_argc, fake_argv, false); free(fake_argv[1]); delete[] fake_argv; @@ -1649,8 +1648,6 @@ int Shell::Main(int argc, char* argv[]) { if (!SetOptions(argc, argv)) return 1; v8::V8::InitializeICU(); #ifndef V8_SHARED - i::FLAG_harmony_array_buffer = true; - i::FLAG_harmony_typed_arrays = true; i::FLAG_trace_hydrogen_file = "hydrogen.cfg"; #else SetStandaloneFlagsViaCommandLine(); diff --git a/src/flag-definitions.h b/src/flag-definitions.h index 836cd90..f5f2ef3 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -164,9 +164,9 @@ DEFINE_bool(harmony_collections, false, "enable harmony collections (sets, maps, and weak maps)") DEFINE_bool(harmony_observation, false, "enable harmony object observation (implies harmony collections") -DEFINE_bool(harmony_typed_arrays, false, +DEFINE_bool(harmony_typed_arrays, true, "enable harmony typed arrays") -DEFINE_bool(harmony_array_buffer, false, +DEFINE_bool(harmony_array_buffer, true, "enable harmony array buffer") DEFINE_implication(harmony_typed_arrays, harmony_array_buffer) DEFINE_bool(harmony_generators, false, "enable harmony generators") diff --git a/test/cctest/cctest.cc b/test/cctest/cctest.cc index d9e7a0e..b206966 100644 --- a/test/cctest/cctest.cc +++ b/test/cctest/cctest.cc @@ -115,8 +115,6 @@ static void SuggestTestHarness(int tests) { int main(int argc, char* argv[]) { v8::internal::FlagList::SetFlagsFromCommandLine(&argc, argv, true); - v8::internal::FLAG_harmony_array_buffer = true; - v8::internal::FLAG_harmony_typed_arrays = true; CcTestArrayBufferAllocator array_buffer_allocator; v8::V8::SetArrayBufferAllocator(&array_buffer_allocator); diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index 6c71de4..61bdc11 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -2682,9 +2682,6 @@ static void CheckInternalFieldsAreZero(v8::Handle value) { THREADED_TEST(ArrayBuffer_ApiInternalToExternal) { - i::FLAG_harmony_array_buffer = true; - i::FLAG_harmony_typed_arrays = true; - LocalContext env; v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope handle_scope(isolate); @@ -2721,9 +2718,6 @@ THREADED_TEST(ArrayBuffer_ApiInternalToExternal) { THREADED_TEST(ArrayBuffer_JSInternalToExternal) { - i::FLAG_harmony_array_buffer = true; - i::FLAG_harmony_typed_arrays = true; - LocalContext env; v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope handle_scope(isolate); @@ -2766,9 +2760,6 @@ THREADED_TEST(ArrayBuffer_JSInternalToExternal) { THREADED_TEST(ArrayBuffer_External) { - i::FLAG_harmony_array_buffer = true; - i::FLAG_harmony_typed_arrays = true; - LocalContext env; v8::Isolate* isolate = env->GetIsolate(); v8::HandleScope handle_scope(isolate); @@ -12958,9 +12949,6 @@ TEST(SetFunctionEntryHook) { // Experimental natives are compiled during snapshot deserialization. // This test breaks because InstallGetter (function from snapshot that // only gets called from experimental natives) is compiled with entry hooks. - i::FLAG_harmony_typed_arrays = false; - i::FLAG_harmony_array_buffer = false; - i::FLAG_allow_natives_syntax = true; i::FLAG_use_inlining = false; @@ -16157,8 +16145,6 @@ THREADED_TEST(DataView) { #define IS_ARRAY_BUFFER_VIEW_TEST(View) \ THREADED_TEST(Is##View) { \ - i::FLAG_harmony_array_buffer = true; \ - i::FLAG_harmony_typed_arrays = true; \ LocalContext env; \ v8::Isolate* isolate = env->GetIsolate(); \ v8::HandleScope handle_scope(isolate); \ diff --git a/test/cctest/test-heap.cc b/test/cctest/test-heap.cc index df799bd..649e0f6 100644 --- a/test/cctest/test-heap.cc +++ b/test/cctest/test-heap.cc @@ -3068,12 +3068,6 @@ TEST(Regress169209) { i::FLAG_allow_natives_syntax = true; i::FLAG_flush_code_incrementally = true; - // Experimental natives are compiled during snapshot deserialization. - // This test breaks because heap layout changes in a way that closure - // is visited before shared function info. - i::FLAG_harmony_typed_arrays = false; - i::FLAG_harmony_array_buffer = false; - // Disable loading the i18n extension which breaks the assumptions of this // test about the heap layout. i::FLAG_enable_i18n = false; diff --git a/tools/gyp/v8.gyp b/tools/gyp/v8.gyp index 45a0968..a7e89db 100644 --- a/tools/gyp/v8.gyp +++ b/tools/gyp/v8.gyp @@ -942,6 +942,8 @@ '../../src/date.js', '../../src/json.js', '../../src/regexp.js', + '../../src/arraybuffer.js', + '../../src/typedarray.js', '../../src/macros.py', ], 'experimental_library_files': [ @@ -950,8 +952,6 @@ '../../src/proxy.js', '../../src/collection.js', '../../src/object-observe.js', - '../../src/arraybuffer.js', - '../../src/typedarray.js', '../../src/generator.js', '../../src/array-iterator.js', '../../src/harmony-string.js', -- 2.7.4