blob: d7175bf3de026e9d2a48e049f65664266248e917 [file] [log] [blame]
// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-arguments-exotic-objects-defineownproperty-p-desc
description: >
OrdinaryDefineOwnProperty returning `false` doesn't leave `arguments` in a
corrupted state, for both mapped and unmapped indices.
info: |
[[DefineOwnProperty]] ( P, Desc )
[...]
6. Let allowed be ? OrdinaryDefineOwnProperty(args, P, newArgDesc).
7. If allowed is false, return false.
flags: [noStrict]
---*/
(function(a) {
Object.defineProperty(arguments, "0", {configurable: false});
assert.throws(TypeError, () => {
Object.defineProperty(arguments, "0", {configurable: true});
});
a = 2;
assert.sameValue(arguments[0], 2);
Object.defineProperty(arguments, "1", {
get: () => 3,
configurable: false,
});
assert.throws(TypeError, () => {
Object.defineProperty(arguments, "1", {value: "foo"});
});
assert.sameValue(arguments[1], 3);
assert.throws(TypeError, () => {
"use strict";
delete arguments[1];
});
})(0);