Source code

Revision control

Copy as Markdown

Other Tools

// MappedArgSetter/UnmappedArgSetter correctly handle arguments objects which
// are non-extensible.
function makeMappedArgs(a, b) {
return Object.preventExtensions(arguments);
}
function makeUnmappedArgs(a, b) {
"use strict";
return Object.preventExtensions(arguments);
}
// Set "length" property on mapped arguments object.
{
let args = makeMappedArgs(1, 2);
args.length = 5;
assertEq(args.length, 5);
assertEq(Object.hasOwn(args, "length"), true);
}
{
let args = makeMappedArgs(1, 2);
assertEq(Reflect.set(args, "length", 5), true);
assertEq(args.length, 5);
assertEq(Object.hasOwn(args, "length"), true);
}
// Set "callee" property on mapped arguments object.
{
let args = makeMappedArgs(1, 2);
args.callee = null;
assertEq(args.callee, null);
assertEq(Object.hasOwn(args, "callee"), true);
}
{
let args = makeMappedArgs(1, 2);
assertEq(Reflect.set(args, "callee", null), true);
assertEq(args.callee, null);
assertEq(Object.hasOwn(args, "callee"), true);
}
// Set element on mapped arguments object.
{
let args = makeMappedArgs(1, 2);
args[0] = 123;
assertEq(args[0], 123);
assertEq(Object.hasOwn(args, "0"), true);
}
{
let args = makeMappedArgs(1, 2);
assertEq(Reflect.set(args, "0", 123), true);
assertEq(args[0], 123);
assertEq(Object.hasOwn(args, "0"), true);
}
// Set "length" property on unmapped arguments object.
{
let args = makeUnmappedArgs(1, 2);
args.length = 5;
assertEq(args.length, 5);
assertEq(Object.hasOwn(args, "length"), true);
}
{
let args = makeUnmappedArgs(1, 2);
assertEq(Reflect.set(args, "length", 5), true);
assertEq(args.length, 5);
assertEq(Object.hasOwn(args, "length"), true);
}
// Set element on unmapped arguments object.
{
let args = makeUnmappedArgs(1, 2);
args[0] = 123;
assertEq(args[0], 123);
assertEq(Object.hasOwn(args, "0"), true);
}
{
let args = makeUnmappedArgs(1, 2);
assertEq(Reflect.set(args, "0", 123), true);
assertEq(args[0], 123);
assertEq(Object.hasOwn(args, "0"), true);
}