mirror of
https://github.com/robertkrimen/otto
synced 2025-10-19 19:55:30 +08:00
Clarify AccessorDescriptor logic in DefineOwnProperty even more
This commit is contained in:
parent
acf0a991f7
commit
99263cd960
|
|
@ -328,18 +328,25 @@ func objectDefineOwnProperty(self *_object, name string, descriptor _property, t
|
|||
} else {
|
||||
// AccessorDescriptor <=> AccessorDescriptor
|
||||
newGetSet, _ := descriptor.value.(_propertyGetSet)
|
||||
presentGet, presentSet := true, true
|
||||
if newGetSet[0] == &_nilGetSetObject {
|
||||
// Present, but nil
|
||||
newGetSet[0] = nil
|
||||
} else if newGetSet[0] == nil {
|
||||
// Missing, not even nil
|
||||
newGetSet[0] = getSet[0]
|
||||
presentGet = false
|
||||
}
|
||||
if newGetSet[1] == &_nilGetSetObject {
|
||||
// Present, but nil
|
||||
newGetSet[1] = nil
|
||||
} else if newGetSet[1] == nil {
|
||||
// Missing, not even nil
|
||||
newGetSet[1] = getSet[1]
|
||||
presentSet = false
|
||||
}
|
||||
if !configurable {
|
||||
if (getSet[0] != nil && (getSet[0] != newGetSet[0])) || (getSet[1] != nil && (getSet[1] != newGetSet[1])) {
|
||||
if (presentGet && (getSet[0] != newGetSet[0])) || (presentSet && (getSet[1] != newGetSet[1])) {
|
||||
goto Reject
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -512,8 +512,7 @@ func TestObjectGetterSetter(t *testing.T) {
|
|||
configurable: false
|
||||
});
|
||||
|
||||
var jkl;
|
||||
|
||||
var jkl = undefined;
|
||||
try {
|
||||
Object.defineProperty(abc, "def", {
|
||||
get: undefined
|
||||
|
|
@ -542,9 +541,33 @@ func TestObjectGetterSetter(t *testing.T) {
|
|||
});
|
||||
|
||||
var ghi = Object.getOwnPropertyDescriptor(abc, "def");
|
||||
|
||||
[ ghi.get === getter, ghi.set === undefined, ghi.configurable, ghi.enumerable ];
|
||||
`, "true,true,false,false")
|
||||
|
||||
test(`
|
||||
var abc = {};
|
||||
|
||||
var getter = function() {
|
||||
return 1;
|
||||
};
|
||||
|
||||
Object.defineProperty(abc, "def", {
|
||||
get: getter
|
||||
});
|
||||
|
||||
var jkl = undefined;
|
||||
try {
|
||||
Object.defineProperty(abc, "def", {
|
||||
set: function() {}
|
||||
});
|
||||
}
|
||||
catch (err) {
|
||||
jkl = err;
|
||||
}
|
||||
|
||||
var ghi = Object.getOwnPropertyDescriptor(abc, "def");
|
||||
[ jkl instanceof TypeError, ghi.get === getter, ghi.set, ghi.configurable, ghi.enumerable ];
|
||||
`, "true,true,,false,false")
|
||||
}
|
||||
|
||||
func TestProperty(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user