author | Tooru Fujisawa <arai_a@mac.com> |
Fri, 07 Aug 2015 07:53:32 +0900 | |
changeset 292154 | 35b9afd414ed452fdfee91b89a6dc51de9e3868c |
parent 292153 | 70e78d669f9de949dcbe972f74742045ca094fae |
child 292155 | f15991a13732a4d966fad452bfc8f769fb258859 |
push id | 74764 |
push user | arai_a@mac.com |
push date | Thu, 07 Apr 2016 10:49:15 +0000 |
treeherder | mozilla-inbound@4d0f975a2311 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | efaust, bholley |
bugs | 1165052 |
milestone | 48.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/builtin/Array.js +++ b/js/src/builtin/Array.js @@ -865,16 +865,22 @@ function ArrayToString() { var func = array.join; // Steps 5-6. if (!IsCallable(func)) return callFunction(std_Object_toString, array); return callContentFunction(func, array); } +// ES 2016 draft Mar 25, 2016 22.1.2.5. +function ArraySpecies() { + // Step 1. + return this; +} + // ES 2016 draft Mar 25, 2016 22.1.3.1. // Note: Array.prototype.concat.length is 1. function ArrayConcat(arg1) { // Step 1. var O = ToObject(this); // Step 2. var A = std_Array(0);
--- a/js/src/jsarray.cpp +++ b/js/src/jsarray.cpp @@ -2962,16 +2962,21 @@ static const JSFunctionSpec array_static JS_SELF_HOSTED_FN("reduce", "ArrayStaticReduce", 2,0), JS_SELF_HOSTED_FN("reduceRight", "ArrayStaticReduceRight", 2,0), JS_SELF_HOSTED_FN("from", "ArrayFrom", 3,0), JS_FN("of", array_of, 0,0), JS_FS_END }; +const JSPropertySpec array_static_props[] = { + JS_SELF_HOSTED_SYM_GET(species, "ArraySpecies", 0), + JS_PS_END +}; + /* ES5 15.4.2 */ bool js::ArrayConstructor(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); RootedObject proto(cx); if (!GetPrototypeFromCallableConstructor(cx, args, &proto)) @@ -3084,17 +3089,17 @@ array_proto_finish(JSContext* cx, JS::Ha value.setObject(*unscopables); return DefineProperty(cx, proto, id, value, nullptr, nullptr, JSPROP_READONLY); } static const ClassSpec ArrayObjectClassSpec = { GenericCreateConstructor<ArrayConstructor, 1, AllocKind::FUNCTION, &jit::JitInfo_Array>, CreateArrayPrototype, array_static_methods, - nullptr, + array_static_props, array_methods, nullptr, array_proto_finish }; const Class ArrayObject::class_ = { "Array", JSCLASS_HAS_CACHED_PROTO(JSProto_Array) | JSCLASS_DELAY_METADATA_BUILDER,
--- a/js/src/tests/ecma_6/Symbol/species.js +++ b/js/src/tests/ecma_6/Symbol/species.js @@ -1,24 +1,24 @@ var BUGNUMBER = 1131043; var summary = "Implement @@species getter for builtin types"; print(BUGNUMBER + ": " + summary); var TypedArray = Object.getPrototypeOf(Int8Array); -for (var C of [Map, Set, +for (var C of [Array, Map, Set, Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, ArrayBuffer]) { assertEq(C[Symbol.species], C); } -for (C of [Map, Set, +for (C of [Array, Map, Set, TypedArray, ArrayBuffer]) { var desc = Object.getOwnPropertyDescriptor(C, Symbol.species); assertDeepEq(Object.keys(desc).sort(), ["configurable", "enumerable", "get", "set"]); assertEq(desc.set, undefined); assertEq(desc.enumerable, false); assertEq(desc.configurable, true); assertEq(desc.get.apply(null), null);
--- a/js/xpconnect/tests/chrome/test_xrayToJS.xul +++ b/js/xpconnect/tests/chrome/test_xrayToJS.xul @@ -182,17 +182,18 @@ https://bugzilla.mozilla.org/show_bug.cg "pop", "shift", "unshift", "splice", "concat", "slice", "lastIndexOf", "indexOf", "includes", "forEach", "map", "reduce", "reduceRight", "filter", "some", "every", "find", "findIndex", "copyWithin", "fill", Symbol.iterator, Symbol.unscopables, "entries", "keys", "values", "constructor"]; gConstructorProperties['Array'] = constructorProps(["join", "reverse", "sort", "push", "pop", "shift", "unshift", "splice", "concat", "slice", "isArray", "lastIndexOf", "indexOf", "forEach", "map", "filter", - "every", "some", "reduce", "reduceRight", "from", "of"]); + "every", "some", "reduce", "reduceRight", "from", "of", + Symbol.species]); for (var c of typedArrayClasses) { gPrototypeProperties[c] = ["constructor", "BYTES_PER_ELEMENT"]; gConstructorProperties[c] = constructorProps(["BYTES_PER_ELEMENT"]); } gPrototypeProperties['TypedArray'] = ["length", "buffer", "byteLength", "byteOffset", Symbol.iterator, "subarray", "set", "copyWithin", "find", "findIndex", "forEach","indexOf", "lastIndexOf", "includes", "reverse", "join", "every", "some", "reduce", "reduceRight", "entries", "keys", "values",