Attachment #8558567: Part 2: Call Set with new. for bug #1108930

View | Details | Raw Unified | Return to bug 1108930
Collapse All | Expand All

(-)a/js/src/jit-test/lib/census.js (-1 / +1 lines)
Line     Link Here 
 Lines 77-93   const Census = {}; Link Here 
77
  //   |prop| which is present in the basis with value |value|.
77
  //   |prop| which is present in the basis with value |value|.
78
  //
78
  //
79
  // - extra(prop): Called when the subject has a property named |prop|, but the
79
  // - extra(prop): Called when the subject has a property named |prop|, but the
80
  //   basis has no such property. This should return a walker that can check
80
  //   basis has no such property. This should return a walker that can check
81
  //   the subject's value.
81
  //   the subject's value.
82
  function makeBasisChecker({compare, missing, extra}) {
82
  function makeBasisChecker({compare, missing, extra}) {
83
    return function makeWalker(basis) {
83
    return function makeWalker(basis) {
84
      if (typeof basis === 'object') {
84
      if (typeof basis === 'object') {
85
        var unvisited = Set(Object.getOwnPropertyNames(basis));
85
        var unvisited = new Set(Object.getOwnPropertyNames(basis));
86
        return {
86
        return {
87
          enter: prop => {
87
          enter: prop => {
88
            unvisited.delete(prop);
88
            unvisited.delete(prop);
89
            if (prop in basis) {
89
            if (prop in basis) {
90
              return makeWalker(basis[prop]);
90
              return makeWalker(basis[prop]);
91
            } else {
91
            } else {
92
              return extra(prop);
92
              return extra(prop);
93
            }
93
            }
(-)a/js/src/jit-test/tests/auto-regress/bug771027.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
// |jit-test| error:TypeError
1
// |jit-test| error:TypeError
2
2
3
// Binary: cache/js-dbg-32-b6aa44d8f11f-linux
3
// Binary: cache/js-dbg-32-b6aa44d8f11f-linux
4
// Flags:
4
// Flags:
5
//
5
//
6
6
7
Array.prototype.iterator = (function() { { while(0) function Uint8ClampedArray() {  } } });
7
Array.prototype.iterator = (function() { { while(0) function Uint8ClampedArray() {  } } });
8
assertEq(Set(["testing", "testing", 123]).size(), 2);
8
assertEq(new Set(["testing", "testing", 123]).size(), 2);
(-)a/js/src/jit-test/tests/basic/bug797496.js (-2 / +2 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
// |jit-test| error: TypeError
1
// |jit-test| error: TypeError
2
var set = Set(['a']);
2
var set = new Set(['a']);
3
var n = 5;
3
var n = 5;
4
for (let v of set) {
4
for (let v of set) {
5
    if (n === 0)
5
    if (n === 0)
6
        break;
6
        break;
7
    let g = set(Set(0xffffffff, n), 1);
7
    let g = set(new Set(0xffffffff, n), 1);
8
}
8
}
(-)a/js/src/jit-test/tests/basic/spread-array.js (-1 / +1 lines)
Line     Link Here 
 Lines 14-30   assertEqArray([,,...[1, 2, 3],,,,], [,,1 Link Here 
14
assertEqArray([...[1, 2, 3],,,,...[]], [1,2,3,,,,]);
14
assertEqArray([...[1, 2, 3],,,,...[]], [1,2,3,,,,]);
15
15
16
assertEqArray([...[undefined]], [undefined]);
16
assertEqArray([...[undefined]], [undefined]);
17
17
18
// other iterable objects
18
// other iterable objects
19
assertEqArray([...new Int32Array([1, 2, 3])], [1, 2, 3]);
19
assertEqArray([...new Int32Array([1, 2, 3])], [1, 2, 3]);
20
assertEqArray([..."abc"], ["a", "b", "c"]);
20
assertEqArray([..."abc"], ["a", "b", "c"]);
21
assertEqArray([...[1, 2, 3][Symbol.iterator]()], [1, 2, 3]);
21
assertEqArray([...[1, 2, 3][Symbol.iterator]()], [1, 2, 3]);
22
assertEqArray([...Set([1, 2, 3])], [1, 2, 3]);
22
assertEqArray([...new Set([1, 2, 3])], [1, 2, 3]);
23
assertEqArray([...new Map([["a", "A"], ["b", "B"], ["c", "C"]])].map(([k, v]) => k + v), ["aA", "bB", "cC"]);
23
assertEqArray([...new Map([["a", "A"], ["b", "B"], ["c", "C"]])].map(([k, v]) => k + v), ["aA", "bB", "cC"]);
24
let itr = {};
24
let itr = {};
25
itr[Symbol.iterator] = function () {
25
itr[Symbol.iterator] = function () {
26
    return {
26
    return {
27
        i: 1,
27
        i: 1,
28
        next: function() {
28
        next: function() {
29
            if (this.i < 4)
29
            if (this.i < 4)
30
                return { value: this.i++, done: false };
30
                return { value: this.i++, done: false };
(-)a/js/src/jit-test/tests/basic/spread-call-eval.js (-1 / +1 lines)
Line     Link Here 
 Lines 20-36   let line0 = Error().lineNumber; Link Here 
20
try {             // line0 + 1
20
try {             // line0 + 1
21
  eval(...["("]); // line0 + 2
21
  eval(...["("]); // line0 + 2
22
} catch (e) {
22
} catch (e) {
23
  assertEq(e.lineNumber, 1);
23
  assertEq(e.lineNumber, 1);
24
}
24
}
25
25
26
// other iterable objects
26
// other iterable objects
27
assertEq(eval(...["a + b"][Symbol.iterator]()), 11);
27
assertEq(eval(...["a + b"][Symbol.iterator]()), 11);
28
assertEq(eval(...Set(["a + b"])), 11);
28
assertEq(eval(...new Set(["a + b"])), 11);
29
let itr = {};
29
let itr = {};
30
itr[Symbol.iterator] = function() {
30
itr[Symbol.iterator] = function() {
31
    return {
31
    return {
32
        i: 0,
32
        i: 0,
33
        next: function() {
33
        next: function() {
34
            this.i++;
34
            this.i++;
35
            if (this.i == 1)
35
            if (this.i == 1)
36
                return { value: "a + b", done: false };
36
                return { value: "a + b", done: false };
(-)a/js/src/jit-test/tests/basic/spread-call-funapply.js (-1 / +1 lines)
Line     Link Here 
 Lines 4-20   load(libdir + "iteration.js"); Link Here 
4
4
5
function checkCommon(f) {
5
function checkCommon(f) {
6
  assertEqArray(f.apply(null, ...[[1, 2, 3]]), [1, 2, 3]);
6
  assertEqArray(f.apply(null, ...[[1, 2, 3]]), [1, 2, 3]);
7
  assertEqArray(f.apply(...[null], [1, 2, 3]), [1, 2, 3]);
7
  assertEqArray(f.apply(...[null], [1, 2, 3]), [1, 2, 3]);
8
  assertEqArray(f.apply(...[null], ...[[1, 2, 3]]), [1, 2, 3]);
8
  assertEqArray(f.apply(...[null], ...[[1, 2, 3]]), [1, 2, 3]);
9
  assertEqArray(f.apply(...[null, [1, 2, 3]]), [1, 2, 3]);
9
  assertEqArray(f.apply(...[null, [1, 2, 3]]), [1, 2, 3]);
10
10
11
  // other iterable objects
11
  // other iterable objects
12
  assertEqArray(f.apply(...Set([null, [1, 2, 3]])), [1, 2, 3]);
12
  assertEqArray(f.apply(...new Set([null, [1, 2, 3]])), [1, 2, 3]);
13
  assertEqArray(f.apply(...[null, [1, 2, 3]][Symbol.iterator]()), [1, 2, 3]);
13
  assertEqArray(f.apply(...[null, [1, 2, 3]][Symbol.iterator]()), [1, 2, 3]);
14
  let itr = {};
14
  let itr = {};
15
  itr[Symbol.iterator] = function() {
15
  itr[Symbol.iterator] = function() {
16
      return {
16
      return {
17
          i: 0,
17
          i: 0,
18
          next: function() {
18
          next: function() {
19
              this.i++;
19
              this.i++;
20
              if (this.i == 1)
20
              if (this.i == 1)
(-)a/js/src/jit-test/tests/basic/spread-call-length.js (-1 / +1 lines)
Line     Link Here 
 Lines 17-33   function checkLength(f, makeFn) { Link Here 
17
  assertEq(makeFn("1, ...[2, 3, 4], 5")(f), 5);
17
  assertEq(makeFn("1, ...[2, 3, 4], 5")(f), 5);
18
18
19
  assertEq(makeFn("...[undefined]")(f), 1);
19
  assertEq(makeFn("...[undefined]")(f), 1);
20
20
21
  // other iterable objects
21
  // other iterable objects
22
  assertEq(makeFn("...arg")(f, new Int32Array([1, 2, 3])), 3);
22
  assertEq(makeFn("...arg")(f, new Int32Array([1, 2, 3])), 3);
23
  assertEq(makeFn("...arg")(f, "abc"), 3);
23
  assertEq(makeFn("...arg")(f, "abc"), 3);
24
  assertEq(makeFn("...arg")(f, [1, 2, 3][Symbol.iterator]()), 3);
24
  assertEq(makeFn("...arg")(f, [1, 2, 3][Symbol.iterator]()), 3);
25
  assertEq(makeFn("...arg")(f, Set([1, 2, 3])), 3);
25
  assertEq(makeFn("...arg")(f, new Set([1, 2, 3])), 3);
26
  assertEq(makeFn("...arg")(f, new Map([["a", "A"], ["b", "B"], ["c", "C"]])), 3);
26
  assertEq(makeFn("...arg")(f, new Map([["a", "A"], ["b", "B"], ["c", "C"]])), 3);
27
  let itr = {};
27
  let itr = {};
28
  itr[Symbol.iterator] = function() {
28
  itr[Symbol.iterator] = function() {
29
      return {
29
      return {
30
          i: 1,
30
          i: 1,
31
          next: function() {
31
          next: function() {
32
              if (this.i < 4)
32
              if (this.i < 4)
33
                  return { value: this.i++, done: false };
33
                  return { value: this.i++, done: false };
(-)a/js/src/jit-test/tests/basic/spread-call.js (-1 / +1 lines)
Line     Link Here 
 Lines 12-28   function checkCommon(f, makeFn) { Link Here 
12
  assertEqArray(makeFn("1, ...[2], ...[3]")(f), [1, 2, 3]);
12
  assertEqArray(makeFn("1, ...[2], ...[3]")(f), [1, 2, 3]);
13
  assertEqArray(makeFn("1, ...[2, 3]")(f), [1, 2, 3]);
13
  assertEqArray(makeFn("1, ...[2, 3]")(f), [1, 2, 3]);
14
  assertEqArray(makeFn("1, ...[], 2, 3")(f), [1, 2, 3]);
14
  assertEqArray(makeFn("1, ...[], 2, 3")(f), [1, 2, 3]);
15
15
16
  // other iterable objects
16
  // other iterable objects
17
  assertEqArray(makeFn("...arg")(f, new Int32Array([1, 2, 3])), [1, 2, 3]);
17
  assertEqArray(makeFn("...arg")(f, new Int32Array([1, 2, 3])), [1, 2, 3]);
18
  assertEqArray(makeFn("...arg")(f, "abc"), ["a", "b", "c"]);
18
  assertEqArray(makeFn("...arg")(f, "abc"), ["a", "b", "c"]);
19
  assertEqArray(makeFn("...arg")(f, [1, 2, 3][Symbol.iterator]()), [1, 2, 3]);
19
  assertEqArray(makeFn("...arg")(f, [1, 2, 3][Symbol.iterator]()), [1, 2, 3]);
20
  assertEqArray(makeFn("...arg")(f, Set([1, 2, 3])), [1, 2, 3]);
20
  assertEqArray(makeFn("...arg")(f, new Set([1, 2, 3])), [1, 2, 3]);
21
  assertEqArray(makeFn("...arg")(f, new Map([["a", "A"], ["b", "B"], ["c", "C"]])).map(([k, v]) => k + v), ["aA", "bB", "cC"]);
21
  assertEqArray(makeFn("...arg")(f, new Map([["a", "A"], ["b", "B"], ["c", "C"]])).map(([k, v]) => k + v), ["aA", "bB", "cC"]);
22
  let itr = {};
22
  let itr = {};
23
  itr[Symbol.iterator] = function() {
23
  itr[Symbol.iterator] = function() {
24
      return {
24
      return {
25
          i: 1,
25
          i: 1,
26
          next: function() {
26
          next: function() {
27
              if (this.i < 4)
27
              if (this.i < 4)
28
                  return { value: this.i++, done: false };
28
                  return { value: this.i++, done: false };
(-)a/js/src/jit-test/tests/collections/Map-iterator-proxies-2.js (-2 / +2 lines)
Line     Link Here 
 Lines 3-21    Link Here 
3
load(libdir + "asserts.js");
3
load(libdir + "asserts.js");
4
load(libdir + "eqArrayHelper.js");
4
load(libdir + "eqArrayHelper.js");
5
load(libdir + "iteration.js");
5
load(libdir + "iteration.js");
6
6
7
var g = newGlobal();
7
var g = newGlobal();
8
8
9
var iterator_fn = Map.prototype[Symbol.iterator];
9
var iterator_fn = Map.prototype[Symbol.iterator];
10
assertThrowsInstanceOf(function () { iterator_fn.call({}); }, TypeError);
10
assertThrowsInstanceOf(function () { iterator_fn.call({}); }, TypeError);
11
assertThrowsInstanceOf(function () { iterator_fn.call(Set()); }, TypeError);
11
assertThrowsInstanceOf(function () { iterator_fn.call(new Set()); }, TypeError);
12
var mapw = g.eval("new Map([['x', 1], ['y', 2]])");
12
var mapw = g.eval("new Map([['x', 1], ['y', 2]])");
13
assertEqArray(iterator_fn.call(mapw).next().value, ["x", 1]);
13
assertEqArray(iterator_fn.call(mapw).next().value, ["x", 1]);
14
14
15
var next_fn = new Map()[Symbol.iterator]().next;
15
var next_fn = new Map()[Symbol.iterator]().next;
16
assertThrowsInstanceOf(function () { next_fn.call({}); }, TypeError);
16
assertThrowsInstanceOf(function () { next_fn.call({}); }, TypeError);
17
assertThrowsInstanceOf(function () { next_fn.call(Set()[Symbol.iterator]()); }, TypeError);
17
assertThrowsInstanceOf(function () { next_fn.call(new Set()[Symbol.iterator]()); }, TypeError);
18
var iterw = mapw[Symbol.iterator]();
18
var iterw = mapw[Symbol.iterator]();
19
assertEqArray(next_fn.call(iterw).value, ["x", 1]);
19
assertEqArray(next_fn.call(iterw).value, ["x", 1]);
20
assertEqArray(next_fn.call(iterw).value, ["y", 2]);
20
assertEqArray(next_fn.call(iterw).value, ["y", 2]);
21
assertEq(next_fn.call(iterw).done, true);
21
assertEq(next_fn.call(iterw).done, true);
(-)a/js/src/jit-test/tests/collections/Set-add-size.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// set.add(v) increments set.size iff the set did not already contain v.
1
// set.add(v) increments set.size iff the set did not already contain v.
2
2
3
var s = Set();
3
var s = new Set();
4
for (var i = 0; i < 10; i++) {
4
for (var i = 0; i < 10; i++) {
5
    assertEq(s.size, i);
5
    assertEq(s.size, i);
6
    s.add(i);
6
    s.add(i);
7
}
7
}
8
for (var i = 0; i < 10; i++) {
8
for (var i = 0; i < 10; i++) {
9
    assertEq(s.size, 10);
9
    assertEq(s.size, 10);
10
    s.add(i);
10
    s.add(i);
11
}
11
}
(-)a/js/src/jit-test/tests/collections/Set-clear-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
// Clearing an empty Set has no effect.
1
// Clearing an empty Set has no effect.
2
2
3
var s = Set();
3
var s = new Set();
4
for (var i = 0; i < 2; i++) {
4
for (var i = 0; i < 2; i++) {
5
    s.clear();
5
    s.clear();
6
    assertEq(s.size, 0);
6
    assertEq(s.size, 0);
7
    assertEq(s.has(undefined), false);
7
    assertEq(s.has(undefined), false);
8
}
8
}
(-)a/js/src/jit-test/tests/collections/Set-clear-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// Clearing a Set removes its elements; the Set remains usable afterwards.
1
// Clearing a Set removes its elements; the Set remains usable afterwards.
2
2
3
var s = Set(["x", "y", "z", "z", "y"]);
3
var s = new Set(["x", "y", "z", "z", "y"]);
4
assertEq(s.size, 3);
4
assertEq(s.size, 3);
5
s.clear();
5
s.clear();
6
assertEq(s.size, 0);
6
assertEq(s.size, 0);
7
assertEq(s.has("x"), false);
7
assertEq(s.has("x"), false);
8
assertEq(s.delete("x"), false);
8
assertEq(s.delete("x"), false);
9
assertEq(s.has("z"), false);
9
assertEq(s.has("z"), false);
10
for (var v of s)
10
for (var v of s)
11
    throw "FAIL";  // shouldn't be any elements
11
    throw "FAIL";  // shouldn't be any elements
(-)a/js/src/jit-test/tests/collections/Set-clear-3.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-10    Link Here 
1
// Clearing a Set with a nontrivial number of elements works.
1
// Clearing a Set with a nontrivial number of elements works.
2
2
3
var s = Set();
3
var s = new Set();
4
for (var i = 0; i < 100; i++)
4
for (var i = 0; i < 100; i++)
5
    s.add(i);
5
    s.add(i);
6
assertEq(s.size, i);
6
assertEq(s.size, i);
7
s.clear();
7
s.clear();
8
assertEq(s.size, 0);
8
assertEq(s.size, 0);
9
s.add(12);
9
s.add(12);
10
assertEq(s.has(12), true);
10
assertEq(s.has(12), true);
(-)a/js/src/jit-test/tests/collections/Set-clear-4.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-10    Link Here 
1
// Clearing a Set after deleting some entries works.
1
// Clearing a Set after deleting some entries works.
2
2
3
var s = Set(["a", "b", "c", "d"]);
3
var s = new Set(["a", "b", "c", "d"]);
4
for (var v of s)
4
for (var v of s)
5
    if (v !== "c")
5
    if (v !== "c")
6
        s.delete(v);
6
        s.delete(v);
7
s.clear();
7
s.clear();
8
assertEq(s.size, 0);
8
assertEq(s.size, 0);
9
assertEq(s.has("c"), false);
9
assertEq(s.has("c"), false);
10
assertEq(s.has("d"), false);
10
assertEq(s.has("d"), false);
(-)a/js/src/jit-test/tests/collections/Set-clear-5.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-12    Link Here 
1
// Set.clear is unaffected by deleting/monkeypatching Set.prototype.{delete,iterator}.
1
// Set.clear is unaffected by deleting/monkeypatching Set.prototype.{delete,iterator}.
2
2
3
var data = ["a", 1, {}];
3
var data = ["a", 1, {}];
4
var s1 = Set(data), s2 = Set(data);
4
var s1 = new Set(data), s2 = new Set(data);
5
5
6
delete Set.prototype.delete;
6
delete Set.prototype.delete;
7
delete Set.prototype.iterator;
7
delete Set.prototype.iterator;
8
s1.clear();
8
s1.clear();
9
assertEq(s1.size, 0);
9
assertEq(s1.size, 0);
10
10
11
Set.prototype.delete = function () { throw "FAIL"; };
11
Set.prototype.delete = function () { throw "FAIL"; };
12
Set.prototype.iterator = function () { throw "FAIL"; };
12
Set.prototype.iterator = function () { throw "FAIL"; };
(-)a/js/src/jit-test/tests/collections/Set-clear-6.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-6    Link Here 
1
// Clearing a Set doesn't affect expando properties.
1
// Clearing a Set doesn't affect expando properties.
2
2
3
var s = Set();
3
var s = new Set();
4
s.x = 3;
4
s.x = 3;
5
s.clear();
5
s.clear();
6
assertEq(s.x, 3);
6
assertEq(s.x, 3);
(-)a/js/src/jit-test/tests/collections/Set-clear-gc.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// Clearing a Set removes any strong references to its elements.
1
// Clearing a Set removes any strong references to its elements.
2
2
3
load(libdir + "referencesVia.js");
3
load(libdir + "referencesVia.js");
4
4
5
var s = Set();
5
var s = new Set();
6
var obj = {};
6
var obj = {};
7
s.add(obj);
7
s.add(obj);
8
assertEq(referencesVia(s, "key", obj), true);
8
assertEq(referencesVia(s, "key", obj), true);
9
s.clear();
9
s.clear();
10
if (typeof findReferences == 'function')
10
if (typeof findReferences == 'function')
11
    assertEq(referencesVia(s, "key", obj), false);
11
    assertEq(referencesVia(s, "key", obj), false);
(-)a/js/src/jit-test/tests/collections/Set-clear-iterators-1.js (-3 / +3 lines)
Line     Link Here 
 Lines 1-23    Link Here 
1
// A Set iterator does not visit entries removed by clear().
1
// A Set iterator does not visit entries removed by clear().
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var s = Set();
5
var s = new Set();
6
var it = s[Symbol.iterator]();
6
var it = s[Symbol.iterator]();
7
s.clear();
7
s.clear();
8
assertIteratorDone(it, undefined);
8
assertIteratorDone(it, undefined);
9
9
10
s = Set(["a", "b", "c", "d"]);
10
s = new Set(["a", "b", "c", "d"]);
11
it = s[Symbol.iterator]();
11
it = s[Symbol.iterator]();
12
assertIteratorNext(it, "a");
12
assertIteratorNext(it, "a");
13
s.clear();
13
s.clear();
14
assertIteratorDone(it, undefined);
14
assertIteratorDone(it, undefined);
15
15
16
var log = "";
16
var log = "";
17
s = Set(["a", "b", "c", "d"]);
17
s = new Set(["a", "b", "c", "d"]);
18
for (var v of s) {
18
for (var v of s) {
19
    log += v;
19
    log += v;
20
    if (v == "b")
20
    if (v == "b")
21
        s.clear();
21
        s.clear();
22
}
22
}
23
assertEq(log, "ab");
23
assertEq(log, "ab");
(-)a/js/src/jit-test/tests/collections/Set-clear-iterators-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// A Set iterator continues to visit entries added after a clear().
1
// A Set iterator continues to visit entries added after a clear().
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var s = Set(["a"]);
5
var s = new Set(["a"]);
6
var it = s[Symbol.iterator]();
6
var it = s[Symbol.iterator]();
7
assertIteratorNext(it, "a");
7
assertIteratorNext(it, "a");
8
s.clear();
8
s.clear();
9
s.add("b");
9
s.add("b");
10
assertIteratorNext(it, "b");
10
assertIteratorNext(it, "b");
11
assertIteratorDone(it, undefined);
11
assertIteratorDone(it, undefined);
(-)a/js/src/jit-test/tests/collections/Set-clear-iterators-3.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-10    Link Here 
1
// A closed Set iterator does not visit new entries added after a clear().
1
// A closed Set iterator does not visit new entries added after a clear().
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var s = Set();
5
var s = new Set();
6
var it = s[Symbol.iterator]();
6
var it = s[Symbol.iterator]();
7
assertIteratorDone(it, undefined);  // close the iterator
7
assertIteratorDone(it, undefined);  // close the iterator
8
s.clear();
8
s.clear();
9
s.add("a");
9
s.add("a");
10
assertIteratorDone(it, undefined);
10
assertIteratorDone(it, undefined);
(-)a/js/src/jit-test/tests/collections/Set-constructor-1.js (-3 / +1 lines)
Line     Link Here 
 Lines 1-7    Link Here 
1
// The Set constructor creates an empty Set by default.
1
// The Set constructor creates an empty Set by default.
2
2
3
assertEq(Set().size, 0);
3
assertEq(new Set().size, 0);
4
assertEq((new Set).size, 0);
5
assertEq(Set(undefined).size, 0);
6
assertEq(new Set(undefined).size, 0);
4
assertEq(new Set(undefined).size, 0);
7
assertEq(new Set(null).size, 0);
5
assertEq(new Set(null).size, 0);
(-)a/js/src/jit-test/tests/collections/Set-constructor-2.js (-3 / +3 lines)
Line     Link Here 
 Lines 1-18    Link Here 
1
// The Set constructor can take an argument that is an array.
1
// The Set constructor can take an argument that is an array.
2
2
3
var s = Set([]);
3
var s = new Set([]);
4
assertEq(s.size, 0);
4
assertEq(s.size, 0);
5
assertEq(s.has(undefined), false);
5
assertEq(s.has(undefined), false);
6
6
7
s = Set(["one", "two", "three"]);
7
s = new Set(["one", "two", "three"]);
8
assertEq(s.size, 3);
8
assertEq(s.size, 3);
9
assertEq(s.has("one"), true);
9
assertEq(s.has("one"), true);
10
assertEq(s.has("eleventeen"), false);
10
assertEq(s.has("eleventeen"), false);
11
11
12
var a = [{}, {}, {}];
12
var a = [{}, {}, {}];
13
s = Set(a);
13
s = new Set(a);
14
assertEq(s.size, 3);
14
assertEq(s.size, 3);
15
for (let obj of a)
15
for (let obj of a)
16
    assertEq(s.has(obj), true);
16
    assertEq(s.has(obj), true);
17
assertEq(s.has({}), false);
17
assertEq(s.has({}), false);
18
assertEq(s.has("three"), false);
18
assertEq(s.has("three"), false);
(-)a/js/src/jit-test/tests/collections/Set-constructor-3.js (-2 / +2 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// The argument to Set may contain a value multiple times. Duplicates are discarded.
1
// The argument to Set may contain a value multiple times. Duplicates are discarded.
2
2
3
assertEq(Set(["testing", "testing", 123]).size, 2);
3
assertEq(new Set(["testing", "testing", 123]).size, 2);
4
4
5
var values = [undefined, null, false, NaN, 0, -0, 6.022e23, -Infinity, "", "xyzzy", {}, Math.sin];
5
var values = [undefined, null, false, NaN, 0, -0, 6.022e23, -Infinity, "", "xyzzy", {}, Math.sin];
6
for (let v of values) {
6
for (let v of values) {
7
    var a = [v, {}, {}, {}, v, {}, v, v];
7
    var a = [v, {}, {}, {}, v, {}, v, v];
8
    var s = Set(a);
8
    var s = new Set(a);
9
    assertEq(s.size, 5);
9
    assertEq(s.size, 5);
10
    assertEq(s.has(v), true);
10
    assertEq(s.has(v), true);
11
}
11
}
(-)a/js/src/jit-test/tests/collections/Set-constructor-generator-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-12    Link Here 
1
// The argument to Set can be a generator.
1
// The argument to Set can be a generator.
2
2
3
function hexData(n) {
3
function hexData(n) {
4
    for (var i = 0; i < n; i++)
4
    for (var i = 0; i < n; i++)
5
        yield i.toString(16);
5
        yield i.toString(16);
6
}
6
}
7
7
8
var s = Set(hexData(256));
8
var s = new Set(hexData(256));
9
assertEq(s.size, 256);
9
assertEq(s.size, 256);
10
assertEq(s.has("0"), true);
10
assertEq(s.has("0"), true);
11
assertEq(s.has(0), false);
11
assertEq(s.has(0), false);
12
assertEq(s.has("ff"), true);
12
assertEq(s.has("ff"), true);
(-)a/js/src/jit-test/tests/collections/Set-constructor-generator-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
// The argument to Set can be a generator-expression.
1
// The argument to Set can be a generator-expression.
2
2
3
var s = Set(k * k for (k of [1, 2, 3, 4]));
3
var s = new Set(k * k for (k of [1, 2, 3, 4]));
4
assertEq(s.size, 4);
4
assertEq(s.size, 4);
5
assertEq(s.has(1), true);
5
assertEq(s.has(1), true);
6
assertEq(s.has(4), true);
6
assertEq(s.has(4), true);
7
assertEq(s.has(9), true);
7
assertEq(s.has(9), true);
8
assertEq(s.has(16), true);
8
assertEq(s.has(16), true);
(-)a/js/src/jit-test/tests/collections/Set-delete-size.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// set.delete(v) decrements set.size iff the set contained v.
1
// set.delete(v) decrements set.size iff the set contained v.
2
2
3
var s = Set();
3
var s = new Set();
4
for (var i = 0; i < 10; i++)
4
for (var i = 0; i < 10; i++)
5
    s.add(i);
5
    s.add(i);
6
6
7
for (var i = 10; i > 0; i--) {
7
for (var i = 10; i > 0; i--) {
8
    assertEq(s.size, i);
8
    assertEq(s.size, i);
9
    assertEq(s.delete(i), false);
9
    assertEq(s.delete(i), false);
10
    assertEq(s.size, i);
10
    assertEq(s.size, i);
11
    assertEq(s.delete(i - 1), true);
11
    assertEq(s.delete(i - 1), true);
(-)a/js/src/jit-test/tests/collections/Set-iterator-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// for-of can be used to iterate over a Set twice.
1
// for-of can be used to iterate over a Set twice.
2
2
3
var set = Set(['a', 'b', 'c']);
3
var set = new Set(['a', 'b', 'c']);
4
var log = '';
4
var log = '';
5
5
6
for (let i = 0; i < 2; i++) {
6
for (let i = 0; i < 2; i++) {
7
    for (let x of set)
7
    for (let x of set)
8
        log += x;
8
        log += x;
9
    log += ';'
9
    log += ';'
10
}
10
}
11
assertEq(log, 'abc;abc;');
11
assertEq(log, 'abc;abc;');
(-)a/js/src/jit-test/tests/collections/Set-iterator-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// Nested for-of loops can iterate over a Set.
1
// Nested for-of loops can iterate over a Set.
2
2
3
var map = Set(['a', 'b']);
3
var map = new Set(['a', 'b']);
4
var log = '';
4
var log = '';
5
for (let x of map) {
5
for (let x of map) {
6
    log += x + ':'
6
    log += x + ':'
7
    for (let y of map)
7
    for (let y of map)
8
        log += y;
8
        log += y;
9
    log += ';'
9
    log += ';'
10
};
10
};
11
assertEq(log, 'a:ab;b:ab;');
11
assertEq(log, 'a:ab;b:ab;');
(-)a/js/src/jit-test/tests/collections/Set-iterator-3.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// Iterating over a set of objects yields those exact objects.
1
// Iterating over a set of objects yields those exact objects.
2
2
3
var arr = [{}, {}, {}, [], /xyz/, new Date];
3
var arr = [{}, {}, {}, [], /xyz/, new Date];
4
var set = Set(arr);
4
var set = new Set(arr);
5
assertEq(set.size, arr.length);
5
assertEq(set.size, arr.length);
6
6
7
var i = 0;
7
var i = 0;
8
for (var x of set)
8
for (var x of set)
9
    assertEq(x, arr[i++]);
9
    assertEq(x, arr[i++]);
10
assertEq(i, arr.length);
10
assertEq(i, arr.length);
11
11
(-)a/js/src/jit-test/tests/collections/Set-iterator-add-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// set.iterator() is live: entries added during iteration are visited.
1
// set.iterator() is live: entries added during iteration are visited.
2
2
3
var set = Set([5]);
3
var set = new Set([5]);
4
var log = '';
4
var log = '';
5
for (let x of set) {
5
for (let x of set) {
6
    log += x + ';';
6
    log += x + ';';
7
    if (x > 0)
7
    if (x > 0)
8
        set.add(x - 1);
8
        set.add(x - 1);
9
}
9
}
10
assertEq(log, '5;4;3;2;1;0;');
10
assertEq(log, '5;4;3;2;1;0;');
11
assertEq(set.size, 6);
11
assertEq(set.size, 6);
(-)a/js/src/jit-test/tests/collections/Set-iterator-add-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-10    Link Here 
1
// A Set iterator does not iterate over new entries added after it throws StopIteration.
1
// A Set iterator does not iterate over new entries added after it throws StopIteration.
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var set = Set();
5
var set = new Set();
6
var iter0 = set[Symbol.iterator](), iter1 = set[Symbol.iterator]();
6
var iter0 = set[Symbol.iterator](), iter1 = set[Symbol.iterator]();
7
assertIteratorDone(iter0, undefined);  // closes iter0
7
assertIteratorDone(iter0, undefined);  // closes iter0
8
set.add("x");
8
set.add("x");
9
assertIteratorDone(iter0, undefined);  // already closed
9
assertIteratorDone(iter0, undefined);  // already closed
10
assertIteratorNext(iter1, "x");  // was not yet closed
10
assertIteratorNext(iter1, "x");  // was not yet closed
(-)a/js/src/jit-test/tests/collections/Set-iterator-add-remove.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// Removing and re-adding entries while an iterator is live causes the iterator to visit them again.
1
// Removing and re-adding entries while an iterator is live causes the iterator to visit them again.
2
2
3
var set = Set(['a']);
3
var set = new Set(['a']);
4
var n = 5;
4
var n = 5;
5
for (let v of set) {
5
for (let v of set) {
6
    assertEq(v, 'a');
6
    assertEq(v, 'a');
7
    if (n === 0)
7
    if (n === 0)
8
        break;
8
        break;
9
    set.delete('a');
9
    set.delete('a');
10
    set.add('a');
10
    set.add('a');
11
    n--;
11
    n--;
(-)a/js/src/jit-test/tests/collections/Set-iterator-gc-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-10    Link Here 
1
// A Set iterator keeps the data alive.
1
// A Set iterator keeps the data alive.
2
2
3
load(libdir + "referencesVia.js");
3
load(libdir + "referencesVia.js");
4
load(libdir + "iteration.js");
4
load(libdir + "iteration.js");
5
5
6
var key = {};
6
var key = {};
7
var set = Set([key]);
7
var set = new Set([key]);
8
var iter = set[Symbol.iterator]();
8
var iter = set[Symbol.iterator]();
9
referencesVia(iter, "**UNKNOWN SLOT 0**", set);
9
referencesVia(iter, "**UNKNOWN SLOT 0**", set);
10
referencesVia(set, "key", key);
10
referencesVia(set, "key", key);
(-)a/js/src/jit-test/tests/collections/Set-iterator-gc-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
// GC-ing during a for-of loop doesn't crash.
1
// GC-ing during a for-of loop doesn't crash.
2
2
3
var i = 0;
3
var i = 0;
4
for (var x of Set(Object.getOwnPropertyNames(this))) {
4
for (var x of new Set(Object.getOwnPropertyNames(this))) {
5
    gc();
5
    gc();
6
    if (++i >= 20)
6
    if (++i >= 20)
7
        break;
7
        break;
8
}
8
}
(-)a/js/src/jit-test/tests/collections/Set-iterator-gc-3.js (-16 / +16 lines)
Line     Link Here 
 Lines 1-20    Link Here 
1
// GC in nested for-loops is safe.
1
// GC in nested for-loops is safe.
2
2
3
var x;
3
var x;
4
for (x of Set([1]))
4
for (x of new Set([1]))
5
    for (x of Set([1]))
5
    for (x of new Set([1]))
6
        for (x of Set([1]))
6
        for (x of new Set([1]))
7
            for (x of Set([1]))
7
            for (x of new Set([1]))
8
                for (x of Set([1]))
8
                for (x of new Set([1]))
9
                    for (x of Set([1]))
9
                    for (x of new Set([1]))
10
                        for (x of Set([1]))
10
                        for (x of new Set([1]))
11
                            for (x of Set([1]))
11
                            for (x of new Set([1]))
12
                                for (x of Set([1]))
12
                                for (x of new Set([1]))
13
                                    for (x of Set([1]))
13
                                    for (x of new Set([1]))
14
                                        for (x of Set([1]))
14
                                        for (x of new Set([1]))
15
                                            for (x of Set([1]))
15
                                            for (x of new Set([1]))
16
                                                for (x of Set([1]))
16
                                                for (x of new Set([1]))
17
                                                    for (x of Set([1]))
17
                                                    for (x of new Set([1]))
18
                                                        for (x of Set([1]))
18
                                                        for (x of new Set([1]))
19
                                                            for (x of Set([1]))
19
                                                            for (x of new Set([1]))
20
                                                                gc();
20
                                                                gc();
(-)a/js/src/jit-test/tests/collections/Set-iterator-order.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// Set iterators produces entries in the order they were inserted.
1
// Set iterators produces entries in the order they were inserted.
2
2
3
var set = Set();
3
var set = new Set();
4
var i;
4
var i;
5
for (i = 7; i !== 1; i = i * 7 % 1117)
5
for (i = 7; i !== 1; i = i * 7 % 1117)
6
    set.add(i);
6
    set.add(i);
7
assertEq(set.size, 557);
7
assertEq(set.size, 557);
8
8
9
i = 7;
9
i = 7;
10
for (var v of set) {
10
for (var v of set) {
11
    assertEq(v, i);
11
    assertEq(v, i);
(-)a/js/src/jit-test/tests/collections/Set-iterator-proxies-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
// for-of works on a cross-compartment wrapper of a Set.
1
// for-of works on a cross-compartment wrapper of a Set.
2
2
3
var g = newGlobal();
3
var g = newGlobal();
4
var mw = g.eval("Set(['a', 'b', 1, 2])");
4
var mw = g.eval("new Set(['a', 'b', 1, 2])");
5
var log = '';
5
var log = '';
6
for (let x of mw)
6
for (let x of mw)
7
    log += x;
7
    log += x;
8
assertEq(log, "ab12");
8
assertEq(log, "ab12");
(-)a/js/src/jit-test/tests/collections/Set-iterator-proxies-2.js (-2 / +2 lines)
Line     Link Here 
 Lines 3-20    Link Here 
3
load(libdir + "asserts.js");
3
load(libdir + "asserts.js");
4
load(libdir + "iteration.js");
4
load(libdir + "iteration.js");
5
5
6
var g = newGlobal();
6
var g = newGlobal();
7
7
8
var iterator_fn = Set.prototype[Symbol.iterator];
8
var iterator_fn = Set.prototype[Symbol.iterator];
9
assertThrowsInstanceOf(function () { iterator_fn.call({}); }, TypeError);
9
assertThrowsInstanceOf(function () { iterator_fn.call({}); }, TypeError);
10
assertThrowsInstanceOf(function () { iterator_fn.call(new Map()); }, TypeError);
10
assertThrowsInstanceOf(function () { iterator_fn.call(new Map()); }, TypeError);
11
var setw = g.eval("Set(['x', 'y'])");
11
var setw = g.eval("new Set(['x', 'y'])");
12
assertIteratorNext(iterator_fn.call(setw), "x");
12
assertIteratorNext(iterator_fn.call(setw), "x");
13
13
14
var next_fn = Set()[Symbol.iterator]().next;
14
var next_fn = new Set()[Symbol.iterator]().next;
15
assertThrowsInstanceOf(function () { next_fn.call({}); }, TypeError);
15
assertThrowsInstanceOf(function () { next_fn.call({}); }, TypeError);
16
assertThrowsInstanceOf(function () { next_fn.call(new Map()[Symbol.iterator]()); }, TypeError);
16
assertThrowsInstanceOf(function () { next_fn.call(new Map()[Symbol.iterator]()); }, TypeError);
17
var iterw = setw[Symbol.iterator]();
17
var iterw = setw[Symbol.iterator]();
18
assertIteratorResult(next_fn.call(iterw), "x", false);
18
assertIteratorResult(next_fn.call(iterw), "x", false);
19
assertIteratorResult(next_fn.call(iterw), "y", false);
19
assertIteratorResult(next_fn.call(iterw), "y", false);
20
assertIteratorResult(next_fn.call(iterw), undefined, true);
20
assertIteratorResult(next_fn.call(iterw), undefined, true);
(-)a/js/src/jit-test/tests/collections/Set-iterator-remove-1.js (-2 / +2 lines)
Line     Link Here 
 Lines 1-13    Link Here 
1
// A set iterator can cope with removing the current entry.
1
// A set iterator can cope with removing the current entry.
2
2
3
function test(letters, toRemove) {
3
function test(letters, toRemove) {
4
    var set = Set(letters);
4
    var set = new Set(letters);
5
    toRemove = Set(toRemove);
5
    toRemove = new Set(toRemove);
6
6
7
    var leftovers = [x for (x of set) if (!toRemove.has(x))].join("");
7
    var leftovers = [x for (x of set) if (!toRemove.has(x))].join("");
8
8
9
    var log = "";
9
    var log = "";
10
    for (let x of set) {
10
    for (let x of set) {
11
        log += x;
11
        log += x;
12
        if (toRemove.has(x))
12
        if (toRemove.has(x))
13
            set.delete(x);
13
            set.delete(x);
(-)a/js/src/jit-test/tests/collections/Set-iterator-remove-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-13    Link Here 
1
// A map iterator can cope with removing the next entry.
1
// A map iterator can cope with removing the next entry.
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var set = Set("abcd");
5
var set = new Set("abcd");
6
var iter = set[Symbol.iterator]();
6
var iter = set[Symbol.iterator]();
7
var log = "";
7
var log = "";
8
for (let x of iter) {
8
for (let x of iter) {
9
    log += x;
9
    log += x;
10
    if (x === "b")
10
    if (x === "b")
11
        set.delete("c");
11
        set.delete("c");
12
}
12
}
13
assertEq(log, "abd");
13
assertEq(log, "abd");
(-)a/js/src/jit-test/tests/collections/Set-iterator-remove-3.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-12    Link Here 
1
// A set iterator can cope with removing the next entry, then the current entry.
1
// A set iterator can cope with removing the next entry, then the current entry.
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var set = Set("abcd");
5
var set = new Set("abcd");
6
var iter = set[Symbol.iterator]();
6
var iter = set[Symbol.iterator]();
7
assertIteratorNext(iter, "a");
7
assertIteratorNext(iter, "a");
8
assertIteratorNext(iter, "b");
8
assertIteratorNext(iter, "b");
9
set.delete("c");
9
set.delete("c");
10
set.delete("b");
10
set.delete("b");
11
assertIteratorNext(iter, "d");
11
assertIteratorNext(iter, "d");
12
assertIteratorDone(iter, undefined);
12
assertIteratorDone(iter, undefined);
(-)a/js/src/jit-test/tests/collections/Set-iterator-remove-4.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-14    Link Here 
1
// Multiple live iterators on the same Set can cope with removing entries.
1
// Multiple live iterators on the same Set can cope with removing entries.
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
// Make a set.
5
// Make a set.
6
var set = Set();
6
var set = new Set();
7
var SIZE = 7;
7
var SIZE = 7;
8
for (var j = 0; j < SIZE; j++)
8
for (var j = 0; j < SIZE; j++)
9
    set.add(j);
9
    set.add(j);
10
10
11
// Make lots of iterators pointing to entry 2 of the set.
11
// Make lots of iterators pointing to entry 2 of the set.
12
var NITERS = 5;
12
var NITERS = 5;
13
var iters = [];
13
var iters = [];
14
for (var i = 0; i < NITERS; i++) {
14
for (var i = 0; i < NITERS; i++) {
(-)a/js/src/jit-test/tests/collections/Set-iterator-remove-5.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-13    Link Here 
1
// Removing a Set entry already visited by an iterator does not cause any
1
// Removing a Set entry already visited by an iterator does not cause any
2
// entries to be skipped.
2
// entries to be skipped.
3
3
4
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
4
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
5
var set = Set(str);
5
var set = new Set(str);
6
6
7
var log = '';
7
var log = '';
8
var i = 0;
8
var i = 0;
9
for (var x of set) {
9
for (var x of set) {
10
    log += x;
10
    log += x;
11
    if (i++ % 5 === 0) {
11
    if (i++ % 5 === 0) {
12
        // Delete all entries preceding this one.
12
        // Delete all entries preceding this one.
13
        for (let y of set) {
13
        for (let y of set) {
(-)a/js/src/jit-test/tests/collections/Set-iterator-remove-6.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-15    Link Here 
1
// Removing many Set entries does not cause a live iterator to skip any of the
1
// Removing many Set entries does not cause a live iterator to skip any of the
2
// entries that were not removed. (Compacting a Set must not be observable to
2
// entries that were not removed. (Compacting a Set must not be observable to
3
// script.)
3
// script.)
4
4
5
load(libdir + "iteration.js");
5
load(libdir + "iteration.js");
6
6
7
var set = Set();
7
var set = new Set();
8
for (var i = 0; i < 32; i++)
8
for (var i = 0; i < 32; i++)
9
    set.add(i);
9
    set.add(i);
10
var iter = set[Symbol.iterator]();
10
var iter = set[Symbol.iterator]();
11
assertIteratorNext(iter, 0);
11
assertIteratorNext(iter, 0);
12
for (var i = 0; i < 30; i++)
12
for (var i = 0; i < 30; i++)
13
    set.delete(i);
13
    set.delete(i);
14
assertEq(set.size, 2);
14
assertEq(set.size, 2);
15
for (var i = 32; i < 100; i++)
15
for (var i = 32; i < 100; i++)
(-)a/js/src/jit-test/tests/collections/Set-size.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-7    Link Here 
1
// Each Set has its own size.
1
// Each Set has its own size.
2
2
3
var s1 = Set(), s2 = Set();
3
var s1 = new Set(), s2 = new Set();
4
for (var i = 0; i < 30; i++)
4
for (var i = 0; i < 30; i++)
5
    s1.add(i);
5
    s1.add(i);
6
assertEq(s1.size, 30);
6
assertEq(s1.size, 30);
7
assertEq(s2.size, 0);
7
assertEq(s2.size, 0);
(-)a/js/src/jit-test/tests/collections/Set-surfaces-1.js (-2 / +1 lines)
Line     Link Here 
 Lines 9-26   assertEq(desc.writable, true); Link Here 
9
9
10
assertEq(typeof Set, 'function');
10
assertEq(typeof Set, 'function');
11
assertEq(Object.keys(Set).length, 0);
11
assertEq(Object.keys(Set).length, 0);
12
assertEq(Set.length, 1);
12
assertEq(Set.length, 1);
13
assertEq(Set.name, "Set");
13
assertEq(Set.name, "Set");
14
14
15
assertEq(Object.getPrototypeOf(Set.prototype), Object.prototype);
15
assertEq(Object.getPrototypeOf(Set.prototype), Object.prototype);
16
assertEq(Object.prototype.toString.call(Set.prototype), "[object Set]");
16
assertEq(Object.prototype.toString.call(Set.prototype), "[object Set]");
17
assertEq(Object.prototype.toString.call(new Set), "[object Set]");
17
assertEq(Object.prototype.toString.call(new Set()), "[object Set]");
18
assertEq(Object.prototype.toString.call(Set()), "[object Set]");
19
assertEq(Object.keys(Set.prototype).join(), "");
18
assertEq(Object.keys(Set.prototype).join(), "");
20
assertEq(Set.prototype.constructor, Set);
19
assertEq(Set.prototype.constructor, Set);
21
20
22
function checkMethod(name, arity) { 
21
function checkMethod(name, arity) { 
23
    var desc = Object.getOwnPropertyDescriptor(Set.prototype, name);
22
    var desc = Object.getOwnPropertyDescriptor(Set.prototype, name);
24
    assertEq(desc.enumerable, false);
23
    assertEq(desc.enumerable, false);
25
    assertEq(desc.configurable, true);
24
    assertEq(desc.configurable, true);
26
    assertEq(desc.writable, true);
25
    assertEq(desc.writable, true);
(-)a/js/src/jit-test/tests/collections/Set-values-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-11    Link Here 
1
// set.keys(), .values(), and .entries() on an empty set produce empty iterators
1
// set.keys(), .values(), and .entries() on an empty set produce empty iterators
2
2
3
var s = Set();
3
var s = new Set();
4
var ki = s.keys(), vi = s.values(), ei = s.entries();
4
var ki = s.keys(), vi = s.values(), ei = s.entries();
5
var p = Object.getPrototypeOf(ki);
5
var p = Object.getPrototypeOf(ki);
6
assertEq(Object.getPrototypeOf(vi), p);
6
assertEq(Object.getPrototypeOf(vi), p);
7
assertEq(Object.getPrototypeOf(ei), p);
7
assertEq(Object.getPrototypeOf(ei), p);
8
8
9
for (let k of ki)
9
for (let k of ki)
10
	throw "FAIL";
10
	throw "FAIL";
11
for (let v of vi)
11
for (let v of vi)
(-)a/js/src/jit-test/tests/collections/Set-values-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-15    Link Here 
1
// set.keys() and set.values() return iterators over the elements
1
// set.keys() and set.values() return iterators over the elements
2
// and set.entries() returns an iterator that yields pairs [e, e].
2
// and set.entries() returns an iterator that yields pairs [e, e].
3
3
4
load(libdir + "iteration.js");
4
load(libdir + "iteration.js");
5
5
6
var data = [1, 2, 3, 4];
6
var data = [1, 2, 3, 4];
7
var s = Set(data);
7
var s = new Set(data);
8
8
9
var ki = s.keys();
9
var ki = s.keys();
10
assertIteratorNext(ki, 1);
10
assertIteratorNext(ki, 1);
11
assertIteratorNext(ki, 2);
11
assertIteratorNext(ki, 2);
12
assertIteratorNext(ki, 3);
12
assertIteratorNext(ki, 3);
13
assertIteratorNext(ki, 4);
13
assertIteratorNext(ki, 4);
14
assertIteratorDone(ki, undefined);
14
assertIteratorDone(ki, undefined);
15
15
(-)a/js/src/jit-test/tests/collections/WeakSet-constructor.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-9    Link Here 
1
var list = [Number, Function];
1
var list = [Number, Function];
2
2
3
var ws = new WeakSet(list);
3
var ws = new WeakSet(list);
4
assertEq(ws.has(Number), true);
4
assertEq(ws.has(Number), true);
5
assertEq(ws.has(Function), true);
5
assertEq(ws.has(Function), true);
6
6
7
ws = new WeakSet(Set(list));
7
ws = new WeakSet(new Set(list));
8
assertEq(ws.has(Number), true);
8
assertEq(ws.has(Number), true);
9
assertEq(ws.has(Function), true);
9
assertEq(ws.has(Function), true);
(-)a/js/src/jit-test/tests/collections/constructor-errors.js (-1 / +1 lines)
Line     Link Here 
 Lines 12-22   var misc = [ Link Here 
12
    new Boolean(true), new Number(0),
12
    new Boolean(true), new Number(0),
13
    {iterator: function () { return undefined; }},
13
    {iterator: function () { return undefined; }},
14
    {iterator: function () { return null; }},
14
    {iterator: function () { return null; }},
15
    {iterator: function () { return true; }},
15
    {iterator: function () { return true; }},
16
    {iterator: function () { return 17; }},
16
    {iterator: function () { return 17; }},
17
];
17
];
18
18
19
for (var v of misc) {
19
for (var v of misc) {
20
    assertThrowsInstanceOf(function () { Set(v); }, TypeError);
20
    assertThrowsInstanceOf(function () { new Set(v); }, TypeError);
21
    assertThrowsInstanceOf(function () { new Map(v); }, TypeError);
21
    assertThrowsInstanceOf(function () { new Map(v); }, TypeError);
22
}
22
}
(-)a/js/src/jit-test/tests/collections/iterator-gc.js (-1 / +1 lines)
Line     Link Here 
 Lines 8-16   var key = {}; Link Here 
8
function test(obj, edgeName) {
8
function test(obj, edgeName) {
9
    var iter = obj[Symbol.iterator]();
9
    var iter = obj[Symbol.iterator]();
10
    referencesVia(iter, "**UNKNOWN SLOT 0**", obj);
10
    referencesVia(iter, "**UNKNOWN SLOT 0**", obj);
11
    referencesVia(obj, edgeName, key);
11
    referencesVia(obj, edgeName, key);
12
}
12
}
13
13
14
test([key],                     "element[0]");
14
test([key],                     "element[0]");
15
test(new Map([[key, 'value']]), "key");
15
test(new Map([[key, 'value']]), "key");
16
test(Set([key]),                "key");
16
test(new Set([key]),            "key");
(-)a/js/src/jit-test/tests/collections/iterator-proto-1.js (-1 / +1 lines)
Line     Link Here 
 Lines 7-15   function test(obj0, obj1) { Link Here 
7
    var iter0 = obj0[Symbol.iterator](), iter1 = obj1[Symbol.iterator]();
7
    var iter0 = obj0[Symbol.iterator](), iter1 = obj1[Symbol.iterator]();
8
    var proto = Object.getPrototypeOf(iter0);
8
    var proto = Object.getPrototypeOf(iter0);
9
    assertEq(Object.getPrototypeOf(iter1), proto);
9
    assertEq(Object.getPrototypeOf(iter1), proto);
10
    assertEq(Object.getPrototypeOf(proto), Iterator.prototype);
10
    assertEq(Object.getPrototypeOf(proto), Iterator.prototype);
11
}
11
}
12
12
13
test([], [1]);
13
test([], [1]);
14
test(new Map(), new Map([[1, 1]]));
14
test(new Map(), new Map([[1, 1]]));
15
test(Set(), Set([1]));
15
test(new Set(), new Set([1]));
(-)a/js/src/jit-test/tests/collections/iterator-proto-2.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-13    Link Here 
1
// Iterators of different collection types have different prototypes.
1
// Iterators of different collection types have different prototypes.
2
2
3
load(libdir + "iteration.js");
3
load(libdir + "iteration.js");
4
4
5
var aproto = Object.getPrototypeOf(Array()[Symbol.iterator]());
5
var aproto = Object.getPrototypeOf(Array()[Symbol.iterator]());
6
var mproto = Object.getPrototypeOf(new Map()[Symbol.iterator]());
6
var mproto = Object.getPrototypeOf(new Map()[Symbol.iterator]());
7
var sproto = Object.getPrototypeOf(Set()[Symbol.iterator]());
7
var sproto = Object.getPrototypeOf(new Set()[Symbol.iterator]());
8
assertEq(aproto !== mproto, true);
8
assertEq(aproto !== mproto, true);
9
assertEq(aproto !== sproto, true);
9
assertEq(aproto !== sproto, true);
10
assertEq(mproto !== sproto, true);
10
assertEq(mproto !== sproto, true);
11
assertEq(aproto.next !== mproto.next, true);
11
assertEq(aproto.next !== mproto.next, true);
12
assertEq(aproto.next !== sproto.next, true);
12
assertEq(aproto.next !== sproto.next, true);
13
assertEq(mproto.next !== sproto.next, true);
13
assertEq(mproto.next !== sproto.next, true);
(-)a/js/src/jit-test/tests/gc/bug-880816.js (-1 / +1 lines)
Line     Link Here 
 Lines 4-20   lfcode.push("2"); Link Here 
4
lfcode.push("{ function foo() {} }");
4
lfcode.push("{ function foo() {} }");
5
lfcode.push("evaluate('\
5
lfcode.push("evaluate('\
6
var INVALIDATE_MODES = INVALIDATE_MODE_STRINGS.map(s => ({mode: s}));\
6
var INVALIDATE_MODES = INVALIDATE_MODE_STRINGS.map(s => ({mode: s}));\
7
function range(n, m) {}\
7
function range(n, m) {}\
8
function seq_scan(array, f) {}\
8
function seq_scan(array, f) {}\
9
function assertStructuralEq(e1, e2) {}\
9
function assertStructuralEq(e1, e2) {}\
10
for (var i = 0, l = a.length; i < l; i++) {}\
10
for (var i = 0, l = a.length; i < l; i++) {}\
11
');");
11
');");
12
lfcode.push("for (var x of Set(Object.getOwnPropertyNames(this))) {}");
12
lfcode.push("for (var x of new Set(Object.getOwnPropertyNames(this))) {}");
13
var lfRunTypeId = -1;
13
var lfRunTypeId = -1;
14
while (true) {
14
while (true) {
15
  var file = lfcode.shift(); if (file == undefined) { break; }
15
  var file = lfcode.shift(); if (file == undefined) { break; }
16
  loadFile(file)
16
  loadFile(file)
17
}
17
}
18
function loadFile(lfVarx) {
18
function loadFile(lfVarx) {
19
    try {
19
    try {
20
        if (lfVarx.substr(-3) == ".js") {}
20
        if (lfVarx.substr(-3) == ".js") {}
(-)a/js/src/jit-test/tests/generators/bug908920.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-9    Link Here 
1
if (typeof schedulegc != 'undefined') {
1
if (typeof schedulegc != 'undefined') {
2
    Function("\
2
    Function("\
3
        x = (function() { yield })();\
3
        x = (function() { yield })();\
4
        Set(x);\
4
        new Set(x);\
5
        schedulegc(1);\
5
        schedulegc(1);\
6
        print( /x/ );\
6
        print( /x/ );\
7
        for (p in x) {}\
7
        for (p in x) {}\
8
    ")();
8
    ")();
9
}
9
}
(-)a/js/src/jit-test/tests/structured-clone/Map-Set-cross-compartment.js (-1 / +1 lines)
Line     Link Here 
 Lines 1-8    Link Here 
1
/*
1
/*
2
 * Any copyright is dedicated to the Public Domain.
2
 * Any copyright is dedicated to the Public Domain.
3
 * http://creativecommons.org/licenses/publicdomain/
3
 * http://creativecommons.org/licenses/publicdomain/
4
 */
4
 */
5
5
6
// Don't crash
6
// Don't crash
7
serialize(evalcx("Set(['x', 'y'])"));
7
serialize(evalcx("new Set(['x', 'y'])"));
8
serialize(evalcx("new Map([['x', 1]])"));
8
serialize(evalcx("new Map([['x', 1]])"));

Return to bug 1108930