]> Cypherpunks repositories - gostls13.git/commitdiff
syscall/js: remove Wrapper interface
authorRichard Musiol <mail@richard-musiol.de>
Sat, 16 Oct 2021 15:17:21 +0000 (17:17 +0200)
committerRichard Musiol <neelance@gmail.com>
Mon, 18 Oct 2021 21:21:54 +0000 (21:21 +0000)
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>
src/syscall/js/func.go
src/syscall/js/js.go

index ab23e5fbfc0cce35a8821c6de43ef36bbaf90157..dde1e6810023b0dc2cd866729cf68c06ead3a78f 100644 (file)
@@ -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
index d805d6916644d7d0c0dde33d1706bf87e72d064a..0da0ddfa0fbbd1baa7784e02f186e63ddf984e0e 100644 (file)
@@ -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: