1
0
mirror of https://github.com/robertkrimen/otto synced 2025-10-05 19:19:10 +08:00

Merge pull request #134 from deoxxa/fix-getter-setter-clone

fix cloning getter/setter props
This commit is contained in:
Conrad Pankoff 2015-12-03 08:43:25 +11:00
commit b5ae8b65d7
2 changed files with 31 additions and 5 deletions

View File

@ -141,14 +141,22 @@ func (clone *_clone) stash(in _stash) _stash {
func (clone *_clone) property(in _property) _property {
out := in
switch v := in.value.(type) {
case _propertyGetSet:
out.value = _propertyGetSet{v[0], v[1]}
switch value := in.value.(type) {
case Value:
out.value = clone.value(v)
out.value = clone.value(value)
case _propertyGetSet:
p := _propertyGetSet{}
if value[0] != nil {
p[0] = clone.object(value[0])
}
if value[1] != nil {
p[1] = clone.object(value[1])
}
out.value = p
default:
panic(fmt.Errorf("in.value.(Value) != true"))
panic(fmt.Errorf("in.value.(Value) != true; in.value is %T", in.value))
}
return out
}

18
clone_test.go Normal file
View File

@ -0,0 +1,18 @@
package otto
import (
"testing"
)
func TestCloneGetterSetter(t *testing.T) {
vm := New()
vm.Run(`var x = Object.create(null, {
x: {
get: function() {},
set: function() {},
},
})`)
vm.Copy()
}