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>
diff --git a/src/syscall/js/func.go b/src/syscall/js/func.go
index ab23e5f..dde1e68 100644
--- a/src/syscall/js/func.go
+++ b/src/syscall/js/func.go
@@ -15,8 +15,6 @@
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 d805d69..0da0ddf 100644
--- a/src/syscall/js/js.go
+++ b/src/syscall/js/js.go
@@ -28,12 +28,6 @@
// 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 @@
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 @@
// 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: