diff --git a/src/array-iterator.js b/src/array-iterator.js index 95635cd4bf7..8e4f5c7bbc6 100644 --- a/src/array-iterator.js +++ b/src/array-iterator.js @@ -2,35 +2,13 @@ // 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(); -var GlobalArray = global.Array; -var GlobalObject = global.Object; +// This file relies on the fact that the following declaration has been made +// in runtime.js: +// var $Array = global.Array; -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"); @@ -122,38 +100,60 @@ function ArrayKeys() { } -%FunctionSetPrototype(ArrayIterator, new GlobalObject()); -%FunctionSetInstanceClassName(ArrayIterator, 'Array Iterator'); +function SetUpArrayIterator() { + %CheckIsBootstrapping(); -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); + %FunctionSetPrototype(ArrayIterator, new $Object()); + %FunctionSetInstanceClassName(ArrayIterator, 'Array Iterator'); -InstallFunctions(GlobalArray.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); +} +SetUpArrayIterator(); -%AddNamedProperty(GlobalArray.prototype, symbolIterator, ArrayValues, - DONT_ENUM); -macro EXTEND_TYPED_ARRAY(NAME) - %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 +function ExtendArrayPrototype() { + %CheckIsBootstrapping(); -TYPED_ARRAYS(EXTEND_TYPED_ARRAY) + InstallFunctions($Array.prototype, DONT_ENUM, [ + // No 'values' since it breaks webcompat: http://crbug.com/409858 + 'entries', ArrayEntries, + 'keys', ArrayKeys + ]); -$iteratorCreateResultObject = CreateIteratorResultObject; -$arrayValues = ArrayValues; + %AddNamedProperty($Array.prototype, symbolIterator, ArrayValues, DONT_ENUM); +} +ExtendArrayPrototype(); + + +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 + +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); +endmacro + + TYPED_ARRAYS(EXTEND_TYPED_ARRAY) +} +ExtendTypedArrayPrototypes(); diff --git a/src/arraybuffer.js b/src/arraybuffer.js index 86b13927aa4..e4d332b060c 100644 --- a/src/arraybuffer.js +++ b/src/arraybuffer.js @@ -2,14 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -(function() { - "use strict"; -%CheckIsBootstrapping(); - -var GlobalArrayBuffer = global.ArrayBuffer; -var GlobalObject = global.Object; +var $ArrayBuffer = global.ArrayBuffer; // ------------------------------------------------------------------- @@ -61,7 +56,7 @@ function ArrayBufferSlice(start, end) { } var newLen = fin - first; // TODO(dslomov): implement inheritance - var result = new GlobalArrayBuffer(newLen); + var result = new $ArrayBuffer(newLen); %ArrayBufferSliceImpl(this, result, first); return result; @@ -71,26 +66,29 @@ function ArrayBufferIsViewJS(obj) { return %ArrayBufferIsView(obj); } +function SetUpArrayBuffer() { + %CheckIsBootstrapping(); -// Set up the ArrayBuffer constructor function. -%SetCode(GlobalArrayBuffer, ArrayBufferConstructor); -%FunctionSetPrototype(GlobalArrayBuffer, new GlobalObject()); + // Set up the ArrayBuffer constructor function. + %SetCode($ArrayBuffer, ArrayBufferConstructor); + %FunctionSetPrototype($ArrayBuffer, new $Object()); -// Set up the constructor property on the ArrayBuffer prototype object. -%AddNamedProperty( - GlobalArrayBuffer.prototype, "constructor", GlobalArrayBuffer, DONT_ENUM); + // Set up the constructor property on the ArrayBuffer prototype object. + %AddNamedProperty( + $ArrayBuffer.prototype, "constructor", $ArrayBuffer, DONT_ENUM); -%AddNamedProperty(GlobalArrayBuffer.prototype, - symbolToStringTag, "ArrayBuffer", DONT_ENUM | READ_ONLY); + %AddNamedProperty($ArrayBuffer.prototype, + symbolToStringTag, "ArrayBuffer", DONT_ENUM | READ_ONLY); -InstallGetter(GlobalArrayBuffer.prototype, "byteLength", ArrayBufferGetByteLen); + InstallGetter($ArrayBuffer.prototype, "byteLength", ArrayBufferGetByteLen); -InstallFunctions(GlobalArrayBuffer, DONT_ENUM, [ - "isView", ArrayBufferIsViewJS -]); + InstallFunctions($ArrayBuffer, DONT_ENUM, [ + "isView", ArrayBufferIsViewJS + ]); -InstallFunctions(GlobalArrayBuffer.prototype, DONT_ENUM, [ - "slice", ArrayBufferSlice -]); + InstallFunctions($ArrayBuffer.prototype, DONT_ENUM, [ + "slice", ArrayBufferSlice + ]); +} -})(); +SetUpArrayBuffer(); diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index d44f8243a98..4bf4d39ff41 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 dea81e57254..8d72b81e8be 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 $iteratorCreateResultObject(UNDEFINED, true); + return CreateIteratorResultObject(UNDEFINED, true); } var position = GET_PRIVATE(iterator, stringIteratorNextIndexSymbol); @@ -57,7 +57,7 @@ function StringIteratorNext() { if (position >= length) { SET_PRIVATE(iterator, stringIteratorIteratedStringSymbol, UNDEFINED); - return $iteratorCreateResultObject(UNDEFINED, true); + return CreateIteratorResultObject(UNDEFINED, true); } var first = %_StringCharCodeAt(s, position); @@ -74,7 +74,7 @@ function StringIteratorNext() { SET_PRIVATE(iterator, stringIteratorNextIndexSymbol, position); - return $iteratorCreateResultObject(resultString, false); + return CreateIteratorResultObject(resultString, false); } diff --git a/src/typedarray.js b/src/typedarray.js index 0a73be941f2..1faa051cce7 100644 --- a/src/typedarray.js +++ b/src/typedarray.js @@ -2,14 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -(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 $ArrayBuffer = global.ArrayBuffer; -var GlobalArray = global.Array; -var GlobalArrayBuffer = global.ArrayBuffer; // --------------- Typed Arrays --------------------- macro TYPED_ARRAYS(FUNCTION) @@ -79,7 +78,7 @@ function NAMEConstructByLength(obj, length) { } var byteLength = l * ELEMENT_SIZE; if (byteLength > %_TypedArrayMaxSizeInHeap()) { - var buffer = new GlobalArrayBuffer(byteLength); + var buffer = new $ArrayBuffer(byteLength); %_TypedArrayInitialize(obj, ARRAY_ID, buffer, 0, byteLength); } else { %_TypedArrayInitialize(obj, ARRAY_ID, null, 0, byteLength); @@ -244,7 +243,7 @@ function TypedArraySetFromOverlappingTypedArray(target, source, offset) { } var rightIndex = CopyRightPart(); - var temp = new GlobalArray(rightIndex + 1 - leftIndex); + var temp = new $Array(rightIndex + 1 - leftIndex); for (var i = leftIndex; i <= rightIndex; i++) { temp[i - leftIndex] = source[i]; } @@ -301,6 +300,7 @@ function TypedArrayGetToStringTag() { // ------------------------------------------------------------------- +function SetupTypedArrays() { macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) %CheckIsBootstrapping(); %SetCode(global.NAME, NAMEConstructor); @@ -329,6 +329,9 @@ macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE) endmacro TYPED_ARRAYS(SETUP_TYPED_ARRAY) +} + +SetupTypedArrays(); // --------------------------- DataView ----------------------------- @@ -436,43 +439,47 @@ endmacro DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER) -// Setup the DataView constructor. -%SetCode($DataView, DataViewConstructor); -%FunctionSetPrototype($DataView, new $Object); +function SetupDataView() { + %CheckIsBootstrapping(); -// Set up constructor property on the DataView prototype. -%AddNamedProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM); -%AddNamedProperty( - $DataView.prototype, symbolToStringTag, "DataView", READ_ONLY|DONT_ENUM); + // Setup the DataView constructor. + %SetCode($DataView, DataViewConstructor); + %FunctionSetPrototype($DataView, new $Object); -InstallGetter($DataView.prototype, "buffer", DataViewGetBufferJS); -InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset); -InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength); + // Set up constructor property on the DataView prototype. + %AddNamedProperty($DataView.prototype, "constructor", $DataView, DONT_ENUM); + %AddNamedProperty( + $DataView.prototype, symbolToStringTag, "DataView", READ_ONLY|DONT_ENUM); -InstallFunctions($DataView.prototype, DONT_ENUM, [ - "getInt8", DataViewGetInt8JS, - "setInt8", DataViewSetInt8JS, + InstallGetter($DataView.prototype, "buffer", DataViewGetBufferJS); + InstallGetter($DataView.prototype, "byteOffset", DataViewGetByteOffset); + InstallGetter($DataView.prototype, "byteLength", DataViewGetByteLength); - "getUint8", DataViewGetUint8JS, - "setUint8", DataViewSetUint8JS, + InstallFunctions($DataView.prototype, DONT_ENUM, [ + "getInt8", DataViewGetInt8JS, + "setInt8", DataViewSetInt8JS, - "getInt16", DataViewGetInt16JS, - "setInt16", DataViewSetInt16JS, + "getUint8", DataViewGetUint8JS, + "setUint8", DataViewSetUint8JS, - "getUint16", DataViewGetUint16JS, - "setUint16", DataViewSetUint16JS, + "getInt16", DataViewGetInt16JS, + "setInt16", DataViewSetInt16JS, - "getInt32", DataViewGetInt32JS, - "setInt32", DataViewSetInt32JS, + "getUint16", DataViewGetUint16JS, + "setUint16", DataViewSetUint16JS, - "getUint32", DataViewGetUint32JS, - "setUint32", DataViewSetUint32JS, + "getInt32", DataViewGetInt32JS, + "setInt32", DataViewSetInt32JS, - "getFloat32", DataViewGetFloat32JS, - "setFloat32", DataViewSetFloat32JS, + "getUint32", DataViewGetUint32JS, + "setUint32", DataViewSetUint32JS, - "getFloat64", DataViewGetFloat64JS, - "setFloat64", DataViewSetFloat64JS -]); + "getFloat32", DataViewGetFloat32JS, + "setFloat32", DataViewSetFloat32JS, + + "getFloat64", DataViewGetFloat64JS, + "setFloat64", DataViewSetFloat64JS + ]); +} -})(); +SetupDataView();