mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-11 06:23:39 +00:00
compiler: implement method-set based AssignableTo and Implements (#5304)
* reflect: implement method-set based AssignableTo and Implements Based on the design from #4376 by aykevl. Fixes #4277, fixes #3580. Co-authored-by: Ayke van Laethem <aykevanlaethem@gmail.com> * builder: update expected binary sizes for reflect changes * Make interface checks similar to invoke, allowing typeImplementsMethodSet and method info to be dropped when reflect is not present * Add more tests that BigGo reflect tests * Even more pruning * Add go/token and net/url to passing tests * Prune even further, I am less happy with this, though * Update size test now that we are smaller * Skip some tests * elide method lists * format, oops * fix tests * Add a panic, pull out constant to keep in sync * Add debug info * Remove code that was leftover from a previous refactor --------- Co-authored-by: Ayke van Laethem <aykevanlaethem@gmail.com>
This commit is contained in:
Vendored
+64
@@ -439,6 +439,70 @@ offset for int64 matches: true
|
||||
offset for complex128 matches: true
|
||||
type assertion succeeded for unreferenced type
|
||||
|
||||
interface implements
|
||||
concrete implements:
|
||||
myReader → Reader: true
|
||||
*myReader → Reader: true
|
||||
myWriter → Writer: false
|
||||
*myWriter → Writer: true
|
||||
myReadWriter → Reader: true
|
||||
myReadWriter → Writer: false
|
||||
myReadWriter → ReadWriter: false
|
||||
*myReadWriter → Reader: true
|
||||
*myReadWriter → Writer: true
|
||||
*myReadWriter → ReadWriter: true
|
||||
myReader → Closer: false
|
||||
*myReadWriter → Closer: false
|
||||
errorValue → error: true
|
||||
errorValue → Stringer: false
|
||||
myErrorStringer → error: true
|
||||
myErrorStringer → Stringer: true
|
||||
myReader → interface{}: true
|
||||
int → interface{}: true
|
||||
interface implements interface:
|
||||
ReadWriter → Reader: true
|
||||
ReadWriter → Writer: true
|
||||
Reader → ReadWriter: false
|
||||
Writer → ReadWriter: false
|
||||
ReadCloser → Reader: true
|
||||
ReadCloser → Closer: true
|
||||
ReadCloser → Writer: false
|
||||
Reader → ReadCloser: false
|
||||
Reader → Reader: true
|
||||
ReadWriter → ReadWriter: true
|
||||
error → Stringer: false
|
||||
Stringer → error: false
|
||||
Reader → interface{}: true
|
||||
ReadWriter → interface{}: true
|
||||
assignable to:
|
||||
int → int: true
|
||||
string → string: true
|
||||
int → string: false
|
||||
int → int64: false
|
||||
myReader → Reader: true
|
||||
*myWriter → Writer: true
|
||||
myWriter → Writer: false
|
||||
*myReadWriter → ReadWriter: true
|
||||
ReadWriter → Reader: true
|
||||
Reader → ReadWriter: false
|
||||
int → interface{}: true
|
||||
Reader → interface{}: true
|
||||
unexported method interface:
|
||||
*notAnExpr → exprLike: true
|
||||
notAnExpr → exprLike: true
|
||||
*notAnExpr → exprLike (AssignableTo): true
|
||||
channel direction:
|
||||
chan int → <-chan int: true
|
||||
<-chan int → chan int: false
|
||||
named types:
|
||||
*int → IntPtr: true
|
||||
IntPtr → *int: true
|
||||
IntPtr → IntPtr1: false
|
||||
Ch → <-chan interface{}: true
|
||||
value set interface:
|
||||
Set[0] to BarNode: 10
|
||||
Set[1] still FooNode: 2
|
||||
|
||||
alignment / offset:
|
||||
struct{[0]func(); byte}: true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user