summaryrefslogtreecommitdiff
path: root/deps/v8/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/js')
-rw-r--r--deps/v8/src/js/OWNERS3
-rw-r--r--deps/v8/src/js/array.js641
-rw-r--r--deps/v8/src/js/collection-iterator.js178
-rw-r--r--deps/v8/src/js/collection.js460
-rw-r--r--deps/v8/src/js/intl.js175
-rw-r--r--deps/v8/src/js/macros.py63
-rw-r--r--deps/v8/src/js/max-min.js2
-rw-r--r--deps/v8/src/js/messages.js10
-rw-r--r--deps/v8/src/js/prologue.js54
-rw-r--r--deps/v8/src/js/promise.js132
-rw-r--r--deps/v8/src/js/proxy.js17
-rw-r--r--deps/v8/src/js/spread.js2
-rw-r--r--deps/v8/src/js/string.js403
-rw-r--r--deps/v8/src/js/typedarray.js338
-rw-r--r--deps/v8/src/js/v8natives.js41
-rw-r--r--deps/v8/src/js/weak-collection.js147
16 files changed, 970 insertions, 1696 deletions
diff --git a/deps/v8/src/js/OWNERS b/deps/v8/src/js/OWNERS
index f7002c723b..0108c712e3 100644
--- a/deps/v8/src/js/OWNERS
+++ b/deps/v8/src/js/OWNERS
@@ -4,8 +4,11 @@ adamk@chromium.org
bmeurer@chromium.org
cbruni@chromium.org
ishell@chromium.org
+jgruber@chromium.org
jkummerow@chromium.org
littledan@chromium.org
rossberg@chromium.org
verwaest@chromium.org
yangguo@chromium.org
+
+# COMPONENT: Blink>JavaScript>Language
diff --git a/deps/v8/src/js/array.js b/deps/v8/src/js/array.js
index 2e22a521dc..e1834f758a 100644
--- a/deps/v8/src/js/array.js
+++ b/deps/v8/src/js/array.js
@@ -327,37 +327,42 @@ function SimpleMove(array, start_i, del_count, len, num_additional_args) {
// -------------------------------------------------------------------
-
-function ArrayToString() {
- var array;
- var func;
- if (IS_ARRAY(this)) {
- func = this.join;
- if (func === ArrayJoin) {
- return Join(this, this.length, ',', false);
+var ArrayJoin;
+DEFINE_METHOD(
+ GlobalArray.prototype,
+ toString() {
+ var array;
+ var func;
+ if (IS_ARRAY(this)) {
+ func = this.join;
+ if (func === ArrayJoin) {
+ return Join(this, this.length, ',', false);
+ }
+ array = this;
+ } else {
+ array = TO_OBJECT(this);
+ func = array.join;
}
- array = this;
- } else {
- array = TO_OBJECT(this);
- func = array.join;
- }
- if (!IS_CALLABLE(func)) {
- return %_Call(ObjectToString, array);
+ if (!IS_CALLABLE(func)) {
+ return %_Call(ObjectToString, array);
+ }
+ return %_Call(func, array);
}
- return %_Call(func, array);
-}
-
+);
function InnerArrayToLocaleString(array, length) {
return Join(array, TO_LENGTH(length), ',', true);
}
-function ArrayToLocaleString() {
- var array = TO_OBJECT(this);
- var arrayLen = array.length;
- return InnerArrayToLocaleString(array, arrayLen);
-}
+DEFINE_METHOD(
+ GlobalArray.prototype,
+ toLocaleString() {
+ var array = TO_OBJECT(this);
+ var arrayLen = array.length;
+ return InnerArrayToLocaleString(array, arrayLen);
+ }
+);
function InnerArrayJoin(separator, array, length) {
@@ -378,19 +383,22 @@ function InnerArrayJoin(separator, array, length) {
}
-function ArrayJoin(separator) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.join");
+DEFINE_METHOD(
+ GlobalArray.prototype,
+ join(separator) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.join");
- var array = TO_OBJECT(this);
- var length = TO_LENGTH(array.length);
+ var array = TO_OBJECT(this);
+ var length = TO_LENGTH(array.length);
- return InnerArrayJoin(separator, array, length);
-}
+ return InnerArrayJoin(separator, array, length);
+ }
+);
// Removes the last element from the array and returns it. See
// ECMA-262, section 15.4.4.6.
-function ArrayPop() {
+function ArrayPopFallback() {
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.pop");
var array = TO_OBJECT(this);
@@ -410,7 +418,7 @@ function ArrayPop() {
// Appends the arguments to the end of the array and returns the new
// length of the array. See ECMA-262, section 15.4.4.7.
-function ArrayPush() {
+function ArrayPushFallback() {
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.push");
var array = TO_OBJECT(this);
@@ -512,26 +520,29 @@ function GenericArrayReverse(array, len) {
}
-function ArrayReverse() {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse");
+DEFINE_METHOD(
+ GlobalArray.prototype,
+ reverse() {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.reverse");
- var array = TO_OBJECT(this);
- var len = TO_LENGTH(array.length);
- var isArray = IS_ARRAY(array);
+ var array = TO_OBJECT(this);
+ var len = TO_LENGTH(array.length);
+ var isArray = IS_ARRAY(array);
- if (UseSparseVariant(array, len, isArray, len)) {
- %NormalizeElements(array);
- SparseReverse(array, len);
- return array;
- } else if (isArray && %_HasFastPackedElements(array)) {
- return PackedArrayReverse(array, len);
- } else {
- return GenericArrayReverse(array, len);
+ if (UseSparseVariant(array, len, isArray, len)) {
+ %NormalizeElements(array);
+ SparseReverse(array, len);
+ return array;
+ } else if (isArray && %_HasFastPackedElements(array)) {
+ return PackedArrayReverse(array, len);
+ } else {
+ return GenericArrayReverse(array, len);
+ }
}
-}
+);
-function ArrayShift() {
+function ArrayShiftFallback() {
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.shift");
var array = TO_OBJECT(this);
@@ -558,7 +569,7 @@ function ArrayShift() {
}
-function ArrayUnshift(arg1) { // length == 1
+function ArrayUnshiftFallback(arg1) { // length == 1
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.unshift");
var array = TO_OBJECT(this);
@@ -582,7 +593,7 @@ function ArrayUnshift(arg1) { // length == 1
}
-function ArraySlice(start, end) {
+function ArraySliceFallback(start, end) {
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.slice");
var array = TO_OBJECT(this);
@@ -655,7 +666,7 @@ function ComputeSpliceDeleteCount(delete_count, num_arguments, len, start_i) {
}
-function ArraySplice(start, delete_count) {
+function ArraySpliceFallback(start, delete_count) {
CHECK_OBJECT_COERCIBLE(this, "Array.prototype.splice");
var num_arguments = arguments.length;
@@ -992,121 +1003,133 @@ function InnerArraySort(array, length, comparefn) {
}
-function ArraySort(comparefn) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort");
+DEFINE_METHOD(
+ GlobalArray.prototype,
+ sort(comparefn) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.sort");
- var array = TO_OBJECT(this);
- var length = TO_LENGTH(array.length);
- return InnerArraySort(array, length, comparefn);
-}
+ var array = TO_OBJECT(this);
+ var length = TO_LENGTH(array.length);
+ return InnerArraySort(array, length, comparefn);
+ }
+);
-function ArrayLastIndexOf(element, index) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf");
+DEFINE_METHOD_LEN(
+ GlobalArray.prototype,
+ lastIndexOf(element, index) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.lastIndexOf");
- var array = this;
- var length = TO_LENGTH(this.length);
+ var array = this;
+ var length = TO_LENGTH(this.length);
- if (length == 0) return -1;
- if (arguments.length < 2) {
- index = length - 1;
- } else {
- index = INVERT_NEG_ZERO(TO_INTEGER(index));
- // If index is negative, index from end of the array.
- if (index < 0) index += length;
- // If index is still negative, do not search the array.
- if (index < 0) return -1;
- else if (index >= length) index = length - 1;
- }
- var min = 0;
- var max = index;
- if (UseSparseVariant(array, length, IS_ARRAY(array), index)) {
- %NormalizeElements(array);
- var indices = %GetArrayKeys(array, index + 1);
- if (IS_NUMBER(indices)) {
- // It's an interval.
- max = indices; // Capped by index already.
- // Fall through to loop below.
+ if (length == 0) return -1;
+ if (arguments.length < 2) {
+ index = length - 1;
} else {
- if (indices.length == 0) return -1;
- // Get all the keys in sorted order.
- var sortedKeys = GetSortedArrayKeys(array, indices);
- var i = sortedKeys.length - 1;
- while (i >= 0) {
- var key = sortedKeys[i];
- if (array[key] === element) return key;
- i--;
+ index = INVERT_NEG_ZERO(TO_INTEGER(index));
+ // If index is negative, index from end of the array.
+ if (index < 0) index += length;
+ // If index is still negative, do not search the array.
+ if (index < 0) return -1;
+ else if (index >= length) index = length - 1;
+ }
+ var min = 0;
+ var max = index;
+ if (UseSparseVariant(array, length, IS_ARRAY(array), index)) {
+ %NormalizeElements(array);
+ var indices = %GetArrayKeys(array, index + 1);
+ if (IS_NUMBER(indices)) {
+ // It's an interval.
+ max = indices; // Capped by index already.
+ // Fall through to loop below.
+ } else {
+ if (indices.length == 0) return -1;
+ // Get all the keys in sorted order.
+ var sortedKeys = GetSortedArrayKeys(array, indices);
+ var i = sortedKeys.length - 1;
+ while (i >= 0) {
+ var key = sortedKeys[i];
+ if (array[key] === element) return key;
+ i--;
+ }
+ return -1;
+ }
+ }
+ // Lookup through the array.
+ if (!IS_UNDEFINED(element)) {
+ for (var i = max; i >= min; i--) {
+ if (array[i] === element) return i;
}
return -1;
}
- }
- // Lookup through the array.
- if (!IS_UNDEFINED(element)) {
for (var i = max; i >= min; i--) {
- if (array[i] === element) return i;
+ if (IS_UNDEFINED(array[i]) && i in array) {
+ return i;
+ }
}
return -1;
- }
- for (var i = max; i >= min; i--) {
- if (IS_UNDEFINED(array[i]) && i in array) {
- return i;
- }
- }
- return -1;
-}
+ },
+ 1 /* Set function length */
+);
+
// ES#sec-array.prototype.copywithin
// (Array.prototype.copyWithin ( target, start [ , end ] )
-function ArrayCopyWithin(target, start, end) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.copyWithin");
-
- var array = TO_OBJECT(this);
- var length = TO_LENGTH(array.length);
-
- target = TO_INTEGER(target);
- var to;
- if (target < 0) {
- to = MaxSimple(length + target, 0);
- } else {
- to = MinSimple(target, length);
- }
+DEFINE_METHOD_LEN(
+ GlobalArray.prototype,
+ copyWithin(target, start, end) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.copyWithin");
+
+ var array = TO_OBJECT(this);
+ var length = TO_LENGTH(array.length);
+
+ target = TO_INTEGER(target);
+ var to;
+ if (target < 0) {
+ to = MaxSimple(length + target, 0);
+ } else {
+ to = MinSimple(target, length);
+ }
- start = TO_INTEGER(start);
- var from;
- if (start < 0) {
- from = MaxSimple(length + start, 0);
- } else {
- from = MinSimple(start, length);
- }
+ start = TO_INTEGER(start);
+ var from;
+ if (start < 0) {
+ from = MaxSimple(length + start, 0);
+ } else {
+ from = MinSimple(start, length);
+ }
- end = IS_UNDEFINED(end) ? length : TO_INTEGER(end);
- var final;
- if (end < 0) {
- final = MaxSimple(length + end, 0);
- } else {
- final = MinSimple(end, length);
- }
+ end = IS_UNDEFINED(end) ? length : TO_INTEGER(end);
+ var final;
+ if (end < 0) {
+ final = MaxSimple(length + end, 0);
+ } else {
+ final = MinSimple(end, length);
+ }
- var count = MinSimple(final - from, length - to);
- var direction = 1;
- if (from < to && to < (from + count)) {
- direction = -1;
- from = from + count - 1;
- to = to + count - 1;
- }
+ var count = MinSimple(final - from, length - to);
+ var direction = 1;
+ if (from < to && to < (from + count)) {
+ direction = -1;
+ from = from + count - 1;
+ to = to + count - 1;
+ }
- while (count > 0) {
- if (from in array) {
- array[to] = array[from];
- } else {
- delete array[to];
+ while (count > 0) {
+ if (from in array) {
+ array[to] = array[from];
+ } else {
+ delete array[to];
+ }
+ from = from + direction;
+ to = to + direction;
+ count--;
}
- from = from + direction;
- to = to + direction;
- count--;
- }
- return array;
-}
+ return array;
+ },
+ 2 /* Set function length */
+);
function InnerArrayFind(predicate, thisArg, array, length) {
@@ -1126,14 +1149,18 @@ function InnerArrayFind(predicate, thisArg, array, length) {
// ES6 draft 07-15-13, section 15.4.3.23
-function ArrayFind(predicate, thisArg) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find");
+DEFINE_METHOD_LEN(
+ GlobalArray.prototype,
+ find(predicate, thisArg) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find");
- var array = TO_OBJECT(this);
- var length = TO_INTEGER(array.length);
+ var array = TO_OBJECT(this);
+ var length = TO_INTEGER(array.length);
- return InnerArrayFind(predicate, thisArg, array, length);
-}
+ return InnerArrayFind(predicate, thisArg, array, length);
+ },
+ 1 /* Set function length */
+);
function InnerArrayFindIndex(predicate, thisArg, array, length) {
@@ -1153,123 +1180,132 @@ function InnerArrayFindIndex(predicate, thisArg, array, length) {
// ES6 draft 07-15-13, section 15.4.3.24
-function ArrayFindIndex(predicate, thisArg) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex");
+DEFINE_METHOD_LEN(
+ GlobalArray.prototype,
+ findIndex(predicate, thisArg) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex");
- var array = TO_OBJECT(this);
- var length = TO_INTEGER(array.length);
+ var array = TO_OBJECT(this);
+ var length = TO_INTEGER(array.length);
- return InnerArrayFindIndex(predicate, thisArg, array, length);
-}
+ return InnerArrayFindIndex(predicate, thisArg, array, length);
+ },
+ 1 /* Set function length */
+);
// ES6, draft 04-05-14, section 22.1.3.6
-function ArrayFill(value, start, end) {
- CHECK_OBJECT_COERCIBLE(this, "Array.prototype.fill");
+DEFINE_METHOD_LEN(
+ GlobalArray.prototype,
+ fill(value, start, end) {
+ CHECK_OBJECT_COERCIBLE(this, "Array.prototype.fill");
- var array = TO_OBJECT(this);
- var length = TO_LENGTH(array.length);
+ var array = TO_OBJECT(this);
+ var length = TO_LENGTH(array.length);
- var i = IS_UNDEFINED(start) ? 0 : TO_INTEGER(start);
- var end = IS_UNDEFINED(end) ? length : TO_INTEGER(end);
+ var i = IS_UNDEFINED(start) ? 0 : TO_INTEGER(start);
+ var end = IS_UNDEFINED(end) ? length : TO_INTEGER(end);
- if (i < 0) {
- i += length;
- if (i < 0) i = 0;
- } else {
- if (i > length) i = length;
- }
+ if (i < 0) {
+ i += length;
+ if (i < 0) i = 0;
+ } else {
+ if (i > length) i = length;
+ }
- if (end < 0) {
- end += length;
- if (end < 0) end = 0;
- } else {
- if (end > length) end = length;
- }
+ if (end < 0) {
+ end += length;
+ if (end < 0) end = 0;
+ } else {
+ if (end > length) end = length;
+ }
- if ((end - i) > 0 && %object_is_frozen(array)) {
- throw %make_type_error(kArrayFunctionsOnFrozen);
- }
+ if ((end - i) > 0 && %object_is_frozen(array)) {
+ throw %make_type_error(kArrayFunctionsOnFrozen);
+ }
- for (; i < end; i++)
- array[i] = value;
- return array;
-}
+ for (; i < end; i++)
+ array[i] = value;
+ return array;
+ },
+ 1 /* Set function length */
+);
// ES6, draft 10-14-14, section 22.1.2.1
-function ArrayFrom(arrayLike, mapfn, receiver) {
- var items = TO_OBJECT(arrayLike);
- var mapping = !IS_UNDEFINED(mapfn);
-
- if (mapping) {
- if (!IS_CALLABLE(mapfn)) {
- throw %make_type_error(kCalledNonCallable, mapfn);
+DEFINE_METHOD_LEN(
+ GlobalArray,
+ 'from'(arrayLike, mapfn, receiver) {
+ var items = TO_OBJECT(arrayLike);
+ var mapping = !IS_UNDEFINED(mapfn);
+
+ if (mapping) {
+ if (!IS_CALLABLE(mapfn)) {
+ throw %make_type_error(kCalledNonCallable, mapfn);
+ }
}
- }
- var iterable = GetMethod(items, iteratorSymbol);
- var k;
- var result;
- var mappedValue;
- var nextValue;
+ var iterable = GetMethod(items, iteratorSymbol);
+ var k;
+ var result;
+ var mappedValue;
+ var nextValue;
- if (!IS_UNDEFINED(iterable)) {
- result = %IsConstructor(this) ? new this() : [];
- k = 0;
+ if (!IS_UNDEFINED(iterable)) {
+ result = %IsConstructor(this) ? new this() : [];
+ k = 0;
- for (nextValue of
- { [iteratorSymbol]() { return GetIterator(items, iterable) } }) {
- if (mapping) {
- mappedValue = %_Call(mapfn, receiver, nextValue, k);
- } else {
- mappedValue = nextValue;
+ for (nextValue of
+ { [iteratorSymbol]() { return GetIterator(items, iterable) } }) {
+ if (mapping) {
+ mappedValue = %_Call(mapfn, receiver, nextValue, k);
+ } else {
+ mappedValue = nextValue;
+ }
+ %CreateDataProperty(result, k, mappedValue);
+ k++;
}
- %CreateDataProperty(result, k, mappedValue);
- k++;
- }
- result.length = k;
- return result;
- } else {
- var len = TO_LENGTH(items.length);
- result = %IsConstructor(this) ? new this(len) : new GlobalArray(len);
+ result.length = k;
+ return result;
+ } else {
+ var len = TO_LENGTH(items.length);
+ result = %IsConstructor(this) ? new this(len) : new GlobalArray(len);
- for (k = 0; k < len; ++k) {
- nextValue = items[k];
- if (mapping) {
- mappedValue = %_Call(mapfn, receiver, nextValue, k);
- } else {
- mappedValue = nextValue;
+ for (k = 0; k < len; ++k) {
+ nextValue = items[k];
+ if (mapping) {
+ mappedValue = %_Call(mapfn, receiver, nextValue, k);
+ } else {
+ mappedValue = nextValue;
+ }
+ %CreateDataProperty(result, k, mappedValue);
}
- %CreateDataProperty(result, k, mappedValue);
- }
-
- result.length = k;
- return result;
- }
-}
+ result.length = k;
+ return result;
+ }
+ },
+ 1 /* Set function length. */
+);
// ES6, draft 05-22-14, section 22.1.2.3
-function ArrayOf(...args) {
- var length = args.length;
- var constructor = this;
- // TODO: Implement IsConstructor (ES6 section 7.2.5)
- var array = %IsConstructor(constructor) ? new constructor(length) : [];
- for (var i = 0; i < length; i++) {
- %CreateDataProperty(array, i, args[i]);
+DEFINE_METHOD(
+ GlobalArray,
+ of(...args) {
+ var length = args.length;
+ var constructor = this;
+ // TODO: Implement IsConstructor (ES6 section 7.2.5)
+ var array = %IsConstructor(constructor) ? new constructor(length) : [];
+ for (var i = 0; i < length; i++) {
+ %CreateDataProperty(array, i, args[i]);
+ }
+ array.length = length;
+ return array;
}
- array.length = length;
- return array;
-}
+);
// -------------------------------------------------------------------
-// Set up non-enumerable constructor property on the Array.prototype
-// object.
-%AddNamedProperty(GlobalArray.prototype, "constructor", GlobalArray,
- DONT_ENUM);
-
// Set up unscopable properties on the Array.prototype object.
var unscopables = {
__proto__: null,
@@ -1287,107 +1323,64 @@ var unscopables = {
%AddNamedProperty(GlobalArray.prototype, unscopablesSymbol, unscopables,
DONT_ENUM | READ_ONLY);
-%FunctionSetLength(ArrayFrom, 1);
-
-// Set up non-enumerable functions on the Array object.
-utils.InstallFunctions(GlobalArray, DONT_ENUM, [
- "from", ArrayFrom,
- "of", ArrayOf
-]);
-
-var specialFunctions = %SpecialArrayFunctions();
-
-function getFunction(name, jsBuiltin, len) {
- var f = jsBuiltin;
- if (specialFunctions.hasOwnProperty(name)) {
- f = specialFunctions[name];
- }
- if (!IS_UNDEFINED(len)) {
- %FunctionSetLength(f, len);
- }
- return f;
-};
+var ArrayIndexOf = GlobalArray.prototype.indexOf;
+var ArrayJoin = GlobalArray.prototype.join;
+var ArrayPop = GlobalArray.prototype.pop;
+var ArrayPush = GlobalArray.prototype.push;
+var ArraySlice = GlobalArray.prototype.slice;
+var ArrayShift = GlobalArray.prototype.shift;
+var ArraySort = GlobalArray.prototype.sort;
+var ArraySplice = GlobalArray.prototype.splice;
+var ArrayToString = GlobalArray.prototype.toString;
+var ArrayUnshift = GlobalArray.prototype.unshift;
// Array prototype functions that return iterators. They are exposed to the
// public API via Template::SetIntrinsicDataProperty().
-var IteratorFunctions = {
- "entries": getFunction("entries", null, 0),
- "keys": getFunction("keys", null, 0),
- "values": getFunction("values", null, 0)
-}
-
-// Set up non-enumerable functions of the Array.prototype object and
-// set their names.
-// Manipulate the length of some of the functions to meet
-// expectations set by ECMA-262 or Mozilla.
-utils.InstallFunctions(GlobalArray.prototype, DONT_ENUM, [
- "toString", getFunction("toString", ArrayToString),
- "toLocaleString", getFunction("toLocaleString", ArrayToLocaleString),
- "join", getFunction("join", ArrayJoin),
- "pop", getFunction("pop", ArrayPop),
- "push", getFunction("push", ArrayPush, 1),
- "reverse", getFunction("reverse", ArrayReverse),
- "shift", getFunction("shift", ArrayShift),
- "unshift", getFunction("unshift", ArrayUnshift, 1),
- "slice", getFunction("slice", ArraySlice, 2),
- "splice", getFunction("splice", ArraySplice, 2),
- "sort", getFunction("sort", ArraySort),
- "indexOf", getFunction("indexOf", null, 1),
- "lastIndexOf", getFunction("lastIndexOf", ArrayLastIndexOf, 1),
- "copyWithin", getFunction("copyWithin", ArrayCopyWithin, 2),
- "find", getFunction("find", ArrayFind, 1),
- "findIndex", getFunction("findIndex", ArrayFindIndex, 1),
- "fill", getFunction("fill", ArrayFill, 1),
- "includes", getFunction("includes", null, 1),
- "entries", IteratorFunctions.entries,
- "keys", IteratorFunctions.keys,
- iteratorSymbol, IteratorFunctions.values
-]);
+var ArrayEntries = GlobalArray.prototype.entries;
+var ArrayForEach = GlobalArray.prototype.forEach;
+var ArrayKeys = GlobalArray.prototype.keys;
+var ArrayValues = GlobalArray.prototype[iteratorSymbol];
-%FunctionSetName(IteratorFunctions.entries, "entries");
-%FunctionSetName(IteratorFunctions.keys, "keys");
-%FunctionSetName(IteratorFunctions.values, "values");
// The internal Array prototype doesn't need to be fancy, since it's never
// exposed to user code.
// Adding only the functions that are actually used.
utils.SetUpLockedPrototype(InternalArray, GlobalArray(), [
- "indexOf", getFunction("indexOf", null),
- "join", getFunction("join", ArrayJoin),
- "pop", getFunction("pop", ArrayPop),
- "push", getFunction("push", ArrayPush),
- "shift", getFunction("shift", ArrayShift),
- "sort", getFunction("sort", ArraySort),
- "splice", getFunction("splice", ArraySplice)
+ "indexOf", ArrayIndexOf,
+ "join", ArrayJoin,
+ "pop", ArrayPop,
+ "push", ArrayPush,
+ "shift", ArrayShift,
+ "sort", ArraySort,
+ "splice", ArraySplice
]);
utils.SetUpLockedPrototype(InternalPackedArray, GlobalArray(), [
- "join", getFunction("join", ArrayJoin),
- "pop", getFunction("pop", ArrayPop),
- "push", getFunction("push", ArrayPush),
- "shift", getFunction("shift", ArrayShift)
+ "join", ArrayJoin,
+ "pop", ArrayPop,
+ "push", ArrayPush,
+ "shift", ArrayShift
]);
// V8 extras get a separate copy of InternalPackedArray. We give them the basic
// manipulation methods.
utils.SetUpLockedPrototype(extrasUtils.InternalPackedArray, GlobalArray(), [
- "push", getFunction("push", ArrayPush),
- "pop", getFunction("pop", ArrayPop),
- "shift", getFunction("shift", ArrayShift),
- "unshift", getFunction("unshift", ArrayUnshift),
- "splice", getFunction("splice", ArraySplice),
- "slice", getFunction("slice", ArraySlice)
+ "push", ArrayPush,
+ "pop", ArrayPop,
+ "shift", ArrayShift,
+ "unshift", ArrayUnshift,
+ "splice", ArraySplice,
+ "slice", ArraySlice
]);
// -------------------------------------------------------------------
// Exports
utils.Export(function(to) {
- to.ArrayFrom = ArrayFrom;
to.ArrayJoin = ArrayJoin;
to.ArrayPush = ArrayPush;
to.ArrayToString = ArrayToString;
- to.ArrayValues = IteratorFunctions.values,
+ to.ArrayValues = ArrayValues;
to.InnerArrayFind = InnerArrayFind;
to.InnerArrayFindIndex = InnerArrayFindIndex;
to.InnerArrayJoin = InnerArrayJoin;
@@ -1396,15 +1389,17 @@ utils.Export(function(to) {
});
%InstallToContext([
- "array_entries_iterator", IteratorFunctions.entries,
- "array_keys_iterator", IteratorFunctions.keys,
- "array_pop", ArrayPop,
- "array_push", ArrayPush,
- "array_shift", ArrayShift,
- "array_splice", ArraySplice,
- "array_slice", ArraySlice,
- "array_unshift", ArrayUnshift,
- "array_values_iterator", IteratorFunctions.values,
+ "array_entries_iterator", ArrayEntries,
+ "array_for_each_iterator", ArrayForEach,
+ "array_keys_iterator", ArrayKeys,
+ "array_values_iterator", ArrayValues,
+ // Fallback implementations of Array builtins.
+ "array_pop", ArrayPopFallback,
+ "array_push", ArrayPushFallback,
+ "array_shift", ArrayShiftFallback,
+ "array_splice", ArraySpliceFallback,
+ "array_slice", ArraySliceFallback,
+ "array_unshift", ArrayUnshiftFallback,
]);
});
diff --git a/deps/v8/src/js/collection-iterator.js b/deps/v8/src/js/collection-iterator.js
deleted file mode 100644
index 173f273f9b..0000000000
--- a/deps/v8/src/js/collection-iterator.js
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright 2014 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-(function(global, utils) {
-
-"use strict";
-
-%CheckIsBootstrapping();
-
-// -------------------------------------------------------------------
-// Imports
-
-var GlobalMap = global.Map;
-var GlobalSet = global.Set;
-var iteratorSymbol = utils.ImportNow("iterator_symbol");
-var MapIterator = utils.ImportNow("MapIterator");
-var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
-var SetIterator = utils.ImportNow("SetIterator");
-
-// -------------------------------------------------------------------
-
-function SetIteratorConstructor(set, kind) {
- %SetIteratorInitialize(this, set, kind);
-}
-
-
-function SetIteratorNextJS() {
- if (!IS_SET_ITERATOR(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set Iterator.prototype.next', this);
- }
-
- var value_array = [UNDEFINED, UNDEFINED];
- var result = %_CreateIterResultObject(value_array, false);
- switch (%SetIteratorNext(this, value_array)) {
- case 0:
- result.value = UNDEFINED;
- result.done = true;
- break;
- case ITERATOR_KIND_VALUES:
- result.value = value_array[0];
- break;
- case ITERATOR_KIND_ENTRIES:
- value_array[1] = value_array[0];
- break;
- }
-
- return result;
-}
-
-
-function SetEntries() {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set.prototype.entries', this);
- }
- return new SetIterator(this, ITERATOR_KIND_ENTRIES);
-}
-
-
-function SetValues() {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set.prototype.values', this);
- }
- return new SetIterator(this, ITERATOR_KIND_VALUES);
-}
-
-// -------------------------------------------------------------------
-
-%SetCode(SetIterator, SetIteratorConstructor);
-%FunctionSetInstanceClassName(SetIterator, 'Set Iterator');
-utils.InstallFunctions(SetIterator.prototype, DONT_ENUM, [
- 'next', SetIteratorNextJS
-]);
-
-%AddNamedProperty(SetIterator.prototype, toStringTagSymbol,
- "Set Iterator", READ_ONLY | DONT_ENUM);
-
-utils.InstallFunctions(GlobalSet.prototype, DONT_ENUM, [
- 'entries', SetEntries,
- 'keys', SetValues,
- 'values', SetValues
-]);
-
-%AddNamedProperty(GlobalSet.prototype, iteratorSymbol, SetValues, DONT_ENUM);
-
-// -------------------------------------------------------------------
-
-function MapIteratorConstructor(map, kind) {
- %MapIteratorInitialize(this, map, kind);
-}
-
-
-function MapIteratorNextJS() {
- if (!IS_MAP_ITERATOR(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map Iterator.prototype.next', this);
- }
-
- var value_array = [UNDEFINED, UNDEFINED];
- var result = %_CreateIterResultObject(value_array, false);
- switch (%MapIteratorNext(this, value_array)) {
- case 0:
- result.value = UNDEFINED;
- result.done = true;
- break;
- case ITERATOR_KIND_KEYS:
- result.value = value_array[0];
- break;
- case ITERATOR_KIND_VALUES:
- result.value = value_array[1];
- break;
- // ITERATOR_KIND_ENTRIES does not need any processing.
- }
-
- return result;
-}
-
-
-function MapEntries() {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.entries', this);
- }
- return new MapIterator(this, ITERATOR_KIND_ENTRIES);
-}
-
-
-function MapKeys() {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.keys', this);
- }
- return new MapIterator(this, ITERATOR_KIND_KEYS);
-}
-
-
-function MapValues() {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.values', this);
- }
- return new MapIterator(this, ITERATOR_KIND_VALUES);
-}
-
-// -------------------------------------------------------------------
-
-%SetCode(MapIterator, MapIteratorConstructor);
-%FunctionSetInstanceClassName(MapIterator, 'Map Iterator');
-utils.InstallFunctions(MapIterator.prototype, DONT_ENUM, [
- 'next', MapIteratorNextJS
-]);
-
-%AddNamedProperty(MapIterator.prototype, toStringTagSymbol,
- "Map Iterator", READ_ONLY | DONT_ENUM);
-
-
-utils.InstallFunctions(GlobalMap.prototype, DONT_ENUM, [
- 'entries', MapEntries,
- 'keys', MapKeys,
- 'values', MapValues
-]);
-
-%AddNamedProperty(GlobalMap.prototype, iteratorSymbol, MapEntries, DONT_ENUM);
-
-// -------------------------------------------------------------------
-// Exports
-
-utils.Export(function(to) {
- to.MapEntries = MapEntries;
- to.MapIteratorNext = MapIteratorNextJS;
- to.SetIteratorNext = SetIteratorNextJS;
- to.SetValues = SetValues;
-});
-
-})
diff --git a/deps/v8/src/js/collection.js b/deps/v8/src/js/collection.js
index adb2688618..e06dbb9e3f 100644
--- a/deps/v8/src/js/collection.js
+++ b/deps/v8/src/js/collection.js
@@ -3,6 +3,7 @@
// found in the LICENSE file.
(function(global, utils) {
+
"use strict";
%CheckIsBootstrapping();
@@ -17,7 +18,6 @@ var hashCodeSymbol = utils.ImportNow("hash_code_symbol");
var MathRandom = global.Math.random;
var MapIterator;
var SetIterator;
-var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
utils.Import(function(from) {
MapIterator = from.MapIterator;
@@ -119,350 +119,158 @@ function GetHash(key) {
// -------------------------------------------------------------------
// Harmony Set
-function SetConstructor(iterable) {
- if (IS_UNDEFINED(new.target)) {
- throw %make_type_error(kConstructorNotFunction, "Set");
- }
-
- %_SetInitialize(this);
-
- if (!IS_NULL_OR_UNDEFINED(iterable)) {
- var adder = this.add;
- if (!IS_CALLABLE(adder)) {
- throw %make_type_error(kPropertyNotFunction, adder, 'add', this);
+//Set up the non-enumerable functions on the Set prototype object.
+DEFINE_METHODS(
+ GlobalSet.prototype,
+ {
+ add(key) {
+ if (!IS_SET(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver, 'Set.prototype.add', this);
+ }
+ // Normalize -0 to +0 as required by the spec.
+ // Even though we use SameValueZero as the comparison for the keys we don't
+ // want to ever store -0 as the key since the key is directly exposed when
+ // doing iteration.
+ if (key === 0) {
+ key = 0;
+ }
+ var table = %_JSCollectionGetTable(this);
+ var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
+ var hash = GetHash(key);
+ if (SetFindEntry(table, numBuckets, key, hash) !== NOT_FOUND) return this;
+
+ var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
+ var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
+ var capacity = numBuckets << 1;
+ if ((nof + nod) >= capacity) {
+ // Need to grow, bail out to runtime.
+ %SetGrow(this);
+ // Re-load state from the grown backing store.
+ table = %_JSCollectionGetTable(this);
+ numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
+ nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
+ nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
+ }
+ var entry = nof + nod;
+ var index = ORDERED_HASH_SET_ENTRY_TO_INDEX(entry, numBuckets);
+ var bucket = ORDERED_HASH_TABLE_HASH_TO_BUCKET(hash, numBuckets);
+ var chainEntry = ORDERED_HASH_TABLE_BUCKET_AT(table, bucket);
+ ORDERED_HASH_TABLE_SET_BUCKET_AT(table, bucket, entry);
+ ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof + 1);
+ FIXED_ARRAY_SET(table, index, key);
+ FIXED_ARRAY_SET_SMI(table, index + 1, chainEntry);
+ return this;
}
- for (var value of iterable) {
- %_Call(adder, this, value);
+ delete(key) {
+ if (!IS_SET(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'Set.prototype.delete', this);
+ }
+ var table = %_JSCollectionGetTable(this);
+ var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
+ var hash = GetExistingHash(key);
+ if (IS_UNDEFINED(hash)) return false;
+ var entry = SetFindEntry(table, numBuckets, key, hash);
+ if (entry === NOT_FOUND) return false;
+
+ var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table) - 1;
+ var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table) + 1;
+ var index = ORDERED_HASH_SET_ENTRY_TO_INDEX(entry, numBuckets);
+ FIXED_ARRAY_SET(table, index, %_TheHole());
+ ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof);
+ ORDERED_HASH_TABLE_SET_DELETED_COUNT(table, nod);
+ if (nof < (numBuckets >>> 1)) %SetShrink(this);
+ return true;
}
}
-}
-
-
-function SetAdd(key) {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver, 'Set.prototype.add', this);
- }
- // Normalize -0 to +0 as required by the spec.
- // Even though we use SameValueZero as the comparison for the keys we don't
- // want to ever store -0 as the key since the key is directly exposed when
- // doing iteration.
- if (key === 0) {
- key = 0;
- }
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetHash(key);
- if (SetFindEntry(table, numBuckets, key, hash) !== NOT_FOUND) return this;
-
- var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
- var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
- var capacity = numBuckets << 1;
- if ((nof + nod) >= capacity) {
- // Need to grow, bail out to runtime.
- %SetGrow(this);
- // Re-load state from the grown backing store.
- table = %_JSCollectionGetTable(this);
- numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
- nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
- }
- var entry = nof + nod;
- var index = ORDERED_HASH_SET_ENTRY_TO_INDEX(entry, numBuckets);
- var bucket = ORDERED_HASH_TABLE_HASH_TO_BUCKET(hash, numBuckets);
- var chainEntry = ORDERED_HASH_TABLE_BUCKET_AT(table, bucket);
- ORDERED_HASH_TABLE_SET_BUCKET_AT(table, bucket, entry);
- ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof + 1);
- FIXED_ARRAY_SET(table, index, key);
- FIXED_ARRAY_SET_SMI(table, index + 1, chainEntry);
- return this;
-}
-
-
-function SetHas(key) {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver, 'Set.prototype.has', this);
- }
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetExistingHash(key);
- if (IS_UNDEFINED(hash)) return false;
- return SetFindEntry(table, numBuckets, key, hash) !== NOT_FOUND;
-}
-
-
-function SetDelete(key) {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set.prototype.delete', this);
- }
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetExistingHash(key);
- if (IS_UNDEFINED(hash)) return false;
- var entry = SetFindEntry(table, numBuckets, key, hash);
- if (entry === NOT_FOUND) return false;
-
- var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table) - 1;
- var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table) + 1;
- var index = ORDERED_HASH_SET_ENTRY_TO_INDEX(entry, numBuckets);
- FIXED_ARRAY_SET(table, index, %_TheHole());
- ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof);
- ORDERED_HASH_TABLE_SET_DELETED_COUNT(table, nod);
- if (nof < (numBuckets >>> 1)) %SetShrink(this);
- return true;
-}
-
-
-function SetGetSize() {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set.prototype.size', this);
- }
- var table = %_JSCollectionGetTable(this);
- return ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
-}
-
-
-function SetClearJS() {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set.prototype.clear', this);
- }
- %_SetClear(this);
-}
-
-
-function SetForEach(f, receiver) {
- if (!IS_SET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Set.prototype.forEach', this);
- }
-
- if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f);
-
- var iterator = new SetIterator(this, ITERATOR_KIND_VALUES);
- var key;
- var value_array = [UNDEFINED];
- while (%SetIteratorNext(iterator, value_array)) {
- key = value_array[0];
- %_Call(f, receiver, key, key, this);
- }
-}
-
-// -------------------------------------------------------------------
-
-%SetCode(GlobalSet, SetConstructor);
-%FunctionSetLength(GlobalSet, 0);
-%FunctionSetPrototype(GlobalSet, new GlobalObject());
-%AddNamedProperty(GlobalSet.prototype, "constructor", GlobalSet, DONT_ENUM);
-%AddNamedProperty(GlobalSet.prototype, toStringTagSymbol, "Set",
- DONT_ENUM | READ_ONLY);
-
-%FunctionSetLength(SetForEach, 1);
-
-// Set up the non-enumerable functions on the Set prototype object.
-utils.InstallGetter(GlobalSet.prototype, "size", SetGetSize);
-utils.InstallFunctions(GlobalSet.prototype, DONT_ENUM, [
- "add", SetAdd,
- "has", SetHas,
- "delete", SetDelete,
- "clear", SetClearJS,
- "forEach", SetForEach
-]);
+);
-
-// -------------------------------------------------------------------
// Harmony Map
-function MapConstructor(iterable) {
- if (IS_UNDEFINED(new.target)) {
- throw %make_type_error(kConstructorNotFunction, "Map");
- }
+//Set up the non-enumerable functions on the Map prototype object.
+DEFINE_METHODS(
+ GlobalMap.prototype,
+ {
+ set(key, value) {
+ if (!IS_MAP(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'Map.prototype.set', this);
+ }
+ // Normalize -0 to +0 as required by the spec.
+ // Even though we use SameValueZero as the comparison for the keys we don't
+ // want to ever store -0 as the key since the key is directly exposed when
+ // doing iteration.
+ if (key === 0) {
+ key = 0;
+ }
- %_MapInitialize(this);
+ var table = %_JSCollectionGetTable(this);
+ var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
+ var hash = GetHash(key);
+ var entry = MapFindEntry(table, numBuckets, key, hash);
+ if (entry !== NOT_FOUND) {
+ var existingIndex = ORDERED_HASH_MAP_ENTRY_TO_INDEX(entry, numBuckets);
+ FIXED_ARRAY_SET(table, existingIndex + 1, value);
+ return this;
+ }
- if (!IS_NULL_OR_UNDEFINED(iterable)) {
- var adder = this.set;
- if (!IS_CALLABLE(adder)) {
- throw %make_type_error(kPropertyNotFunction, adder, 'set', this);
+ var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
+ var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
+ var capacity = numBuckets << 1;
+ if ((nof + nod) >= capacity) {
+ // Need to grow, bail out to runtime.
+ %MapGrow(this);
+ // Re-load state from the grown backing store.
+ table = %_JSCollectionGetTable(this);
+ numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
+ nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
+ nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
+ }
+ entry = nof + nod;
+ var index = ORDERED_HASH_MAP_ENTRY_TO_INDEX(entry, numBuckets);
+ var bucket = ORDERED_HASH_TABLE_HASH_TO_BUCKET(hash, numBuckets);
+ var chainEntry = ORDERED_HASH_TABLE_BUCKET_AT(table, bucket);
+ ORDERED_HASH_TABLE_SET_BUCKET_AT(table, bucket, entry);
+ ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof + 1);
+ FIXED_ARRAY_SET(table, index, key);
+ FIXED_ARRAY_SET(table, index + 1, value);
+ FIXED_ARRAY_SET(table, index + 2, chainEntry);
+ return this;
}
- for (var nextItem of iterable) {
- if (!IS_RECEIVER(nextItem)) {
- throw %make_type_error(kIteratorValueNotAnObject, nextItem);
+ delete(key) {
+ if (!IS_MAP(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'Map.prototype.delete', this);
}
- %_Call(adder, this, nextItem[0], nextItem[1]);
+ var table = %_JSCollectionGetTable(this);
+ var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
+ var hash = GetHash(key);
+ var entry = MapFindEntry(table, numBuckets, key, hash);
+ if (entry === NOT_FOUND) return false;
+
+ var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table) - 1;
+ var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table) + 1;
+ var index = ORDERED_HASH_MAP_ENTRY_TO_INDEX(entry, numBuckets);
+ FIXED_ARRAY_SET(table, index, %_TheHole());
+ FIXED_ARRAY_SET(table, index + 1, %_TheHole());
+ ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof);
+ ORDERED_HASH_TABLE_SET_DELETED_COUNT(table, nod);
+ if (nof < (numBuckets >>> 1)) %MapShrink(this);
+ return true;
}
}
-}
-
-
-function MapGet(key) {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.get', this);
- }
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetExistingHash(key);
- if (IS_UNDEFINED(hash)) return UNDEFINED;
- var entry = MapFindEntry(table, numBuckets, key, hash);
- if (entry === NOT_FOUND) return UNDEFINED;
- return ORDERED_HASH_MAP_VALUE_AT(table, entry, numBuckets);
-}
-
-
-function MapSet(key, value) {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.set', this);
- }
- // Normalize -0 to +0 as required by the spec.
- // Even though we use SameValueZero as the comparison for the keys we don't
- // want to ever store -0 as the key since the key is directly exposed when
- // doing iteration.
- if (key === 0) {
- key = 0;
- }
-
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetHash(key);
- var entry = MapFindEntry(table, numBuckets, key, hash);
- if (entry !== NOT_FOUND) {
- var existingIndex = ORDERED_HASH_MAP_ENTRY_TO_INDEX(entry, numBuckets);
- FIXED_ARRAY_SET(table, existingIndex + 1, value);
- return this;
- }
-
- var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
- var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
- var capacity = numBuckets << 1;
- if ((nof + nod) >= capacity) {
- // Need to grow, bail out to runtime.
- %MapGrow(this);
- // Re-load state from the grown backing store.
- table = %_JSCollectionGetTable(this);
- numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
- nod = ORDERED_HASH_TABLE_DELETED_COUNT(table);
- }
- entry = nof + nod;
- var index = ORDERED_HASH_MAP_ENTRY_TO_INDEX(entry, numBuckets);
- var bucket = ORDERED_HASH_TABLE_HASH_TO_BUCKET(hash, numBuckets);
- var chainEntry = ORDERED_HASH_TABLE_BUCKET_AT(table, bucket);
- ORDERED_HASH_TABLE_SET_BUCKET_AT(table, bucket, entry);
- ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof + 1);
- FIXED_ARRAY_SET(table, index, key);
- FIXED_ARRAY_SET(table, index + 1, value);
- FIXED_ARRAY_SET(table, index + 2, chainEntry);
- return this;
-}
-
-
-function MapHas(key) {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.has', this);
- }
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetHash(key);
- return MapFindEntry(table, numBuckets, key, hash) !== NOT_FOUND;
-}
-
-
-function MapDelete(key) {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.delete', this);
- }
- var table = %_JSCollectionGetTable(this);
- var numBuckets = ORDERED_HASH_TABLE_BUCKET_COUNT(table);
- var hash = GetHash(key);
- var entry = MapFindEntry(table, numBuckets, key, hash);
- if (entry === NOT_FOUND) return false;
-
- var nof = ORDERED_HASH_TABLE_ELEMENT_COUNT(table) - 1;
- var nod = ORDERED_HASH_TABLE_DELETED_COUNT(table) + 1;
- var index = ORDERED_HASH_MAP_ENTRY_TO_INDEX(entry, numBuckets);
- FIXED_ARRAY_SET(table, index, %_TheHole());
- FIXED_ARRAY_SET(table, index + 1, %_TheHole());
- ORDERED_HASH_TABLE_SET_ELEMENT_COUNT(table, nof);
- ORDERED_HASH_TABLE_SET_DELETED_COUNT(table, nod);
- if (nof < (numBuckets >>> 1)) %MapShrink(this);
- return true;
-}
-
-
-function MapGetSize() {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.size', this);
- }
- var table = %_JSCollectionGetTable(this);
- return ORDERED_HASH_TABLE_ELEMENT_COUNT(table);
-}
-
-
-function MapClearJS() {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.clear', this);
- }
- %_MapClear(this);
-}
-
-
-function MapForEach(f, receiver) {
- if (!IS_MAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'Map.prototype.forEach', this);
- }
-
- if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f);
-
- var iterator = new MapIterator(this, ITERATOR_KIND_ENTRIES);
- var value_array = [UNDEFINED, UNDEFINED];
- while (%MapIteratorNext(iterator, value_array)) {
- %_Call(f, receiver, value_array[1], value_array[0], this);
- }
-}
-
-// -------------------------------------------------------------------
-
-%SetCode(GlobalMap, MapConstructor);
-%FunctionSetLength(GlobalMap, 0);
-%FunctionSetPrototype(GlobalMap, new GlobalObject());
-%AddNamedProperty(GlobalMap.prototype, "constructor", GlobalMap, DONT_ENUM);
-%AddNamedProperty(
- GlobalMap.prototype, toStringTagSymbol, "Map", DONT_ENUM | READ_ONLY);
-
-%FunctionSetLength(MapForEach, 1);
-
-// Set up the non-enumerable functions on the Map prototype object.
-utils.InstallGetter(GlobalMap.prototype, "size", MapGetSize);
-utils.InstallFunctions(GlobalMap.prototype, DONT_ENUM, [
- "get", MapGet,
- "set", MapSet,
- "has", MapHas,
- "delete", MapDelete,
- "clear", MapClearJS,
- "forEach", MapForEach
-]);
+);
// -----------------------------------------------------------------------
// Exports
%InstallToContext([
- "map_get", MapGet,
- "map_set", MapSet,
- "map_has", MapHas,
- "map_delete", MapDelete,
- "set_add", SetAdd,
- "set_has", SetHas,
- "set_delete", SetDelete,
+ "map_set", GlobalMap.prototype.set,
+ "map_delete", GlobalMap.prototype.delete,
+ "set_add", GlobalSet.prototype.add,
+ "set_delete", GlobalSet.prototype.delete,
]);
utils.Export(function(to) {
diff --git a/deps/v8/src/js/intl.js b/deps/v8/src/js/intl.js
index cb83cfc1f5..1579337fc1 100644
--- a/deps/v8/src/js/intl.js
+++ b/deps/v8/src/js/intl.js
@@ -29,15 +29,11 @@ var GlobalNumber = global.Number;
var GlobalRegExp = global.RegExp;
var GlobalString = global.String;
var IntlFallbackSymbol = utils.ImportNow("intl_fallback_symbol");
-var InstallFunctions = utils.InstallFunctions;
-var InstallGetter = utils.InstallGetter;
var InternalArray = utils.InternalArray;
var MaxSimple;
var ObjectHasOwnProperty = global.Object.prototype.hasOwnProperty;
-var OverrideFunction = utils.OverrideFunction;
var patternSymbol = utils.ImportNow("intl_pattern_symbol");
var resolvedSymbol = utils.ImportNow("intl_resolved_symbol");
-var SetFunctionName = utils.SetFunctionName;
var StringSubstr = GlobalString.prototype.substr;
var StringSubstring = GlobalString.prototype.substring;
@@ -49,11 +45,6 @@ utils.Import(function(from) {
// Utilities for definitions
-function InstallFunction(object, name, func) {
- InstallFunctions(object, DONT_ENUM, [name, func]);
-}
-
-
/**
* Adds bound method to the prototype of the given object.
*/
@@ -61,41 +52,36 @@ function AddBoundMethod(obj, methodName, implementation, length, typename,
compat) {
%CheckIsBootstrapping();
var internalName = %CreatePrivateSymbol(methodName);
- // Making getter an anonymous function will cause
- // %DefineGetterPropertyUnchecked to properly set the "name"
- // property on each JSFunction instance created here, rather
- // than (as utils.InstallGetter would) on the SharedFunctionInfo
- // associated with all functions returned from AddBoundMethod.
- var getter = ANONYMOUS_FUNCTION(function() {
- var receiver = Unwrap(this, typename, obj, methodName, compat);
- if (IS_UNDEFINED(receiver[internalName])) {
- var boundMethod;
- if (IS_UNDEFINED(length) || length === 2) {
- boundMethod =
- ANONYMOUS_FUNCTION((fst, snd) => implementation(receiver, fst, snd));
- } else if (length === 1) {
- boundMethod = ANONYMOUS_FUNCTION(fst => implementation(receiver, fst));
- } else {
- boundMethod = ANONYMOUS_FUNCTION((...args) => {
- // DateTimeFormat.format needs to be 0 arg method, but can still
- // receive an optional dateValue param. If one was provided, pass it
- // along.
- if (args.length > 0) {
- return implementation(receiver, args[0]);
- } else {
- return implementation(receiver);
- }
- });
+
+ DEFINE_METHOD(
+ obj.prototype,
+ get [methodName]() {
+ var receiver = Unwrap(this, typename, obj, methodName, compat);
+ if (IS_UNDEFINED(receiver[internalName])) {
+ var boundMethod;
+ if (IS_UNDEFINED(length) || length === 2) {
+ boundMethod =
+ ANONYMOUS_FUNCTION((fst, snd) => implementation(receiver, fst, snd));
+ } else if (length === 1) {
+ boundMethod = ANONYMOUS_FUNCTION(fst => implementation(receiver, fst));
+ } else {
+ boundMethod = ANONYMOUS_FUNCTION((...args) => {
+ // DateTimeFormat.format needs to be 0 arg method, but can still
+ // receive an optional dateValue param. If one was provided, pass it
+ // along.
+ if (args.length > 0) {
+ return implementation(receiver, args[0]);
+ } else {
+ return implementation(receiver);
+ }
+ });
+ }
+ %SetNativeFlag(boundMethod);
+ receiver[internalName] = boundMethod;
}
- %SetNativeFlag(boundMethod);
- receiver[internalName] = boundMethod;
+ return receiver[internalName];
}
- return receiver[internalName];
- });
-
- %FunctionRemovePrototype(getter);
- %DefineGetterPropertyUnchecked(obj.prototype, methodName, getter, DONT_ENUM);
- %SetNativeFlag(getter);
+ );
}
function IntlConstruct(receiver, constructor, create, newTarget, args,
@@ -914,7 +900,9 @@ function BuildLanguageTagREs() {
}
// ECMA 402 section 8.2.1
-InstallFunction(GlobalIntl, 'getCanonicalLocales', function(locales) {
+DEFINE_METHOD(
+ GlobalIntl,
+ getCanonicalLocales(locales) {
return makeArray(canonicalizeLocaleList(locales));
}
);
@@ -1035,7 +1023,9 @@ function CollatorConstructor() {
/**
* Collator resolvedOptions method.
*/
-InstallFunction(GlobalIntlCollator.prototype, 'resolvedOptions', function() {
+DEFINE_METHOD(
+ GlobalIntlCollator.prototype,
+ resolvedOptions() {
var coll = Unwrap(this, 'collator', GlobalIntlCollator, 'resolvedOptions',
false);
return {
@@ -1057,7 +1047,9 @@ InstallFunction(GlobalIntlCollator.prototype, 'resolvedOptions', function() {
* order in the returned list as in the input list.
* Options are optional parameter.
*/
-InstallFunction(GlobalIntlCollator, 'supportedLocalesOf', function(locales) {
+DEFINE_METHOD(
+ GlobalIntlCollator,
+ supportedLocalesOf(locales) {
return supportedLocalesOf('collator', locales, arguments[1]);
}
);
@@ -1254,8 +1246,9 @@ function NumberFormatConstructor() {
/**
* NumberFormat resolvedOptions method.
*/
-InstallFunction(GlobalIntlNumberFormat.prototype, 'resolvedOptions',
- function() {
+DEFINE_METHOD(
+ GlobalIntlNumberFormat.prototype,
+ resolvedOptions() {
var format = Unwrap(this, 'numberformat', GlobalIntlNumberFormat,
'resolvedOptions', true);
var result = {
@@ -1295,8 +1288,9 @@ InstallFunction(GlobalIntlNumberFormat.prototype, 'resolvedOptions',
* order in the returned list as in the input list.
* Options are optional parameter.
*/
-InstallFunction(GlobalIntlNumberFormat, 'supportedLocalesOf',
- function(locales) {
+DEFINE_METHOD(
+ GlobalIntlNumberFormat,
+ supportedLocalesOf(locales) {
return supportedLocalesOf('numberformat', locales, arguments[1]);
}
);
@@ -1614,8 +1608,9 @@ function DateTimeFormatConstructor() {
/**
* DateTimeFormat resolvedOptions method.
*/
-InstallFunction(GlobalIntlDateTimeFormat.prototype, 'resolvedOptions',
- function() {
+DEFINE_METHOD(
+ GlobalIntlDateTimeFormat.prototype,
+ resolvedOptions() {
var format = Unwrap(this, 'dateformat', GlobalIntlDateTimeFormat,
'resolvedOptions', true);
@@ -1666,8 +1661,9 @@ InstallFunction(GlobalIntlDateTimeFormat.prototype, 'resolvedOptions',
* order in the returned list as in the input list.
* Options are optional parameter.
*/
-InstallFunction(GlobalIntlDateTimeFormat, 'supportedLocalesOf',
- function(locales) {
+DEFINE_METHOD(
+ GlobalIntlDateTimeFormat,
+ supportedLocalesOf(locales) {
return supportedLocalesOf('dateformat', locales, arguments[1]);
}
);
@@ -1691,8 +1687,9 @@ function formatDate(formatter, dateValue) {
return %InternalDateFormat(formatter, new GlobalDate(dateMs));
}
-InstallFunction(GlobalIntlDateTimeFormat.prototype, 'formatToParts',
- function(dateValue) {
+DEFINE_METHOD(
+ GlobalIntlDateTimeFormat.prototype,
+ formatToParts(dateValue) {
CHECK_OBJECT_COERCIBLE(this, "Intl.DateTimeFormat.prototype.formatToParts");
if (!IS_OBJECT(this)) {
throw %make_type_error(kCalledOnNonObject, this);
@@ -1810,8 +1807,9 @@ function v8BreakIteratorConstructor() {
/**
* BreakIterator resolvedOptions method.
*/
-InstallFunction(GlobalIntlv8BreakIterator.prototype, 'resolvedOptions',
- function() {
+DEFINE_METHOD(
+ GlobalIntlv8BreakIterator.prototype,
+ resolvedOptions() {
if (!IS_UNDEFINED(new.target)) {
throw %make_type_error(kOrdinaryFunctionCalledAsConstructor);
}
@@ -1833,8 +1831,9 @@ InstallFunction(GlobalIntlv8BreakIterator.prototype, 'resolvedOptions',
* order in the returned list as in the input list.
* Options are optional parameter.
*/
-InstallFunction(GlobalIntlv8BreakIterator, 'supportedLocalesOf',
- function(locales) {
+DEFINE_METHOD(
+ GlobalIntlv8BreakIterator,
+ supportedLocalesOf(locales) {
if (!IS_UNDEFINED(new.target)) {
throw %make_type_error(kOrdinaryFunctionCalledAsConstructor);
}
@@ -1976,7 +1975,9 @@ function LocaleConvertCase(s, locales, isToUpper) {
* Compares this and that, and returns less than 0, 0 or greater than 0 value.
* Overrides the built-in method.
*/
-OverrideFunction(GlobalString.prototype, 'localeCompare', function(that) {
+DEFINE_METHOD(
+ GlobalString.prototype,
+ localeCompare(that) {
if (IS_NULL_OR_UNDEFINED(this)) {
throw %make_type_error(kMethodInvokedOnNullOrUndefined);
}
@@ -1988,26 +1989,31 @@ OverrideFunction(GlobalString.prototype, 'localeCompare', function(that) {
}
);
-function ToLocaleLowerCaseIntl(locales) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.toLocaleLowerCase");
- return LocaleConvertCase(TO_STRING(this), locales, false);
-}
-
-%FunctionSetLength(ToLocaleLowerCaseIntl, 0);
-
-function ToLocaleUpperCaseIntl(locales) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.toLocaleUpperCase");
- return LocaleConvertCase(TO_STRING(this), locales, true);
-}
+var StringPrototypeMethods = {};
+DEFINE_METHODS_LEN(
+ GlobalString.prototype,
+ {
+ toLocaleLowerCase(locales) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.toLocaleLowerCase");
+ return LocaleConvertCase(TO_STRING(this), locales, false);
+ }
-%FunctionSetLength(ToLocaleUpperCaseIntl, 0);
+ toLocaleUpperCase(locales) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.toLocaleUpperCase");
+ return LocaleConvertCase(TO_STRING(this), locales, true);
+ }
+ },
+ 0 /* Set function length of both methods. */
+);
/**
* Formats a Number object (this) using locale and options values.
* If locale or options are omitted, defaults are used.
*/
-OverrideFunction(GlobalNumber.prototype, 'toLocaleString', function() {
+DEFINE_METHOD(
+ GlobalNumber.prototype,
+ toLocaleString() {
if (!(this instanceof GlobalNumber) && typeof(this) !== 'number') {
throw %make_type_error(kMethodInvokedOnWrongType, "Number");
}
@@ -2045,7 +2051,9 @@ function toLocaleDateTime(date, locales, options, required, defaults, service) {
* If locale or options are omitted, defaults are used - both date and time are
* present in the output.
*/
-OverrideFunction(GlobalDate.prototype, 'toLocaleString', function() {
+DEFINE_METHOD(
+ GlobalDate.prototype,
+ toLocaleString() {
var locales = arguments[0];
var options = arguments[1];
return toLocaleDateTime(
@@ -2059,7 +2067,9 @@ OverrideFunction(GlobalDate.prototype, 'toLocaleString', function() {
* If locale or options are omitted, defaults are used - only date is present
* in the output.
*/
-OverrideFunction(GlobalDate.prototype, 'toLocaleDateString', function() {
+DEFINE_METHOD(
+ GlobalDate.prototype,
+ toLocaleDateString() {
var locales = arguments[0];
var options = arguments[1];
return toLocaleDateTime(
@@ -2073,7 +2083,9 @@ OverrideFunction(GlobalDate.prototype, 'toLocaleDateString', function() {
* If locale or options are omitted, defaults are used - only time is present
* in the output.
*/
-OverrideFunction(GlobalDate.prototype, 'toLocaleTimeString', function() {
+DEFINE_METHOD(
+ GlobalDate.prototype,
+ toLocaleTimeString() {
var locales = arguments[0];
var options = arguments[1];
return toLocaleDateTime(
@@ -2081,15 +2093,4 @@ OverrideFunction(GlobalDate.prototype, 'toLocaleTimeString', function() {
}
);
-%FunctionRemovePrototype(ToLocaleLowerCaseIntl);
-%FunctionRemovePrototype(ToLocaleUpperCaseIntl);
-
-utils.SetFunctionName(ToLocaleLowerCaseIntl, "toLocaleLowerCase");
-utils.SetFunctionName(ToLocaleUpperCaseIntl, "toLocaleUpperCase");
-
-utils.Export(function(to) {
- to.ToLocaleLowerCaseIntl = ToLocaleLowerCaseIntl;
- to.ToLocaleUpperCaseIntl = ToLocaleUpperCaseIntl;
-});
-
})
diff --git a/deps/v8/src/js/macros.py b/deps/v8/src/js/macros.py
index 08f25b1f26..329b851e4b 100644
--- a/deps/v8/src/js/macros.py
+++ b/deps/v8/src/js/macros.py
@@ -53,7 +53,7 @@ macro IS_FUNCTION(arg) = (%IsFunction(arg));
macro IS_GENERATOR(arg) = (%_ClassOf(arg) === 'Generator');
macro IS_GLOBAL(arg) = (%_ClassOf(arg) === 'global');
macro IS_MAP(arg) = (%_IsJSMap(arg));
-macro IS_MAP_ITERATOR(arg) = (%_IsJSMapIterator(arg));
+macro IS_MAP_ITERATOR(arg) = (%_ClassOf(arg) === 'Map Iterator');
macro IS_NULL(arg) = (arg === null);
macro IS_NULL_OR_UNDEFINED(arg) = (arg == null);
macro IS_NUMBER(arg) = (typeof(arg) === 'number');
@@ -61,7 +61,7 @@ macro IS_OBJECT(arg) = (typeof(arg) === 'object');
macro IS_PROXY(arg) = (%_IsJSProxy(arg));
macro IS_SCRIPT(arg) = (%_ClassOf(arg) === 'Script');
macro IS_SET(arg) = (%_IsJSSet(arg));
-macro IS_SET_ITERATOR(arg) = (%_IsJSSetIterator(arg));
+macro IS_SET_ITERATOR(arg) = (%_ClassOf(arg) === 'Set Iterator');
macro IS_SHAREDARRAYBUFFER(arg) = (%_ClassOf(arg) === 'SharedArrayBuffer');
macro IS_STRING(arg) = (typeof(arg) === 'string');
macro IS_SYMBOL(arg) = (typeof(arg) === 'symbol');
@@ -85,8 +85,6 @@ macro NUMBER_IS_NAN(arg) = (%IS_VAR(arg) !== arg);
macro NUMBER_IS_FINITE(arg) = (%_IsSmi(%IS_VAR(arg)) || ((arg == arg) && (arg != 1/0) && (arg != -1/0)));
macro TO_BOOLEAN(arg) = (!!(arg));
macro TO_INTEGER(arg) = (%_ToInteger(arg));
-macro TO_INT32(arg) = ((arg) | 0);
-macro TO_UINT32(arg) = ((arg) >>> 0);
macro INVERT_NEG_ZERO(arg) = ((arg) + 0);
macro TO_LENGTH(arg) = (%_ToLength(arg));
macro TO_STRING(arg) = (%_ToString(arg));
@@ -95,38 +93,23 @@ macro TO_OBJECT(arg) = (%_ToObject(arg));
macro HAS_OWN_PROPERTY(obj, key) = (%_Call(ObjectHasOwnProperty, obj, key));
# Private names.
-macro IS_PRIVATE(sym) = (%SymbolIsPrivate(sym));
-macro HAS_PRIVATE(obj, key) = HAS_OWN_PROPERTY(obj, key);
-macro HAS_DEFINED_PRIVATE(obj, sym) = (!IS_UNDEFINED(obj[sym]));
macro GET_PRIVATE(obj, sym) = (obj[sym]);
macro SET_PRIVATE(obj, sym, val) = (obj[sym] = val);
# To avoid ES2015 Function name inference.
macro ANONYMOUS_FUNCTION(fn) = (0, (fn));
+macro DEFINE_METHODS_LEN(obj, class_def, len) = %DefineMethodsInternal(obj, class class_def, len);
+macro DEFINE_METHOD_LEN(obj, method_def, len) = %DefineMethodsInternal(obj, class { method_def }, len);
+macro DEFINE_METHODS(obj, class_def) = DEFINE_METHODS_LEN(obj, class_def, -1);
+macro DEFINE_METHOD(obj, method_def) = DEFINE_METHOD_LEN(obj, method_def, -1);
+
# Constants. The compiler constant folds them.
define INFINITY = (1/0);
define UNDEFINED = (void 0);
-# Macros implemented in Python.
-python macro CHAR_CODE(str) = ord(str[1]);
-
-# For messages.js
-# Matches Script::Type from objects.h
-define TYPE_NATIVE = 0;
-define TYPE_EXTENSION = 1;
-define TYPE_NORMAL = 2;
-
-# Matches Script::CompilationType from objects.h
-define COMPILATION_TYPE_HOST = 0;
-define COMPILATION_TYPE_EVAL = 1;
-define COMPILATION_TYPE_JSON = 2;
-
# Must match PropertyFilter in property-details.h
define PROPERTY_FILTER_NONE = 0;
-define PROPERTY_FILTER_ONLY_ENUMERABLE = 2;
-define PROPERTY_FILTER_SKIP_STRINGS = 8;
-define PROPERTY_FILTER_SKIP_SYMBOLS = 16;
# Use for keys, values and entries iterators.
define ITERATOR_KIND_KEYS = 1;
@@ -162,35 +145,3 @@ define NOT_FOUND = -1;
# Check whether debug is active.
define DEBUG_IS_ACTIVE = (%_DebugIsActive() != 0);
-
-# UseCounters from include/v8.h
-define kUseAsm = 0;
-define kBreakIterator = 1;
-define kLegacyConst = 2;
-define kMarkDequeOverflow = 3;
-define kStoreBufferOverflow = 4;
-define kSlotsBufferOverflow = 5;
-define kForcedGC = 7;
-define kSloppyMode = 8;
-define kStrictMode = 9;
-define kRegExpPrototypeStickyGetter = 11;
-define kRegExpPrototypeToString = 12;
-define kRegExpPrototypeUnicodeGetter = 13;
-define kIntlV8Parse = 14;
-define kIntlPattern = 15;
-define kIntlResolved = 16;
-define kPromiseChain = 17;
-define kPromiseAccept = 18;
-define kPromiseDefer = 19;
-define kHtmlCommentInExternalScript = 20;
-define kHtmlComment = 21;
-define kSloppyModeBlockScopedFunctionRedefinition = 22;
-define kForInInitializer = 23;
-define kArrayProtectorDirtied = 24;
-define kArraySpeciesModified = 25;
-define kArrayPrototypeConstructorModified = 26;
-define kArrayInstanceProtoModified = 27;
-define kArrayInstanceConstructorModified = 28;
-define kLegacyFunctionDeclaration = 29;
-define kRegExpPrototypeSourceGetter = 30;
-define kRegExpPrototypeOldFlagGetter = 31;
diff --git a/deps/v8/src/js/max-min.js b/deps/v8/src/js/max-min.js
index 4b7076ed22..e451c09d1d 100644
--- a/deps/v8/src/js/max-min.js
+++ b/deps/v8/src/js/max-min.js
@@ -4,6 +4,8 @@
(function(global, utils) {
+"use strict";
+
%CheckIsBootstrapping();
function MaxSimple(a, b) {
diff --git a/deps/v8/src/js/messages.js b/deps/v8/src/js/messages.js
index 3ea2bef5ad..aebd37a791 100644
--- a/deps/v8/src/js/messages.js
+++ b/deps/v8/src/js/messages.js
@@ -6,6 +6,8 @@
(function(global, utils) {
+"use strict";
+
%CheckIsBootstrapping();
// -------------------------------------------------------------------
@@ -17,14 +19,6 @@ var Script = utils.ImportNow("Script");
// Script
/**
- * Set up the Script function and constructor.
- */
-%FunctionSetInstanceClassName(Script, 'Script');
-%AddNamedProperty(Script.prototype, 'constructor', Script,
- DONT_ENUM | DONT_DELETE | READ_ONLY);
-
-
-/**
* Get information on a specific source position.
* Returns an object with the following following properties:
* script : script object for the source
diff --git a/deps/v8/src/js/prologue.js b/deps/v8/src/js/prologue.js
index 91f36cb573..08ef3ba520 100644
--- a/deps/v8/src/js/prologue.js
+++ b/deps/v8/src/js/prologue.js
@@ -38,18 +38,6 @@ function ImportNow(name) {
}
-function SetFunctionName(f, name, prefix) {
- if (IS_SYMBOL(name)) {
- name = "[" + %SymbolDescription(name) + "]";
- }
- if (IS_UNDEFINED(prefix)) {
- %FunctionSetName(f, name);
- } else {
- %FunctionSetName(f, prefix + " " + name);
- }
-}
-
-
function InstallConstants(object, constants) {
%CheckIsBootstrapping();
%OptimizeObjectForAddingMultipleProperties(object, constants.length >> 1);
@@ -63,44 +51,6 @@ function InstallConstants(object, constants) {
}
-function InstallFunctions(object, attributes, functions) {
- %CheckIsBootstrapping();
- %OptimizeObjectForAddingMultipleProperties(object, functions.length >> 1);
- for (var i = 0; i < functions.length; i += 2) {
- var key = functions[i];
- var f = functions[i + 1];
- SetFunctionName(f, key);
- %FunctionRemovePrototype(f);
- %AddNamedProperty(object, key, f, attributes);
- %SetNativeFlag(f);
- }
- %ToFastProperties(object);
-}
-
-
-// Helper function to install a getter-only accessor property.
-function InstallGetter(object, name, getter, attributes, prefix) {
- %CheckIsBootstrapping();
- if (IS_UNDEFINED(attributes)) attributes = DONT_ENUM;
- SetFunctionName(getter, name, IS_UNDEFINED(prefix) ? "get" : prefix);
- %FunctionRemovePrototype(getter);
- %DefineGetterPropertyUnchecked(object, name, getter, attributes);
- %SetNativeFlag(getter);
-}
-
-
-function OverrideFunction(object, name, f, afterInitialBootstrap) {
- %CheckIsBootstrapping();
- %object_define_property(object, name, { value: f,
- writeable: true,
- configurable: true,
- enumerable: false });
- SetFunctionName(f, name);
- if (!afterInitialBootstrap) %FunctionRemovePrototype(f);
- %SetNativeFlag(f);
-}
-
-
// Prevents changes to the prototype of a built-in function.
// The "prototype" property of the function object is made non-configurable,
// and the prototype object is made non-extensible. The latter prevents
@@ -156,11 +106,7 @@ function PostNatives(utils) {
utils.Import = Import;
utils.ImportNow = ImportNow;
utils.Export = Export;
-utils.SetFunctionName = SetFunctionName;
utils.InstallConstants = InstallConstants;
-utils.InstallFunctions = InstallFunctions;
-utils.InstallGetter = InstallGetter;
-utils.OverrideFunction = OverrideFunction;
utils.SetUpLockedPrototype = SetUpLockedPrototype;
utils.PostNatives = PostNatives;
diff --git a/deps/v8/src/js/promise.js b/deps/v8/src/js/promise.js
deleted file mode 100644
index 27571daabb..0000000000
--- a/deps/v8/src/js/promise.js
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright 2012 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-(function(global, utils, extrasUtils) {
-
-"use strict";
-
-%CheckIsBootstrapping();
-
-// -------------------------------------------------------------------
-// Imports
-
-var InternalArray = utils.InternalArray;
-var promiseHandledBySymbol =
- utils.ImportNow("promise_handled_by_symbol");
-var promiseForwardingHandlerSymbol =
- utils.ImportNow("promise_forwarding_handler_symbol");
-var GlobalPromise = global.Promise;
-
-// -------------------------------------------------------------------
-// Define exported functions.
-
-// Combinators.
-
-// ES#sec-promise.all
-// Promise.all ( iterable )
-function PromiseAll(iterable) {
- if (!IS_RECEIVER(this)) {
- throw %make_type_error(kCalledOnNonObject, "Promise.all");
- }
-
- // false debugEvent so that forwarding the rejection through all does not
- // trigger redundant ExceptionEvents
- var deferred = %new_promise_capability(this, false);
- var resolutions = new InternalArray();
- var count;
-
- // For catch prediction, don't treat the .then calls as handling it;
- // instead, recurse outwards.
- var instrumenting = DEBUG_IS_ACTIVE;
- if (instrumenting) {
- SET_PRIVATE(deferred.reject, promiseForwardingHandlerSymbol, true);
- }
-
- function CreateResolveElementFunction(index, values, promiseCapability) {
- var alreadyCalled = false;
- return (x) => {
- if (alreadyCalled === true) return;
- alreadyCalled = true;
- values[index] = x;
- if (--count === 0) {
- var valuesArray = [];
- %MoveArrayContents(values, valuesArray);
- %_Call(promiseCapability.resolve, UNDEFINED, valuesArray);
- }
- };
- }
-
- try {
- var i = 0;
- count = 1;
- for (var value of iterable) {
- var nextPromise = this.resolve(value);
- ++count;
- var throwawayPromise = nextPromise.then(
- CreateResolveElementFunction(i, resolutions, deferred),
- deferred.reject);
- // For catch prediction, mark that rejections here are semantically
- // handled by the combined Promise.
- if (instrumenting && %is_promise(throwawayPromise)) {
- SET_PRIVATE(throwawayPromise, promiseHandledBySymbol, deferred.promise);
- }
- ++i;
- }
-
- // 6.d
- if (--count === 0) {
- var valuesArray = [];
- %MoveArrayContents(resolutions, valuesArray);
- %_Call(deferred.resolve, UNDEFINED, valuesArray);
- }
-
- } catch (e) {
- %_Call(deferred.reject, UNDEFINED, e);
- }
- return deferred.promise;
-}
-
-// ES#sec-promise.race
-// Promise.race ( iterable )
-function PromiseRace(iterable) {
- if (!IS_RECEIVER(this)) {
- throw %make_type_error(kCalledOnNonObject, PromiseRace);
- }
-
- // false debugEvent so that forwarding the rejection through race does not
- // trigger redundant ExceptionEvents
- var deferred = %new_promise_capability(this, false);
-
- // For catch prediction, don't treat the .then calls as handling it;
- // instead, recurse outwards.
- var instrumenting = DEBUG_IS_ACTIVE;
- if (instrumenting) {
- SET_PRIVATE(deferred.reject, promiseForwardingHandlerSymbol, true);
- }
-
- try {
- for (var value of iterable) {
- var throwawayPromise = this.resolve(value).then(deferred.resolve,
- deferred.reject);
- // For catch prediction, mark that rejections here are semantically
- // handled by the combined Promise.
- if (instrumenting && %is_promise(throwawayPromise)) {
- SET_PRIVATE(throwawayPromise, promiseHandledBySymbol, deferred.promise);
- }
- }
- } catch (e) {
- %_Call(deferred.reject, UNDEFINED, e);
- }
- return deferred.promise;
-}
-
-// -------------------------------------------------------------------
-// Install exported functions.
-
-utils.InstallFunctions(GlobalPromise, DONT_ENUM, [
- "all", PromiseAll,
- "race", PromiseRace,
-]);
-
-})
diff --git a/deps/v8/src/js/proxy.js b/deps/v8/src/js/proxy.js
index a111c09427..4b6255a8ff 100644
--- a/deps/v8/src/js/proxy.js
+++ b/deps/v8/src/js/proxy.js
@@ -15,16 +15,13 @@ var GlobalProxy = global.Proxy;
//----------------------------------------------------------------------------
-function ProxyCreateRevocable(target, handler) {
- var p = new GlobalProxy(target, handler);
- return {proxy: p, revoke: () => %JSProxyRevoke(p)};
-}
-
-//-------------------------------------------------------------------
-
//Set up non-enumerable properties of the Proxy object.
-utils.InstallFunctions(GlobalProxy, DONT_ENUM, [
- "revocable", ProxyCreateRevocable
-]);
+DEFINE_METHOD(
+ GlobalProxy,
+ revocable(target, handler) {
+ var p = new GlobalProxy(target, handler);
+ return {proxy: p, revoke: () => %JSProxyRevoke(p)};
+ }
+);
})
diff --git a/deps/v8/src/js/spread.js b/deps/v8/src/js/spread.js
index 39b12e7a8e..0b56ca7edd 100644
--- a/deps/v8/src/js/spread.js
+++ b/deps/v8/src/js/spread.js
@@ -4,7 +4,7 @@
(function(global, utils) {
-'use strict';
+"use strict";
// -------------------------------------------------------------------
// Imports
diff --git a/deps/v8/src/js/string.js b/deps/v8/src/js/string.js
index a3a59d5fde..521afc2c42 100644
--- a/deps/v8/src/js/string.js
+++ b/deps/v8/src/js/string.js
@@ -4,6 +4,8 @@
(function(global, utils) {
+"use strict";
+
%CheckIsBootstrapping();
// -------------------------------------------------------------------
@@ -15,188 +17,179 @@ var searchSymbol = utils.ImportNow("search_symbol");
//-------------------------------------------------------------------
-// ES6 21.1.3.11.
-function StringMatchJS(pattern) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.match");
-
- if (!IS_NULL_OR_UNDEFINED(pattern)) {
- var matcher = pattern[matchSymbol];
- if (!IS_UNDEFINED(matcher)) {
- return %_Call(matcher, pattern, this);
- }
- }
-
- var subject = TO_STRING(this);
-
- // Equivalent to RegExpCreate (ES#sec-regexpcreate)
- var regexp = %RegExpCreate(pattern);
- return regexp[matchSymbol](subject);
-}
-
-// ES6 21.1.3.15.
-function StringSearch(pattern) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.search");
-
- if (!IS_NULL_OR_UNDEFINED(pattern)) {
- var searcher = pattern[searchSymbol];
- if (!IS_UNDEFINED(searcher)) {
- return %_Call(searcher, pattern, this);
- }
- }
-
- var subject = TO_STRING(this);
-
- // Equivalent to RegExpCreate (ES#sec-regexpcreate)
- var regexp = %RegExpCreate(pattern);
- return %_Call(regexp[searchSymbol], regexp, subject);
-}
-
-
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.2.1
+// ES#sec-createhtml
function HtmlEscape(str) {
return %RegExpInternalReplace(/"/g, TO_STRING(str), "&quot;");
}
+// Set up the non-enumerable functions on the String prototype object.
+DEFINE_METHODS(
+ GlobalString.prototype,
+ {
+ /* ES#sec-string.prototype.match */
+ match(pattern) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.match");
+
+ if (!IS_NULL_OR_UNDEFINED(pattern)) {
+ var matcher = pattern[matchSymbol];
+ if (!IS_UNDEFINED(matcher)) {
+ return %_Call(matcher, pattern, this);
+ }
+ }
+
+ var subject = TO_STRING(this);
+
+ // Equivalent to RegExpCreate (ES#sec-regexpcreate)
+ var regexp = %RegExpCreate(pattern);
+ return regexp[matchSymbol](subject);
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.2
-function StringAnchor(name) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.anchor");
- return "<a name=\"" + HtmlEscape(name) + "\">" + TO_STRING(this) +
- "</a>";
-}
-
-
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.3
-function StringBig() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.big");
- return "<big>" + TO_STRING(this) + "</big>";
-}
-
-
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.4
-function StringBlink() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.blink");
- return "<blink>" + TO_STRING(this) + "</blink>";
-}
-
-
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.5
-function StringBold() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.bold");
- return "<b>" + TO_STRING(this) + "</b>";
-}
-
-
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.6
-function StringFixed() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.fixed");
- return "<tt>" + TO_STRING(this) + "</tt>";
-}
-
+ /* ES#sec-string.prototype.search */
+ search(pattern) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.search");
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.7
-function StringFontcolor(color) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.fontcolor");
- return "<font color=\"" + HtmlEscape(color) + "\">" + TO_STRING(this) +
- "</font>";
-}
+ if (!IS_NULL_OR_UNDEFINED(pattern)) {
+ var searcher = pattern[searchSymbol];
+ if (!IS_UNDEFINED(searcher)) {
+ return %_Call(searcher, pattern, this);
+ }
+ }
+ var subject = TO_STRING(this);
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.8
-function StringFontsize(size) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.fontsize");
- return "<font size=\"" + HtmlEscape(size) + "\">" + TO_STRING(this) +
- "</font>";
-}
-
+ // Equivalent to RegExpCreate (ES#sec-regexpcreate)
+ var regexp = %RegExpCreate(pattern);
+ return %_Call(regexp[searchSymbol], regexp, subject);
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.9
-function StringItalics() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.italics");
- return "<i>" + TO_STRING(this) + "</i>";
-}
+ /* ES#sec-string.prototype.anchor */
+ anchor(name) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.anchor");
+ return "<a name=\"" + HtmlEscape(name) + "\">" + TO_STRING(this) +
+ "</a>";
+ }
+ /* ES#sec-string.prototype.big */
+ big() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.big");
+ return "<big>" + TO_STRING(this) + "</big>";
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.10
-function StringLink(s) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.link");
- return "<a href=\"" + HtmlEscape(s) + "\">" + TO_STRING(this) + "</a>";
-}
+ /* ES#sec-string.prototype.blink */
+ blink() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.blink");
+ return "<blink>" + TO_STRING(this) + "</blink>";
+ }
+ /* ES#sec-string.prototype.bold */
+ bold() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.bold");
+ return "<b>" + TO_STRING(this) + "</b>";
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.11
-function StringSmall() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.small");
- return "<small>" + TO_STRING(this) + "</small>";
-}
+ /* ES#sec-string.prototype.fixed */
+ fixed() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.fixed");
+ return "<tt>" + TO_STRING(this) + "</tt>";
+ }
+ /* ES#sec-string.prototype.fontcolor */
+ fontcolor(color) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.fontcolor");
+ return "<font color=\"" + HtmlEscape(color) + "\">" + TO_STRING(this) +
+ "</font>";
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.12
-function StringStrike() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.strike");
- return "<strike>" + TO_STRING(this) + "</strike>";
-}
+ /* ES#sec-string.prototype.fontsize */
+ fontsize(size) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.fontsize");
+ return "<font size=\"" + HtmlEscape(size) + "\">" + TO_STRING(this) +
+ "</font>";
+ }
+ /* ES#sec-string.prototype.italics */
+ italics() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.italics");
+ return "<i>" + TO_STRING(this) + "</i>";
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.13
-function StringSub() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.sub");
- return "<sub>" + TO_STRING(this) + "</sub>";
-}
+ /* ES#sec-string.prototype.link */
+ link(s) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.link");
+ return "<a href=\"" + HtmlEscape(s) + "\">" + TO_STRING(this) + "</a>";
+ }
+ /* ES#sec-string.prototype.small */
+ small() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.small");
+ return "<small>" + TO_STRING(this) + "</small>";
+ }
-// ES6 draft, revision 26 (2014-07-18), section B.2.3.14
-function StringSup() {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.sup");
- return "<sup>" + TO_STRING(this) + "</sup>";
-}
+ /* ES#sec-string.prototype.strike */
+ strike() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.strike");
+ return "<strike>" + TO_STRING(this) + "</strike>";
+ }
-// ES6, section 21.1.3.13
-function StringRepeat(count) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.repeat");
+ /* ES#sec-string.prototype.sub */
+ sub() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.sub");
+ return "<sub>" + TO_STRING(this) + "</sub>";
+ }
- var s = TO_STRING(this);
- var n = TO_INTEGER(count);
+ /* ES#sec-string.prototype.sup */
+ sup() {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.sup");
+ return "<sup>" + TO_STRING(this) + "</sup>";
+ }
- if (n < 0 || n === INFINITY) throw %make_range_error(kInvalidCountValue);
+ /* ES#sec-string.prototype.repeat */
+ repeat(count) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.repeat");
- // Early return to allow an arbitrarily-large repeat of the empty string.
- if (s.length === 0) return "";
+ var s = TO_STRING(this);
+ var n = TO_INTEGER(count);
- // The maximum string length is stored in a smi, so a longer repeat
- // must result in a range error.
- if (n > %_MaxSmi()) throw %make_range_error(kInvalidStringLength);
+ if (n < 0 || n === INFINITY) throw %make_range_error(kInvalidCountValue);
- var r = "";
- while (true) {
- if (n & 1) r += s;
- n >>= 1;
- if (n === 0) return r;
- s += s;
- }
-}
+ // Early return to allow an arbitrarily-large repeat of the empty string.
+ if (s.length === 0) return "";
+ // The maximum string length is stored in a smi, so a longer repeat
+ // must result in a range error.
+ if (n > %_MaxSmi()) throw %make_range_error(kInvalidStringLength);
-// ES6 Draft 05-22-2014, section 21.1.3.3
-function StringCodePointAt(pos) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.codePointAt");
+ var r = "";
+ while (true) {
+ if (n & 1) r += s;
+ n >>= 1;
+ if (n === 0) return r;
+ s += s;
+ }
+ }
- var string = TO_STRING(this);
- var size = string.length;
- pos = TO_INTEGER(pos);
- if (pos < 0 || pos >= size) {
- return UNDEFINED;
- }
- var first = %_StringCharCodeAt(string, pos);
- if (first < 0xD800 || first > 0xDBFF || pos + 1 == size) {
- return first;
- }
- var second = %_StringCharCodeAt(string, pos + 1);
- if (second < 0xDC00 || second > 0xDFFF) {
- return first;
+ /* ES#sec-string.prototype.codepointat */
+ codePointAt(pos) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.codePointAt");
+
+ var string = TO_STRING(this);
+ var size = string.length;
+ pos = TO_INTEGER(pos);
+ if (pos < 0 || pos >= size) {
+ return UNDEFINED;
+ }
+ var first = %_StringCharCodeAt(string, pos);
+ if (first < 0xD800 || first > 0xDBFF || pos + 1 == size) {
+ return first;
+ }
+ var second = %_StringCharCodeAt(string, pos + 1);
+ if (second < 0xDC00 || second > 0xDFFF) {
+ return first;
+ }
+ return (first - 0xD800) * 0x400 + second + 0x2400;
+ }
}
- return (first - 0xD800) * 0x400 + second + 0x2400;
-}
+);
function StringPad(thisString, maxLength, fillString) {
maxLength = TO_LENGTH(maxLength);
@@ -233,78 +226,58 @@ function StringPad(thisString, maxLength, fillString) {
return filler;
}
-// ES#sec-string.prototype.padstart
-// String.prototype.padStart(maxLength [, fillString])
-function StringPadStart(maxLength, fillString) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.padStart");
- var thisString = TO_STRING(this);
+DEFINE_METHODS_LEN(
+ GlobalString.prototype,
+ {
+ /* ES#sec-string.prototype.padstart */
+ /* String.prototype.padStart(maxLength [, fillString]) */
+ padStart(maxLength, fillString) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.padStart");
+ var thisString = TO_STRING(this);
- return StringPad(thisString, maxLength, fillString) + thisString;
-}
-%FunctionSetLength(StringPadStart, 1);
+ return StringPad(thisString, maxLength, fillString) + thisString;
+ }
-// ES#sec-string.prototype.padend
-// String.prototype.padEnd(maxLength [, fillString])
-function StringPadEnd(maxLength, fillString) {
- CHECK_OBJECT_COERCIBLE(this, "String.prototype.padEnd");
- var thisString = TO_STRING(this);
+ /* ES#sec-string.prototype.padend */
+ /* String.prototype.padEnd(maxLength [, fillString]) */
+ padEnd(maxLength, fillString) {
+ CHECK_OBJECT_COERCIBLE(this, "String.prototype.padEnd");
+ var thisString = TO_STRING(this);
- return thisString + StringPad(thisString, maxLength, fillString);
-}
-%FunctionSetLength(StringPadEnd, 1);
+ return thisString + StringPad(thisString, maxLength, fillString);
+ }
+ },
+ 1 /* Set functions length */
+);
// -------------------------------------------------------------------
// String methods related to templates
-// ES6 Draft 03-17-2015, section 21.1.2.4
-function StringRaw(callSite) {
- "use strict";
- var numberOfSubstitutions = arguments.length;
- var cooked = TO_OBJECT(callSite);
- var raw = TO_OBJECT(cooked.raw);
- var literalSegments = TO_LENGTH(raw.length);
- if (literalSegments <= 0) return "";
-
- var result = TO_STRING(raw[0]);
-
- for (var i = 1; i < literalSegments; ++i) {
- if (i < numberOfSubstitutions) {
- result += TO_STRING(arguments[i]);
+// Set up the non-enumerable functions on the String object.
+DEFINE_METHOD(
+ GlobalString,
+
+ /* ES#sec-string.raw */
+ raw(callSite) {
+ var numberOfSubstitutions = arguments.length;
+ var cooked = TO_OBJECT(callSite);
+ var raw = TO_OBJECT(cooked.raw);
+ var literalSegments = TO_LENGTH(raw.length);
+ if (literalSegments <= 0) return "";
+
+ var result = TO_STRING(raw[0]);
+
+ for (var i = 1; i < literalSegments; ++i) {
+ if (i < numberOfSubstitutions) {
+ result += TO_STRING(arguments[i]);
+ }
+ result += TO_STRING(raw[i]);
}
- result += TO_STRING(raw[i]);
- }
- return result;
-}
+ return result;
+ }
+);
// -------------------------------------------------------------------
-// Set up the non-enumerable functions on the String object.
-utils.InstallFunctions(GlobalString, DONT_ENUM, [
- "raw", StringRaw
-]);
-
-// Set up the non-enumerable functions on the String prototype object.
-utils.InstallFunctions(GlobalString.prototype, DONT_ENUM, [
- "codePointAt", StringCodePointAt,
- "match", StringMatchJS,
- "padEnd", StringPadEnd,
- "padStart", StringPadStart,
- "repeat", StringRepeat,
- "search", StringSearch,
- "link", StringLink,
- "anchor", StringAnchor,
- "fontcolor", StringFontcolor,
- "fontsize", StringFontsize,
- "big", StringBig,
- "blink", StringBlink,
- "bold", StringBold,
- "fixed", StringFixed,
- "italics", StringItalics,
- "small", StringSmall,
- "strike", StringStrike,
- "sub", StringSub,
- "sup", StringSup
-]);
-
})
diff --git a/deps/v8/src/js/typedarray.js b/deps/v8/src/js/typedarray.js
index 1c65c32dbd..caced99321 100644
--- a/deps/v8/src/js/typedarray.js
+++ b/deps/v8/src/js/typedarray.js
@@ -233,18 +233,21 @@ endmacro
TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR)
-function TypedArraySubArray(begin, end) {
- switch (%_ClassOf(this)) {
+DEFINE_METHOD(
+ GlobalTypedArray.prototype,
+ subarray(begin, end) {
+ switch (%_ClassOf(this)) {
macro TYPED_ARRAY_SUBARRAY_CASE(NAME, ELEMENT_SIZE)
- case "NAME":
- return %_Call(NAMESubArray, this, begin, end);
+ case "NAME":
+ return %_Call(NAMESubArray, this, begin, end);
endmacro
TYPED_ARRAYS(TYPED_ARRAY_SUBARRAY_CASE)
+ }
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ "get %TypedArray%.prototype.subarray", this);
}
- throw %make_type_error(kIncompatibleMethodReceiver,
- "get %TypedArray%.prototype.subarray", this);
-}
-%SetForceInlineFlag(TypedArraySubArray);
+);
+%SetForceInlineFlag(GlobalTypedArray.prototype.subarray);
@@ -314,87 +317,64 @@ function TypedArraySetFromOverlappingTypedArray(target, source, offset) {
}
}
-function TypedArraySet(obj, offset) {
- var intOffset = IS_UNDEFINED(offset) ? 0 : TO_INTEGER(offset);
- if (intOffset < 0) throw %make_type_error(kTypedArraySetNegativeOffset);
+DEFINE_METHOD_LEN(
+ GlobalTypedArray.prototype,
+ set(obj, offset) {
+ var intOffset = IS_UNDEFINED(offset) ? 0 : TO_INTEGER(offset);
+ if (intOffset < 0) throw %make_type_error(kTypedArraySetNegativeOffset);
- if (intOffset > %_MaxSmi()) {
- throw %make_range_error(kTypedArraySetSourceTooLarge);
- }
+ if (intOffset > %_MaxSmi()) {
+ throw %make_range_error(kTypedArraySetSourceTooLarge);
+ }
- switch (%TypedArraySetFastCases(this, obj, intOffset)) {
- // These numbers should be synchronized with runtime.cc.
- case 0: // TYPED_ARRAY_SET_TYPED_ARRAY_SAME_TYPE
- return;
- case 1: // TYPED_ARRAY_SET_TYPED_ARRAY_OVERLAPPING
- TypedArraySetFromOverlappingTypedArray(this, obj, intOffset);
- return;
- case 2: // TYPED_ARRAY_SET_TYPED_ARRAY_NONOVERLAPPING
- if (intOffset === 0) {
- %TypedArrayCopyElements(this, obj, %_TypedArrayGetLength(obj));
- } else {
- TypedArraySetFromArrayLike(
- this, obj, %_TypedArrayGetLength(obj), intOffset);
- }
- return;
- case 3: // TYPED_ARRAY_SET_NON_TYPED_ARRAY
- var l = obj.length;
- if (IS_UNDEFINED(l)) {
- if (IS_NUMBER(obj)) {
- // For number as a first argument, throw TypeError
- // instead of silently ignoring the call, so that
- // users know they did something wrong.
- // (Consistent with Firefox and Blink/WebKit)
- throw %make_type_error(kInvalidArgument);
+ switch (%TypedArraySetFastCases(this, obj, intOffset)) {
+ // These numbers should be synchronized with runtime.cc.
+ case 0: // TYPED_ARRAY_SET_TYPED_ARRAY_SAME_TYPE
+ return;
+ case 1: // TYPED_ARRAY_SET_TYPED_ARRAY_OVERLAPPING
+ TypedArraySetFromOverlappingTypedArray(this, obj, intOffset);
+ return;
+ case 2: // TYPED_ARRAY_SET_TYPED_ARRAY_NONOVERLAPPING
+ if (intOffset === 0) {
+ %TypedArrayCopyElements(this, obj, %_TypedArrayGetLength(obj));
+ } else {
+ TypedArraySetFromArrayLike(
+ this, obj, %_TypedArrayGetLength(obj), intOffset);
}
return;
- }
- l = TO_LENGTH(l);
- if (intOffset + l > %_TypedArrayGetLength(this)) {
- throw %make_range_error(kTypedArraySetSourceTooLarge);
- }
- TypedArraySetFromArrayLike(this, obj, l, intOffset);
- return;
- }
-}
-%FunctionSetLength(TypedArraySet, 1);
-
-function TypedArrayGetToStringTag() {
- if (!IS_TYPEDARRAY(this)) return;
- var name = %_ClassOf(this);
- if (IS_UNDEFINED(name)) return;
- return name;
-}
-
-function InnerTypedArrayForEach(f, receiver, array, length) {
- if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f);
-
- if (IS_UNDEFINED(receiver)) {
- for (var i = 0; i < length; i++) {
- if (i in array) {
- var element = array[i];
- f(element, i, array);
- }
- }
- } else {
- for (var i = 0; i < length; i++) {
- if (i in array) {
- var element = array[i];
- %_Call(f, receiver, element, i, array);
- }
+ case 3: // TYPED_ARRAY_SET_NON_TYPED_ARRAY
+ var l = obj.length;
+ if (IS_UNDEFINED(l)) {
+ if (IS_NUMBER(obj)) {
+ // For number as a first argument, throw TypeError
+ // instead of silently ignoring the call, so that
+ // users know they did something wrong.
+ // (Consistent with Firefox and Blink/WebKit)
+ throw %make_type_error(kInvalidArgument);
+ }
+ return;
+ }
+ l = TO_LENGTH(l);
+ if (intOffset + l > %_TypedArrayGetLength(this)) {
+ throw %make_range_error(kTypedArraySetSourceTooLarge);
+ }
+ TypedArraySetFromArrayLike(this, obj, l, intOffset);
+ return;
}
+ },
+ 1 /* Set function length. */
+);
+
+
+DEFINE_METHOD(
+ GlobalTypedArray.prototype,
+ get [toStringTagSymbol]() {
+ if (!IS_TYPEDARRAY(this)) return;
+ var name = %_ClassOf(this);
+ if (IS_UNDEFINED(name)) return;
+ return name;
}
-}
-
-// ES6 draft 08-24-14, section 22.2.3.12
-function TypedArrayForEach(f, receiver) {
- ValidateTypedArray(this, "%TypedArray%.prototype.forEach");
-
- var length = %_TypedArrayGetLength(this);
-
- InnerTypedArrayForEach(f, receiver, this, length);
-}
-%FunctionSetLength(TypedArrayForEach, 1);
+);
// The following functions cannot be made efficient on sparse arrays while
// preserving the semantics, since the calls to the receiver function can add
@@ -415,88 +395,109 @@ function InnerTypedArrayFilter(f, receiver, array, length, result) {
// ES6 draft 07-15-13, section 22.2.3.9
-function TypedArrayFilter(f, thisArg) {
- ValidateTypedArray(this, "%TypeArray%.prototype.filter");
-
- var length = %_TypedArrayGetLength(this);
- if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f);
- var result = new InternalArray();
- InnerTypedArrayFilter(f, thisArg, this, length, result);
- var captured = result.length;
- var output = TypedArraySpeciesCreate(this, captured);
- for (var i = 0; i < captured; i++) {
- output[i] = result[i];
- }
- return output;
-}
-%FunctionSetLength(TypedArrayFilter, 1);
+DEFINE_METHOD_LEN(
+ GlobalTypedArray.prototype,
+ filter(f, thisArg) {
+ ValidateTypedArray(this, "%TypeArray%.prototype.filter");
+
+ var length = %_TypedArrayGetLength(this);
+ if (!IS_CALLABLE(f)) throw %make_type_error(kCalledNonCallable, f);
+ var result = new InternalArray();
+ InnerTypedArrayFilter(f, thisArg, this, length, result);
+ var captured = result.length;
+ var output = TypedArraySpeciesCreate(this, captured);
+ for (var i = 0; i < captured; i++) {
+ output[i] = result[i];
+ }
+ return output;
+ },
+ 1 /* Set function length. */
+);
// ES6 draft 07-15-13, section 22.2.3.10
-function TypedArrayFind(predicate, thisArg) {
- ValidateTypedArray(this, "%TypedArray%.prototype.find");
+DEFINE_METHOD_LEN(
+ GlobalTypedArray.prototype,
+ find(predicate, thisArg) {
+ ValidateTypedArray(this, "%TypedArray%.prototype.find");
- var length = %_TypedArrayGetLength(this);
+ var length = %_TypedArrayGetLength(this);
- return InnerArrayFind(predicate, thisArg, this, length);
-}
-%FunctionSetLength(TypedArrayFind, 1);
+ return InnerArrayFind(predicate, thisArg, this, length);
+ },
+ 1 /* Set function length. */
+);
// ES6 draft 07-15-13, section 22.2.3.11
-function TypedArrayFindIndex(predicate, thisArg) {
- ValidateTypedArray(this, "%TypedArray%.prototype.findIndex");
+DEFINE_METHOD_LEN(
+ GlobalTypedArray.prototype,
+ findIndex(predicate, thisArg) {
+ ValidateTypedArray(this, "%TypedArray%.prototype.findIndex");
- var length = %_TypedArrayGetLength(this);
+ var length = %_TypedArrayGetLength(this);
- return InnerArrayFindIndex(predicate, thisArg, this, length);
-}
-%FunctionSetLength(TypedArrayFindIndex, 1);
+ return InnerArrayFindIndex(predicate, thisArg, this, length);
+ },
+ 1 /* Set function length. */
+);
// ES6 draft 05-18-15, section 22.2.3.25
-function TypedArraySort(comparefn) {
- ValidateTypedArray(this, "%TypedArray%.prototype.sort");
+DEFINE_METHOD(
+ GlobalTypedArray.prototype,
+ sort(comparefn) {
+ ValidateTypedArray(this, "%TypedArray%.prototype.sort");
- var length = %_TypedArrayGetLength(this);
+ var length = %_TypedArrayGetLength(this);
- if (IS_UNDEFINED(comparefn)) {
- return %TypedArraySortFast(this);
- }
+ if (IS_UNDEFINED(comparefn)) {
+ return %TypedArraySortFast(this);
+ }
- return InnerArraySort(this, length, comparefn);
-}
+ return InnerArraySort(this, length, comparefn);
+ }
+);
// ES6 section 22.2.3.27
-function TypedArrayToLocaleString() {
- ValidateTypedArray(this, "%TypedArray%.prototype.toLocaleString");
+DEFINE_METHOD(
+ GlobalTypedArray.prototype,
+ toLocaleString() {
+ ValidateTypedArray(this, "%TypedArray%.prototype.toLocaleString");
- var length = %_TypedArrayGetLength(this);
+ var length = %_TypedArrayGetLength(this);
- return InnerArrayToLocaleString(this, length);
-}
+ return InnerArrayToLocaleString(this, length);
+ }
+);
// ES6 section 22.2.3.14
-function TypedArrayJoin(separator) {
- ValidateTypedArray(this, "%TypedArray%.prototype.join");
+DEFINE_METHOD(
+ GlobalTypedArray.prototype,
+ join(separator) {
+ ValidateTypedArray(this, "%TypedArray%.prototype.join");
- var length = %_TypedArrayGetLength(this);
+ var length = %_TypedArrayGetLength(this);
- return InnerArrayJoin(separator, this, length);
-}
+ return InnerArrayJoin(separator, this, length);
+ }
+);
// ES6 draft 08-24-14, section 22.2.2.2
-function TypedArrayOf() {
- var length = arguments.length;
- var array = TypedArrayCreate(this, length);
- for (var i = 0; i < length; i++) {
- array[i] = arguments[i];
+DEFINE_METHOD(
+ GlobalTypedArray,
+ of() {
+ var length = arguments.length;
+ var array = TypedArrayCreate(this, length);
+ for (var i = 0; i < length; i++) {
+ array[i] = arguments[i];
+ }
+ return array;
}
- return array;
-}
+);
// ES#sec-iterabletoarraylike Runtime Semantics: IterableToArrayLike( items )
@@ -520,31 +521,34 @@ function IterableToArrayLike(items) {
// ES#sec-%typedarray%.from
// %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
-function TypedArrayFrom(source, mapfn, thisArg) {
- if (!%IsConstructor(this)) throw %make_type_error(kNotConstructor, this);
- var mapping;
- if (!IS_UNDEFINED(mapfn)) {
- if (!IS_CALLABLE(mapfn)) throw %make_type_error(kCalledNonCallable, this);
- mapping = true;
- } else {
- mapping = false;
- }
- var arrayLike = IterableToArrayLike(source);
- var length = TO_LENGTH(arrayLike.length);
- var targetObject = TypedArrayCreate(this, length);
- var value, mappedValue;
- for (var i = 0; i < length; i++) {
- value = arrayLike[i];
- if (mapping) {
- mappedValue = %_Call(mapfn, thisArg, value, i);
+DEFINE_METHOD_LEN(
+ GlobalTypedArray,
+ 'from'(source, mapfn, thisArg) {
+ if (!%IsConstructor(this)) throw %make_type_error(kNotConstructor, this);
+ var mapping;
+ if (!IS_UNDEFINED(mapfn)) {
+ if (!IS_CALLABLE(mapfn)) throw %make_type_error(kCalledNonCallable, this);
+ mapping = true;
} else {
- mappedValue = value;
+ mapping = false;
}
- targetObject[i] = mappedValue;
- }
- return targetObject;
-}
-%FunctionSetLength(TypedArrayFrom, 1);
+ var arrayLike = IterableToArrayLike(source);
+ var length = TO_LENGTH(arrayLike.length);
+ var targetObject = TypedArrayCreate(this, length);
+ var value, mappedValue;
+ for (var i = 0; i < length; i++) {
+ value = arrayLike[i];
+ if (mapping) {
+ mappedValue = %_Call(mapfn, thisArg, value, i);
+ } else {
+ mappedValue = value;
+ }
+ targetObject[i] = mappedValue;
+ }
+ return targetObject;
+ },
+ 1 /* Set function length. */
+);
// TODO(bmeurer): Migrate this to a proper builtin.
function TypedArrayConstructor() {
@@ -554,23 +558,7 @@ function TypedArrayConstructor() {
// -------------------------------------------------------------------
%SetCode(GlobalTypedArray, TypedArrayConstructor);
-utils.InstallFunctions(GlobalTypedArray, DONT_ENUM, [
- "from", TypedArrayFrom,
- "of", TypedArrayOf
-]);
-utils.InstallGetter(GlobalTypedArray.prototype, toStringTagSymbol,
- TypedArrayGetToStringTag);
-utils.InstallFunctions(GlobalTypedArray.prototype, DONT_ENUM, [
- "subarray", TypedArraySubArray,
- "set", TypedArraySet,
- "filter", TypedArrayFilter,
- "find", TypedArrayFind,
- "findIndex", TypedArrayFindIndex,
- "join", TypedArrayJoin,
- "forEach", TypedArrayForEach,
- "sort", TypedArraySort,
- "toLocaleString", TypedArrayToLocaleString
-]);
+
%AddNamedProperty(GlobalTypedArray.prototype, "toString", ArrayToString,
DONT_ENUM);
diff --git a/deps/v8/src/js/v8natives.js b/deps/v8/src/js/v8natives.js
index 5ae75bae22..5de98a0a09 100644
--- a/deps/v8/src/js/v8natives.js
+++ b/deps/v8/src/js/v8natives.js
@@ -4,6 +4,8 @@
(function(global, utils) {
+"use strict";
+
%CheckIsBootstrapping();
// ----------------------------------------------------------------------------
@@ -15,20 +17,15 @@ var iteratorSymbol = utils.ImportNow("iterator_symbol");
// ----------------------------------------------------------------------------
// Object
-// ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]])
-function ObjectToLocaleString() {
- CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString");
- return this.toString();
-}
-
-
-// ES6 19.1.3.3 Object.prototype.isPrototypeOf(V)
-function ObjectIsPrototypeOf(V) {
- if (!IS_RECEIVER(V)) return false;
- var O = TO_OBJECT(this);
- return %HasInPrototypeChain(V, O);
-}
-
+// Set up non-enumerable functions on the Object.prototype object.
+DEFINE_METHOD(
+ GlobalObject.prototype,
+ // ES6 19.1.3.5 Object.prototype.toLocaleString([reserved1 [,reserved2]])
+ toLocaleString() {
+ CHECK_OBJECT_COERCIBLE(this, "Object.prototype.toLocaleString");
+ return this.toString();
+ }
+);
// ES6 7.3.9
function GetMethod(obj, p) {
@@ -54,22 +51,6 @@ function ObjectConstructor(x) {
%SetNativeFlag(GlobalObject);
%SetCode(GlobalObject, ObjectConstructor);
-%AddNamedProperty(GlobalObject.prototype, "constructor", GlobalObject,
- DONT_ENUM);
-
-// Set up non-enumerable functions on the Object.prototype object.
-utils.InstallFunctions(GlobalObject.prototype, DONT_ENUM, [
- // toString is added in bootstrapper.cc
- "toLocaleString", ObjectToLocaleString,
- // valueOf is added in bootstrapper.cc.
- "isPrototypeOf", ObjectIsPrototypeOf,
- // propertyIsEnumerable is added in bootstrapper.cc.
- // __defineGetter__ is added in bootstrapper.cc.
- // __lookupGetter__ is added in bootstrapper.cc.
- // __defineSetter__ is added in bootstrapper.cc.
- // __lookupSetter__ is added in bootstrapper.cc.
-]);
-
// ----------------------------------------------------------------------------
// Iterator related spec functions.
diff --git a/deps/v8/src/js/weak-collection.js b/deps/v8/src/js/weak-collection.js
index f5092d29f5..30d654b806 100644
--- a/deps/v8/src/js/weak-collection.js
+++ b/deps/v8/src/js/weak-collection.js
@@ -13,10 +13,8 @@
var GetExistingHash;
var GetHash;
-var GlobalObject = global.Object;
var GlobalWeakMap = global.WeakMap;
var GlobalWeakSet = global.WeakSet;
-var toStringTagSymbol = utils.ImportNow("to_string_tag_symbol");
utils.Import(function(from) {
GetExistingHash = from.GetExistingHash;
@@ -48,69 +46,36 @@ function WeakMapConstructor(iterable) {
}
-function WeakMapGet(key) {
- if (!IS_WEAKMAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakMap.prototype.get', this);
- }
- if (!IS_RECEIVER(key)) return UNDEFINED;
- var hash = GetExistingHash(key);
- if (IS_UNDEFINED(hash)) return UNDEFINED;
- return %WeakCollectionGet(this, key, hash);
-}
-
-
-function WeakMapSet(key, value) {
- if (!IS_WEAKMAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakMap.prototype.set', this);
- }
- if (!IS_RECEIVER(key)) throw %make_type_error(kInvalidWeakMapKey);
- return %WeakCollectionSet(this, key, value, GetHash(key));
-}
-
-
-function WeakMapHas(key) {
- if (!IS_WEAKMAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakMap.prototype.has', this);
- }
- if (!IS_RECEIVER(key)) return false;
- var hash = GetExistingHash(key);
- if (IS_UNDEFINED(hash)) return false;
- return %WeakCollectionHas(this, key, hash);
-}
-
+// Set up the non-enumerable functions on the WeakMap prototype object.
+DEFINE_METHODS(
+ GlobalWeakMap.prototype,
+ {
+ set(key, value) {
+ if (!IS_WEAKMAP(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'WeakMap.prototype.set', this);
+ }
+ if (!IS_RECEIVER(key)) throw %make_type_error(kInvalidWeakMapKey);
+ return %WeakCollectionSet(this, key, value, GetHash(key));
+ }
-function WeakMapDelete(key) {
- if (!IS_WEAKMAP(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakMap.prototype.delete', this);
+ delete(key) {
+ if (!IS_WEAKMAP(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'WeakMap.prototype.delete', this);
+ }
+ if (!IS_RECEIVER(key)) return false;
+ var hash = GetExistingHash(key);
+ if (IS_UNDEFINED(hash)) return false;
+ return %WeakCollectionDelete(this, key, hash);
+ }
}
- if (!IS_RECEIVER(key)) return false;
- var hash = GetExistingHash(key);
- if (IS_UNDEFINED(hash)) return false;
- return %WeakCollectionDelete(this, key, hash);
-}
-
+);
// -------------------------------------------------------------------
%SetCode(GlobalWeakMap, WeakMapConstructor);
%FunctionSetLength(GlobalWeakMap, 0);
-%FunctionSetPrototype(GlobalWeakMap, new GlobalObject());
-%AddNamedProperty(GlobalWeakMap.prototype, "constructor", GlobalWeakMap,
- DONT_ENUM);
-%AddNamedProperty(GlobalWeakMap.prototype, toStringTagSymbol, "WeakMap",
- DONT_ENUM | READ_ONLY);
-
-// Set up the non-enumerable functions on the WeakMap prototype object.
-utils.InstallFunctions(GlobalWeakMap.prototype, DONT_ENUM, [
- "get", WeakMapGet,
- "set", WeakMapSet,
- "has", WeakMapHas,
- "delete", WeakMapDelete
-]);
// -------------------------------------------------------------------
// Harmony WeakSet
@@ -134,55 +99,35 @@ function WeakSetConstructor(iterable) {
}
-function WeakSetAdd(value) {
- if (!IS_WEAKSET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakSet.prototype.add', this);
- }
- if (!IS_RECEIVER(value)) throw %make_type_error(kInvalidWeakSetValue);
- return %WeakCollectionSet(this, value, true, GetHash(value));
-}
-
-
-function WeakSetHas(value) {
- if (!IS_WEAKSET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakSet.prototype.has', this);
- }
- if (!IS_RECEIVER(value)) return false;
- var hash = GetExistingHash(value);
- if (IS_UNDEFINED(hash)) return false;
- return %WeakCollectionHas(this, value, hash);
-}
-
+// Set up the non-enumerable functions on the WeakSet prototype object.
+DEFINE_METHODS(
+ GlobalWeakSet.prototype,
+ {
+ add(value) {
+ if (!IS_WEAKSET(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'WeakSet.prototype.add', this);
+ }
+ if (!IS_RECEIVER(value)) throw %make_type_error(kInvalidWeakSetValue);
+ return %WeakCollectionSet(this, value, true, GetHash(value));
+ }
-function WeakSetDelete(value) {
- if (!IS_WEAKSET(this)) {
- throw %make_type_error(kIncompatibleMethodReceiver,
- 'WeakSet.prototype.delete', this);
+ delete(value) {
+ if (!IS_WEAKSET(this)) {
+ throw %make_type_error(kIncompatibleMethodReceiver,
+ 'WeakSet.prototype.delete', this);
+ }
+ if (!IS_RECEIVER(value)) return false;
+ var hash = GetExistingHash(value);
+ if (IS_UNDEFINED(hash)) return false;
+ return %WeakCollectionDelete(this, value, hash);
+ }
}
- if (!IS_RECEIVER(value)) return false;
- var hash = GetExistingHash(value);
- if (IS_UNDEFINED(hash)) return false;
- return %WeakCollectionDelete(this, value, hash);
-}
-
+);
// -------------------------------------------------------------------
%SetCode(GlobalWeakSet, WeakSetConstructor);
%FunctionSetLength(GlobalWeakSet, 0);
-%FunctionSetPrototype(GlobalWeakSet, new GlobalObject());
-%AddNamedProperty(GlobalWeakSet.prototype, "constructor", GlobalWeakSet,
- DONT_ENUM);
-%AddNamedProperty(GlobalWeakSet.prototype, toStringTagSymbol, "WeakSet",
- DONT_ENUM | READ_ONLY);
-
-// Set up the non-enumerable functions on the WeakSet prototype object.
-utils.InstallFunctions(GlobalWeakSet.prototype, DONT_ENUM, [
- "add", WeakSetAdd,
- "has", WeakSetHas,
- "delete", WeakSetDelete
-]);
})