aboutsummaryrefslogtreecommitdiff
path: root/src/syscall
diff options
context:
space:
mode:
authorRichard Musiol <mail@richard-musiol.de>2021-10-16 17:17:21 +0200
committerRichard Musiol <neelance@gmail.com>2021-10-18 21:21:54 +0000
commit6c0daa733192031eab23d09ed6515c4cd959aa92 (patch)
tree4080e872deadc7928262baaa798c2f15f7f38e48 /src/syscall
parent267abbe3ba9dda96a8694e8aad8892e3ba2be60e (diff)
downloadgo-6c0daa733192031eab23d09ed6515c4cd959aa92.tar.xz
syscall/js: remove Wrapper interface
This change removes the js.Wrapper interface for performance reasons. See proposal #44006 for details. This is a breaking change, but syscall/js is exempt from Go's compatibility promise. Fixes #44006 Change-Id: I968cd14b1e61cc72ea9f84240b6bd29e8b8ae673 Reviewed-on: https://go-review.googlesource.com/c/go/+/356430 Trust: Richard Musiol <neelance@gmail.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com>
Diffstat (limited to 'src/syscall')
-rw-r--r--src/syscall/js/func.go2
-rw-r--r--src/syscall/js/js.go17
2 files changed, 3 insertions, 16 deletions
diff --git a/src/syscall/js/func.go b/src/syscall/js/func.go
index ab23e5fbfc..dde1e68100 100644
--- a/src/syscall/js/func.go
+++ b/src/syscall/js/func.go
@@ -15,8 +15,6 @@ var (
nextFuncID uint32 = 1
)
-var _ Wrapper = Func{} // Func must implement Wrapper
-
// Func is a wrapped Go function to be called by JavaScript.
type Func struct {
Value // the JavaScript function that invokes the Go function
diff --git a/src/syscall/js/js.go b/src/syscall/js/js.go
index d805d69166..0da0ddfa0f 100644
--- a/src/syscall/js/js.go
+++ b/src/syscall/js/js.go
@@ -28,12 +28,6 @@ type ref uint64
// nanHead are the upper 32 bits of a ref which are set if the value is not encoded as an IEEE 754 number (see above).
const nanHead = 0x7FF80000
-// Wrapper is implemented by types that are backed by a JavaScript value.
-type Wrapper interface {
- // JSValue returns a JavaScript value associated with an object.
- JSValue() Value
-}
-
// Value represents a JavaScript value. The zero value is the JavaScript value "undefined".
// Values can be checked for equality with the Equal method.
type Value struct {
@@ -51,11 +45,6 @@ const (
typeFlagFunction
)
-// JSValue implements Wrapper interface.
-func (v Value) JSValue() Value {
- return v
-}
-
func makeValue(r ref) Value {
var gcPtr *ref
typeFlag := (r >> 32) & 7
@@ -162,10 +151,10 @@ func Global() Value {
// Panics if x is not one of the expected types.
func ValueOf(x interface{}) Value {
switch x := x.(type) {
- case Value: // should precede Wrapper to avoid a loop
+ case Value:
return x
- case Wrapper:
- return x.JSValue()
+ case Func:
+ return x.Value
case nil:
return valueNull
case bool: