mirror of
https://github.com/robertkrimen/otto
synced 2025-10-12 20:27:30 +08:00
Fix trying to delete non-reference
This commit is contained in:
parent
d87480bd29
commit
0498f06be0
|
@ -103,6 +103,10 @@ func (self *_runtime) evaluateUnaryOperation(node *_unaryOperationNode) Value {
|
|||
case "void":
|
||||
return UndefinedValue()
|
||||
case "delete":
|
||||
reference := target.reference()
|
||||
if reference == nil {
|
||||
return TrueValue()
|
||||
}
|
||||
return toValue(target.reference().Delete())
|
||||
case "typeof":
|
||||
switch targetValue._valueType {
|
||||
|
|
10
otto_test.go
10
otto_test.go
|
@ -2163,3 +2163,13 @@ func Test_stringToFloat(t *testing.T) {
|
|||
Is(stringToFloat("10e10000"), math.Inf(1))
|
||||
Is(stringToFloat("10e10_."), "NaN")
|
||||
}
|
||||
|
||||
func Test_delete(t *testing.T) {
|
||||
Terst(t)
|
||||
|
||||
test := runTest()
|
||||
|
||||
test(`
|
||||
delete 42;
|
||||
`, "true")
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package otto
|
|||
|
||||
type _reference interface {
|
||||
GetBase() *_object
|
||||
CanResolve() bool
|
||||
GetValue() Value
|
||||
PutValue(Value) bool
|
||||
Name() string
|
||||
|
@ -16,10 +17,6 @@ type _reference_ struct {
|
|||
strict bool
|
||||
}
|
||||
|
||||
func (self _reference_) GetBase() *_object {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self _reference_) Name() string {
|
||||
return self.name
|
||||
}
|
||||
|
@ -28,10 +25,6 @@ func (self _reference_) Strict() bool {
|
|||
return self.strict
|
||||
}
|
||||
|
||||
func (self _reference_) Delete() {
|
||||
panic(hereBeDragons())
|
||||
}
|
||||
|
||||
// PropertyReference
|
||||
|
||||
type _propertyReference struct {
|
||||
|
@ -55,6 +48,10 @@ func (self *_propertyReference) GetBase() *_object {
|
|||
return self.Base
|
||||
}
|
||||
|
||||
func (self *_propertyReference) CanResolve() bool {
|
||||
return self.Base != nil
|
||||
}
|
||||
|
||||
func (self *_propertyReference) GetValue() Value {
|
||||
if self.Base == nil {
|
||||
panic(newReferenceError("notDefined", self.name, self.node))
|
||||
|
@ -73,7 +70,8 @@ func (self *_propertyReference) PutValue(value Value) bool {
|
|||
func (self *_propertyReference) Delete() bool {
|
||||
if self.Base == nil {
|
||||
// ?
|
||||
return false
|
||||
// TODO Throw an error if strict
|
||||
return true
|
||||
}
|
||||
return self.Base.delete(self.name, self.Strict())
|
||||
}
|
||||
|
@ -108,6 +106,10 @@ func (self *_environmentReference) GetBase() *_object {
|
|||
return nil // FIXME
|
||||
}
|
||||
|
||||
func (self *_environmentReference) CanResolve() bool {
|
||||
return true // FIXME
|
||||
}
|
||||
|
||||
func (self *_environmentReference) GetValue() Value {
|
||||
if self.Base == nil {
|
||||
panic(newReferenceError("notDefined", self.name, self.node))
|
||||
|
|
Loading…
Reference in New Issue
Block a user