mirror of https://github.com/tc39/test262.git
Merge pull request #234 from bocoup/fix-writable-check
Fix bug in `isWritable` utility function
This commit is contained in:
commit
5006855944
|
@ -31,7 +31,7 @@ function isWritable(obj, name, verifyProp, value) {
|
||||||
var newValue = value || "unlikelyValue";
|
var newValue = value || "unlikelyValue";
|
||||||
var hadValue = Object.prototype.hasOwnProperty.call(obj, name);
|
var hadValue = Object.prototype.hasOwnProperty.call(obj, name);
|
||||||
var oldValue = obj[name];
|
var oldValue = obj[name];
|
||||||
var result;
|
var writeSucceeded;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
obj[name] = newValue;
|
obj[name] = newValue;
|
||||||
|
@ -41,16 +41,21 @@ function isWritable(obj, name, verifyProp, value) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = (verifyProp && isEqualTo(obj, verifyProp, newValue)) ||
|
writeSucceeded = (verifyProp && isEqualTo(obj, verifyProp, newValue)) ||
|
||||||
isEqualTo(obj, name, newValue);
|
isEqualTo(obj, name, newValue);
|
||||||
|
|
||||||
if (hadValue) {
|
// Revert the change only if it was successful (in other cases, reverting
|
||||||
obj[name] = oldValue;
|
// is unnecessary and may trigger exceptions for certain property
|
||||||
} else {
|
// configurations)
|
||||||
delete obj[name];
|
if (writeSucceeded) {
|
||||||
|
if (hadValue) {
|
||||||
|
obj[name] = oldValue;
|
||||||
|
} else {
|
||||||
|
delete obj[name];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return writeSucceeded;
|
||||||
}
|
}
|
||||||
|
|
||||||
function verifyEqualTo(obj, name, value) {
|
function verifyEqualTo(obj, name, value) {
|
||||||
|
|
Loading…
Reference in New Issue