Skip to content

Commit

Permalink
syscall/js: remove Wrapper interface
Browse files Browse the repository at this point in the history
This change removes the js.Wrapper interface for performance reasons.
See proposal golang#44006 for details.

This is a breaking change, but syscall/js is exempt from Go's
compatibility promise.

Fixes golang#44006

Change-Id: I968cd14b1e61cc72ea9f84240b6bd29e8b8ae673
Reviewed-on: https://go-review.googlesource.com/c/go/+/356430
Trust: Richard Musiol <[email protected]>
Reviewed-by: Cherry Mui <[email protected]>
Reviewed-by: Emmanuel Odeke <[email protected]>
  • Loading branch information
neelance authored and Richard Musiol committed Oct 18, 2021
1 parent 267abbe commit 6c0daa7
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 16 deletions.
2 changes: 0 additions & 2 deletions src/syscall/js/func.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
17 changes: 3 additions & 14 deletions src/syscall/js/js.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 6c0daa7

Please sign in to comment.