From d7fe3b83f5dfa997f0c8a29436a22b999dc49a76 Mon Sep 17 00:00:00 2001 From: yangguo Date: Mon, 13 Apr 2015 22:58:25 -0700 Subject: [PATCH] Revert of Revert of Wrap typed array implementations in functions. (patchset #1 id:1 of https://codereview.chromium.org/1086683002/) Reason for revert: I don't think this is the cause. Original issue's description: > Revert of Wrap typed array implementations in functions. (patchset #1 id:1 of https://codereview.chromium.org/1082703003/) > > Reason for revert: > [Sheriff] Flaky nosnap failures: > http://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20arm64%20-%20sim%20-%20nosnap%20-%20debug%20-%201/builds/1720 > http://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20nosnap%20-%20debug/builds/3312 > http://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20nosnap%20-%20debug/builds/3313 > > Original issue's description: > > Wrap typed array implementations in functions. > > > > R=mvstanton@chromium.org > > > > Committed: https://crrev.com/6fc394a15614b74776f9bbeeb0486f430bdc8597 > > Cr-Commit-Position: refs/heads/master@{#27784} > > TBR=mvstanton@chromium.org,yangguo@chromium.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > > Committed: https://crrev.com/8e3fa7adf20f4f9c9125076a878d601eee7c9f35 > Cr-Commit-Position: refs/heads/master@{#27789} TBR=mvstanton@chromium.org,machenbach@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1083013002 Cr-Commit-Position: refs/heads/master@{#27803} --- src/array-iterator.js | 106 ++++++++++++++++++++--------------------- src/arraybuffer.js | 44 +++++++++-------- src/bootstrapper.cc | 2 +- src/string-iterator.js | 6 +-- src/typedarray.js | 79 ++++++++++++++---------------- 5 files changed, 116 insertions(+), 121 deletions(-) diff --git a/src/array-iterator.js b/src/array-iterator.js index 8e4f5c7bbc6..95635cd4bf7 100644 --- a/src/array-iterator.js +++ b/src/array-iterator.js @@ -2,13 +2,35 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +var $iteratorCreateResultObject; +var $arrayValues; + +(function() { + "use strict"; +%CheckIsBootstrapping(); -// This file relies on the fact that the following declaration has been made -// in runtime.js: -// var $Array = global.Array; +var GlobalArray = global.Array; +var GlobalObject = global.Object; +macro TYPED_ARRAYS(FUNCTION) + FUNCTION(Uint8Array) + FUNCTION(Int8Array) + FUNCTION(Uint16Array) + FUNCTION(Int16Array) + FUNCTION(Uint32Array) + FUNCTION(Int32Array) + FUNCTION(Float32Array) + FUNCTION(Float64Array) + FUNCTION(Uint8ClampedArray) +endmacro + +macro COPY_FROM_GLOBAL(NAME) + var GlobalNAME = global.NAME; +endmacro + +TYPED_ARRAYS(COPY_FROM_GLOBAL) var arrayIteratorObjectSymbol = GLOBAL_PRIVATE("ArrayIterator#object"); var arrayIteratorNextIndexSymbol = GLOBAL_PRIVATE("ArrayIterator#next"); @@ -100,60 +122,38 @@ function ArrayKeys() { } -function SetUpArrayIterator() { - %CheckIsBootstrapping(); - - %FunctionSetPrototype(ArrayIterator, new $Object()); - %FunctionSetInstanceClassName(ArrayIterator, 'Array Iterator'); - - InstallFunctions(ArrayIterator.prototype, DONT_ENUM, [ - 'next', ArrayIteratorNext - ]); - %FunctionSetName(ArrayIteratorIterator, '[Symbol.iterator]'); - %AddNamedProperty(ArrayIterator.prototype, symbolIterator, - ArrayIteratorIterator, DONT_ENUM); - %AddNamedProperty(ArrayIterator.prototype, symbolToStringTag, - "Array Iterator", READ_ONLY | DONT_ENUM); -} -SetUpArrayIterator(); - - -function ExtendArrayPrototype() { - %CheckIsBootstrapping(); +%FunctionSetPrototype(ArrayIterator, new GlobalObject()); +%FunctionSetInstanceClassName(ArrayIterator, 'Array Iterator'); - InstallFunctions($Array.prototype, DONT_ENUM, [ - // No 'values' since it breaks webcompat: http://crbug.com/409858 - 'entries', ArrayEntries, - 'keys', ArrayKeys - ]); +InstallFunctions(ArrayIterator.prototype, DONT_ENUM, [ + 'next', ArrayIteratorNext +]); +%FunctionSetName(ArrayIteratorIterator, '[Symbol.iterator]'); +%AddNamedProperty(ArrayIterator.prototype, symbolIterator, + ArrayIteratorIterator, DONT_ENUM); +%AddNamedProperty(ArrayIterator.prototype, symbolToStringTag, + "Array Iterator", READ_ONLY | DONT_ENUM); - %AddNamedProperty($Array.prototype, symbolIterator, ArrayValues, DONT_ENUM); -} -ExtendArrayPrototype(); +InstallFunctions(GlobalArray.prototype, DONT_ENUM, [ + // No 'values' since it breaks webcompat: http://crbug.com/409858 + 'entries', ArrayEntries, + 'keys', ArrayKeys +]); - -function ExtendTypedArrayPrototypes() { - %CheckIsBootstrapping(); - -macro TYPED_ARRAYS(FUNCTION) - FUNCTION(Uint8Array) - FUNCTION(Int8Array) - FUNCTION(Uint16Array) - FUNCTION(Int16Array) - FUNCTION(Uint32Array) - FUNCTION(Int32Array) - FUNCTION(Float32Array) - FUNCTION(Float64Array) - FUNCTION(Uint8ClampedArray) -endmacro +%AddNamedProperty(GlobalArray.prototype, symbolIterator, ArrayValues, + DONT_ENUM); macro EXTEND_TYPED_ARRAY(NAME) - %AddNamedProperty($NAME.prototype, 'entries', ArrayEntries, DONT_ENUM); - %AddNamedProperty($NAME.prototype, 'values', ArrayValues, DONT_ENUM); - %AddNamedProperty($NAME.prototype, 'keys', ArrayKeys, DONT_ENUM); - %AddNamedProperty($NAME.prototype, symbolIterator, ArrayValues, DONT_ENUM); + %AddNamedProperty(GlobalNAME.prototype, 'entries', ArrayEntries, DONT_ENUM); + %AddNamedProperty(GlobalNAME.prototype, 'values', ArrayValues, DONT_ENUM); + %AddNamedProperty(GlobalNAME.prototype, 'keys', ArrayKeys, DONT_ENUM); + %AddNamedProperty(GlobalNAME.prototype, symbolIterator, ArrayValues, + DONT_ENUM); endmacro - TYPED_ARRAYS(EXTEND_TYPED_ARRAY) -} -ExtendTypedArrayPrototypes(); +TYPED_ARRAYS(EXTEND_TYPED_ARRAY) + +$iteratorCreateResultObject = CreateIteratorResultObject; +$arrayValues = ArrayValues; + +})(); diff --git a/src/arraybuffer.js b/src/arraybuffer.js index e4d332b060c..86b13927aa4 100644 --- a/src/arraybuffer.js +++ b/src/arraybuffer.js @@ -2,9 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +(function() { + "use strict"; -var $ArrayBuffer = global.ArrayBuffer; +%CheckIsBootstrapping(); + +var GlobalArrayBuffer = global.ArrayBuffer; +var GlobalObject = global.Object; // ------------------------------------------------------------------- @@ -56,7 +61,7 @@ function ArrayBufferSlice(start, end) { } var newLen = fin - first; // TODO(dslomov): implement inheritance - var result = new $ArrayBuffer(newLen); + var result = new GlobalArrayBuffer(newLen); %ArrayBufferSliceImpl(this, result, first); return result; @@ -66,29 +71,26 @@ function ArrayBufferIsViewJS(obj) { return %ArrayBufferIsView(obj); } -function SetUpArrayBuffer() { - %CheckIsBootstrapping(); - // Set up the ArrayBuffer constructor function. - %SetCode($ArrayBuffer, ArrayBufferConstructor); - %FunctionSetPrototype($ArrayBuffer, new $Object()); +// Set up the ArrayBuffer constructor function. +%SetCode(GlobalArrayBuffer, ArrayBufferConstructor); +%FunctionSetPrototype(GlobalArrayBuffer, new GlobalObject()); - // Set up the constructor property on the ArrayBuffer prototype object. - %AddNamedProperty( - $ArrayBuffer.prototype, "constructor", $ArrayBuffer, DONT_ENUM); +// Set up the constructor property on the ArrayBuffer prototype object. +%AddNamedProperty( + GlobalArrayBuffer.prototype, "constructor", GlobalArrayBuffer, DONT_ENUM); - %AddNamedProperty($ArrayBuffer.prototype, - symbolToStringTag, "ArrayBuffer", DONT_ENUM | READ_ONLY); +%AddNamedProperty(GlobalArrayBuffer.prototype, + symbolToStringTag, "ArrayBuffer", DONT_ENUM | READ_ONLY); - InstallGetter($ArrayBuffer.prototype, "byteLength", ArrayBufferGetByteLen); +InstallGetter(GlobalArrayBuffer.prototype, "byteLength", ArrayBufferGetByteLen); - InstallFunctions($ArrayBuffer, DONT_ENUM, [ - "isView", ArrayBufferIsViewJS - ]); +InstallFunctions(GlobalArrayBuffer, DONT_ENUM, [ + "isView", ArrayBufferIsViewJS +]); - InstallFunctions($ArrayBuffer.prototype, DONT_ENUM, [ - "slice", ArrayBufferSlice - ]); -} +InstallFunctions(GlobalArrayBuffer.prototype, DONT_ENUM, [ + "slice", ArrayBufferSlice +]); -SetUpArrayBuffer(); +})(); diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 4bf4d39ff41..d44f8243a98 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -1566,7 +1566,7 @@ void Genesis::InstallNativeFunctions() { native_object_get_notifier); INSTALL_NATIVE(JSFunction, "NativeObjectNotifierPerformChange", native_object_notifier_perform_change); - INSTALL_NATIVE(JSFunction, "ArrayValues", array_values_iterator); + INSTALL_NATIVE(JSFunction, "$arrayValues", array_values_iterator); } diff --git a/src/string-iterator.js b/src/string-iterator.js index 8d72b81e8be..dea81e57254 100644 --- a/src/string-iterator.js +++ b/src/string-iterator.js @@ -48,7 +48,7 @@ function StringIteratorNext() { var s = GET_PRIVATE(iterator, stringIteratorIteratedStringSymbol); if (IS_UNDEFINED(s)) { - return CreateIteratorResultObject(UNDEFINED, true); + return $iteratorCreateResultObject(UNDEFINED, true); } var position = GET_PRIVATE(iterator, stringIteratorNextIndexSymbol); @@ -57,7 +57,7 @@ function StringIteratorNext() { if (position >= length) { SET_PRIVATE(iterator, stringIteratorIteratedStringSymbol, UNDEFINED); - return CreateIteratorResultObject(UNDEFINED, true); + return $iteratorCreateResultObject(UNDEFINED, true); } var first = %_StringCharCodeAt(s, position); @@ -74,7 +74,7 @@ function StringIteratorNext() { SET_PRIVATE(iterator, stringIteratorNextIndexSymbol, position); - return CreateIteratorResultObject(resultString, false); + return $iteratorCreateResultObject(resultString, false); } diff --git a/src/typedarray.js b/src/typedarray.js index 1faa051cce7..0a73be941f2 100644 --- a/src/typedarray.js +++ b/src/typedarray.js @@ -2,13 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +(function() { + "use strict"; -// This file relies on the fact that the following declaration has been made -// in runtime.js: -// var $Array = global.Array; -var $ArrayBuffer = global.ArrayBuffer; +%CheckIsBootstrapping(); +var GlobalArray = global.Array; +var GlobalArrayBuffer = global.ArrayBuffer; // --------------- Typed Arrays --------------------- macro TYPED_ARRAYS(FUNCTION) @@ -78,7 +79,7 @@ function NAMEConstructByLength(obj, length) { } var byteLength = l * ELEMENT_SIZE; if (byteLength > %_TypedArrayMaxSizeInHeap()) { - var buffer = new $ArrayBuffer(byteLength); + var buffer = new GlobalArrayBuffer(byteLength); %_TypedArrayInitialize(obj, ARRAY_ID, buffer, 0, byteLength); } else { %_TypedArrayInitialize(obj, ARRAY_ID, null, 0, byteLength); @@ -243,7 +244,7 @@ function TypedArraySetFromOverlappingTypedArray(target, source, offset) { } var rightIndex = CopyRightPart(); - var temp = new $Array(rightIndex + 1 - leftIndex); + var temp = new GlobalArray(rightIndex + 1 - leftIndex); for (var i = leftIndex; i <= rightIndex; i++) { temp[i - leftIndex] = source[i]; } @@ -300,7 +301,6 @@ function TypedArrayGetToStringTag() { // ------------------------------------------------------------------- -function SetupTypedArrays() { macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) %CheckIsBootstrapping(); %SetCode(global.NAME, NAMEConstructor); @@ -329,9 +329,6 @@ macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) endmacro TYPED_ARRAYS(SETUP_TYPED_ARRAY) -} - -SetupTypedArrays(); // --------------------------- DataView ----------------------------- @@ -439,47 +436,43 @@ endmacro DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER) -function SetupDataView() { - %CheckIsBootstrapping(); +// Setup the DataView constructor. +%SetCode($DataView, DataViewConstructor); +%FunctionSetPrototype($DataView, new $Object); - // Setup the DataView constructor. - %SetCode($DataView, DataViewConstructor); - %FunctionSetPrototype($DataView, new $Object); +// Set up constructor property on the DataView prototype. +%AddNamedProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM); +%AddNamedProperty( + $DataView.prototype, symbolToStringTag, "DataView", READ_ONLY|DONT_ENUM); - // Set up constructor property on the DataView prototype. - %AddNamedProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM); - %AddNamedProperty( - $DataView.prototype, symbolToStringTag, "DataView", READ_ONLY|DONT_ENUM); +InstallGetter($DataView.prototype, "buffer", DataViewGetBufferJS); +InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset); +InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength); - InstallGetter($DataView.prototype, "buffer", DataViewGetBufferJS); - InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset); - InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength); +InstallFunctions($DataView.prototype, DONT_ENUM, [ + "getInt8", DataViewGetInt8JS, + "setInt8", DataViewSetInt8JS, - InstallFunctions($DataView.prototype, DONT_ENUM, [ - "getInt8", DataViewGetInt8JS, - "setInt8", DataViewSetInt8JS, + "getUint8", DataViewGetUint8JS, + "setUint8", DataViewSetUint8JS, - "getUint8", DataViewGetUint8JS, - "setUint8", DataViewSetUint8JS, + "getInt16", DataViewGetInt16JS, + "setInt16", DataViewSetInt16JS, - "getInt16", DataViewGetInt16JS, - "setInt16", DataViewSetInt16JS, + "getUint16", DataViewGetUint16JS, + "setUint16", DataViewSetUint16JS, - "getUint16", DataViewGetUint16JS, - "setUint16", DataViewSetUint16JS, + "getInt32", DataViewGetInt32JS, + "setInt32", DataViewSetInt32JS, - "getInt32", DataViewGetInt32JS, - "setInt32", DataViewSetInt32JS, + "getUint32", DataViewGetUint32JS, + "setUint32", DataViewSetUint32JS, - "getUint32", DataViewGetUint32JS, - "setUint32", DataViewSetUint32JS, + "getFloat32", DataViewGetFloat32JS, + "setFloat32", DataViewSetFloat32JS, - "getFloat32", DataViewGetFloat32JS, - "setFloat32", DataViewSetFloat32JS, - - "getFloat64", DataViewGetFloat64JS, - "setFloat64", DataViewSetFloat64JS - ]); -} + "getFloat64", DataViewGetFloat64JS, + "setFloat64", DataViewSetFloat64JS +]); -SetupDataView(); +})();