Remove unnecessary checks for functions

This commit is contained in:
André Bargull 2025-04-30 14:16:16 +02:00 committed by Philip Chimento
parent b096b30f60
commit 47ba37f098
3 changed files with 142 additions and 147 deletions

View File

@ -212,12 +212,10 @@ TestGenerator(
["fee", "fi", "fo", "fum", undefined]); ["fee", "fi", "fo", "fum", undefined]);
// GC. // GC.
if (typeof gc == 'function') { TestGenerator(function* g16() { yield "baz"; $262.gc(); yield "qux"; },
TestGenerator(function* g16() { yield "baz"; $262.gc(); yield "qux"; },
["baz", "qux", undefined], ["baz", "qux", undefined],
"foo", "foo",
["baz", "qux", undefined]); ["baz", "qux", undefined]);
}
// Receivers. // Receivers.
TestGenerator( TestGenerator(

View File

@ -13,77 +13,77 @@ esid: pending
features: [Symbol] features: [Symbol]
---*/ ---*/
if ("entries" in Object) { assert.sameValue("entries" in Object, true);
assert.sameValue(Object.entries.length, 1); assert.sameValue(Object.entries.length, 1);
var o, entries; var o, entries;
o = { a: 3, b: 2 }; o = { a: 3, b: 2 };
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["a", 3], ["b", 2]]); assert.deepEqual(entries, [["a", 3], ["b", 2]]);
o = { get a() { return 17; }, b: 2 }; o = { get a() { return 17; }, b: 2 };
entries = Object.entries(o), entries = Object.entries(o),
assert.deepEqual(entries, [["a", 17], ["b", 2]]); assert.deepEqual(entries, [["a", 17], ["b", 2]]);
o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } }; o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } };
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["__iterator__", o.__iterator__]]); assert.deepEqual(entries, [["__iterator__", o.__iterator__]]);
o = { a: 1, b: 2 }; o = { a: 1, b: 2 };
delete o.a; delete o.a;
o.a = 3; o.a = 3;
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["b", 2], ["a", 3]]); assert.deepEqual(entries, [["b", 2], ["a", 3]]);
o = [0, 1, 2]; o = [0, 1, 2];
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["0", 0], ["1", 1], ["2", 2]]); assert.deepEqual(entries, [["0", 0], ["1", 1], ["2", 2]]);
o = /./.exec("abc"); o = /./.exec("abc");
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["0", "a"], ["index", 0], ["input", "abc"], ["groups", undefined]]); assert.deepEqual(entries, [["0", "a"], ["index", 0], ["input", "abc"], ["groups", undefined]]);
o = { a: 1, b: 2, c: 3 }; o = { a: 1, b: 2, c: 3 };
delete o.b; delete o.b;
o.b = 5; o.b = 5;
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["a", 1], ["c", 3], ["b", 5]]); assert.deepEqual(entries, [["a", 1], ["c", 3], ["b", 5]]);
function f() { } function f() { }
f.prototype.p = 1; f.prototype.p = 1;
o = new f(); o = new f();
o.g = 1; o.g = 1;
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["g", 1]]); assert.deepEqual(entries, [["g", 1]]);
var o = {get a() {delete this.b; return 1}, b: 2, c: 3}; var o = {get a() {delete this.b; return 1}, b: 2, c: 3};
entries = Object.entries(o); entries = Object.entries(o);
assert.deepEqual(entries, [["a", 1], ["c", 3]]); assert.deepEqual(entries, [["a", 1], ["c", 3]]);
assert.throws(TypeError, () => Object.entries()); assert.throws(TypeError, () => Object.entries());
assert.throws(TypeError, () => Object.entries(undefined)); assert.throws(TypeError, () => Object.entries(undefined));
assert.throws(TypeError, () => Object.entries(null)); assert.throws(TypeError, () => Object.entries(null));
assert.deepEqual(Object.entries(1), []); assert.deepEqual(Object.entries(1), []);
assert.deepEqual(Object.entries(true), []); assert.deepEqual(Object.entries(true), []);
assert.deepEqual(Object.entries(Symbol("foo")), []); assert.deepEqual(Object.entries(Symbol("foo")), []);
assert.deepEqual(Object.entries("foo"), [["0", "f"], ["1", "o"], ["2", "o"]]); assert.deepEqual(Object.entries("foo"), [["0", "f"], ["1", "o"], ["2", "o"]]);
entries = Object.entries({ entries = Object.entries({
get a(){ get a(){
Object.defineProperty(this, "b", {enumerable: false}); Object.defineProperty(this, "b", {enumerable: false});
return "A"; return "A";
}, },
b: "B" b: "B"
}); });
assert.deepEqual(entries, [["a", "A"]]); assert.deepEqual(entries, [["a", "A"]]);
let ownKeysCallCount = 0; let ownKeysCallCount = 0;
let getOwnPropertyDescriptorCalls = []; let getOwnPropertyDescriptorCalls = [];
let target = { a: 1, b: 2, c: 3 }; let target = { a: 1, b: 2, c: 3 };
o = new Proxy(target, { o = new Proxy(target, {
ownKeys() { ownKeys() {
ownKeysCallCount++; ownKeysCallCount++;
return ["c", "a"]; return ["c", "a"];
@ -92,10 +92,8 @@ if ("entries" in Object) {
getOwnPropertyDescriptorCalls.push(key); getOwnPropertyDescriptorCalls.push(key);
return Object.getOwnPropertyDescriptor(target, key); return Object.getOwnPropertyDescriptor(target, key);
} }
}); });
entries = Object.entries(o); entries = Object.entries(o);
assert.sameValue(ownKeysCallCount, 1); assert.sameValue(ownKeysCallCount, 1);
assert.deepEqual(entries, [["c", 3], ["a", 1]]); assert.deepEqual(entries, [["c", 3], ["a", 1]]);
assert.deepEqual(getOwnPropertyDescriptorCalls, ["c", "a"]); assert.deepEqual(getOwnPropertyDescriptorCalls, ["c", "a"]);
}

View File

@ -12,77 +12,78 @@ description: |
esid: pending esid: pending
features: [Symbol] features: [Symbol]
---*/ ---*/
if ("values" in Object) {
assert.sameValue(Object.values.length, 1);
var o, values; assert.sameValue("values" in Object, true);
assert.sameValue(Object.values.length, 1);
o = { a: 3, b: 2 }; var o, values;
values = Object.values(o);
assert.compareArray(values, [3, 2]);
o = { get a() { return 17; }, b: 2 }; o = { a: 3, b: 2 };
values = Object.values(o), values = Object.values(o);
assert.compareArray(values, [17, 2]); assert.compareArray(values, [3, 2]);
o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } }; o = { get a() { return 17; }, b: 2 };
values = Object.values(o); values = Object.values(o),
assert.compareArray(values, [o.__iterator__]); assert.compareArray(values, [17, 2]);
o = { a: 1, b: 2 }; o = { __iterator__: function() { throw new Error("non-standard __iterator__ called?"); } };
delete o.a; values = Object.values(o);
o.a = 3; assert.compareArray(values, [o.__iterator__]);
values = Object.values(o);
assert.compareArray(values, [2, 3]);
o = [0, 1, 2]; o = { a: 1, b: 2 };
values = Object.values(o); delete o.a;
assert.compareArray(values, [0, 1, 2]); o.a = 3;
values = Object.values(o);
assert.compareArray(values, [2, 3]);
o = /./.exec("abc"); o = [0, 1, 2];
values = Object.values(o); values = Object.values(o);
assert.compareArray(values, ["a", 0, "abc", undefined]); assert.compareArray(values, [0, 1, 2]);
o = { a: 1, b: 2, c: 3 }; o = /./.exec("abc");
delete o.b; values = Object.values(o);
o.b = 5; assert.compareArray(values, ["a", 0, "abc", undefined]);
values = Object.values(o);
assert.compareArray(values, [1, 3, 5]);
function f() { } o = { a: 1, b: 2, c: 3 };
f.prototype.p = 1; delete o.b;
o = new f(); o.b = 5;
o.g = 1; values = Object.values(o);
values = Object.values(o); assert.compareArray(values, [1, 3, 5]);
assert.compareArray(values, [1]);
var o = {get a() {delete this.b; return 1}, b: 2, c: 3}; function f() { }
values = Object.values(o); f.prototype.p = 1;
assert.compareArray(values, [1, 3]); o = new f();
o.g = 1;
values = Object.values(o);
assert.compareArray(values, [1]);
assert.throws(TypeError, () => Object.values()); var o = {get a() {delete this.b; return 1}, b: 2, c: 3};
assert.throws(TypeError, () => Object.values(undefined)); values = Object.values(o);
assert.throws(TypeError, () => Object.values(null)); assert.compareArray(values, [1, 3]);
assert.compareArray(Object.values(1), []); assert.throws(TypeError, () => Object.values());
assert.compareArray(Object.values(true), []); assert.throws(TypeError, () => Object.values(undefined));
assert.compareArray(Object.values(Symbol("foo")), []); assert.throws(TypeError, () => Object.values(null));
assert.compareArray(Object.values("foo"), ["f", "o", "o"]); assert.compareArray(Object.values(1), []);
assert.compareArray(Object.values(true), []);
assert.compareArray(Object.values(Symbol("foo")), []);
values = Object.values({ assert.compareArray(Object.values("foo"), ["f", "o", "o"]);
values = Object.values({
get a(){ get a(){
Object.defineProperty(this, "b", {enumerable: false}); Object.defineProperty(this, "b", {enumerable: false});
return "A"; return "A";
}, },
b: "B" b: "B"
}); });
assert.compareArray(values, ["A"]); assert.compareArray(values, ["A"]);
let ownKeysCallCount = 0; let ownKeysCallCount = 0;
let getOwnPropertyDescriptorCalls = []; let getOwnPropertyDescriptorCalls = [];
let target = { a: 1, b: 2, c: 3 }; let target = { a: 1, b: 2, c: 3 };
o = new Proxy(target, { o = new Proxy(target, {
ownKeys() { ownKeys() {
ownKeysCallCount++; ownKeysCallCount++;
return ["c", "a"]; return ["c", "a"];
@ -91,10 +92,8 @@ if ("values" in Object) {
getOwnPropertyDescriptorCalls.push(key); getOwnPropertyDescriptorCalls.push(key);
return Object.getOwnPropertyDescriptor(target, key); return Object.getOwnPropertyDescriptor(target, key);
} }
}); });
values = Object.values(o); values = Object.values(o);
assert.sameValue(ownKeysCallCount, 1); assert.sameValue(ownKeysCallCount, 1);
assert.compareArray(values, [3, 1]); assert.compareArray(values, [3, 1]);
assert.compareArray(getOwnPropertyDescriptorCalls, ["c", "a"]); assert.compareArray(getOwnPropertyDescriptorCalls, ["c", "a"]);
}