summaryrefslogtreecommitdiff
path: root/src/syscall/js
diff options
context:
space:
mode:
authorRichard Musiol <mail@richard-musiol.de>2019-09-28 23:47:37 +0200
committerRichard Musiol <neelance@gmail.com>2019-09-30 14:40:06 +0000
commit60f271358f07647be0de9ee8225b50a391ea5def (patch)
treea96f7427406a9b46f04c5954acea0c2ec52304b6 /src/syscall/js
parent843fec1c7d75cac3f76620e79f1680d8f058c501 (diff)
downloadgo-git-60f271358f07647be0de9ee8225b50a391ea5def.tar.gz
syscall/js: add Value.Delete for deleting JavaScript properties
This change adds the method Value.Delete, which implements JavaScript's "delete" operator for deleting properties. Fixes #33079. Change-Id: Ia5b190240bd59daca48094fcbc32f8d0a06f19d5 Reviewed-on: https://go-review.googlesource.com/c/go/+/197840 Run-TryBot: Richard Musiol <neelance@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/syscall/js')
-rw-r--r--src/syscall/js/js.go11
-rw-r--r--src/syscall/js/js_js.s4
-rw-r--r--src/syscall/js/js_test.go12
3 files changed, 27 insertions, 0 deletions
diff --git a/src/syscall/js/js.go b/src/syscall/js/js.go
index 7300d2c769..f42a16f0d0 100644
--- a/src/syscall/js/js.go
+++ b/src/syscall/js/js.go
@@ -267,6 +267,17 @@ func (v Value) Set(p string, x interface{}) {
func valueSet(v ref, p string, x ref)
+// Delete deletes the JavaScript property p of value v.
+// It panics if v is not a JavaScript object.
+func (v Value) Delete(p string) {
+ if vType := v.Type(); !vType.isObject() {
+ panic(&ValueError{"Value.Delete", vType})
+ }
+ valueDelete(v.ref, p)
+}
+
+func valueDelete(v ref, p string)
+
// Index returns JavaScript index i of value v.
// It panics if v is not a JavaScript object.
func (v Value) Index(i int) Value {
diff --git a/src/syscall/js/js_js.s b/src/syscall/js/js_js.s
index 5f29468237..ab56087c16 100644
--- a/src/syscall/js/js_js.s
+++ b/src/syscall/js/js_js.s
@@ -16,6 +16,10 @@ TEXT ·valueSet(SB), NOSPLIT, $0
CallImport
RET
+TEXT ·valueDelete(SB), NOSPLIT, $0
+ CallImport
+ RET
+
TEXT ·valueIndex(SB), NOSPLIT, $0
CallImport
RET
diff --git a/src/syscall/js/js_test.go b/src/syscall/js/js_test.go
index 753c2c3a0d..10d4364e4c 100644
--- a/src/syscall/js/js_test.go
+++ b/src/syscall/js/js_test.go
@@ -212,6 +212,18 @@ func TestSet(t *testing.T) {
})
}
+func TestDelete(t *testing.T) {
+ dummys.Set("test", 42)
+ dummys.Delete("test")
+ if dummys.Call("hasOwnProperty", "test").Bool() {
+ t.Errorf("property still exists")
+ }
+
+ expectValueError(t, func() {
+ dummys.Get("zero").Delete("badField")
+ })
+}
+
func TestIndex(t *testing.T) {
if got := dummys.Get("someArray").Index(1).Int(); got != 42 {
t.Errorf("got %#v, want %#v", got, 42)