mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
reflect: test using a MakeFunc value in a couple of different ways
The gccgo implementation mishandled calling Interface on a value created by MakeFunc. R=golang-dev, r CC=golang-dev https://golang.org/cl/14401043
This commit is contained in:
parent
eb002c50f5
commit
ef4e12a4ba
2 changed files with 19 additions and 1 deletions
|
|
@ -1452,6 +1452,24 @@ func TestMakeFunc(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMakeFuncInterface(t *testing.T) {
|
||||||
|
fn := func(i int) int { return i }
|
||||||
|
incr := func(in []Value) []Value {
|
||||||
|
return []Value{ValueOf(int(in[0].Int() + 1))}
|
||||||
|
}
|
||||||
|
fv := MakeFunc(TypeOf(fn), incr)
|
||||||
|
ValueOf(&fn).Elem().Set(fv)
|
||||||
|
if r := fn(2); r != 3 {
|
||||||
|
t.Errorf("Call returned %d, want 3", r)
|
||||||
|
}
|
||||||
|
if r := fv.Call([]Value{ValueOf(14)})[0].Int(); r != 15 {
|
||||||
|
t.Errorf("Call returned %d, want 15", r)
|
||||||
|
}
|
||||||
|
if r := fv.Interface().(func(int) int)(26); r != 27 {
|
||||||
|
t.Errorf("Call returned %d, want 27", r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type Point struct {
|
type Point struct {
|
||||||
x, y int
|
x, y int
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ type makeFuncImpl struct {
|
||||||
// that wraps the function fn. When called, that new function
|
// that wraps the function fn. When called, that new function
|
||||||
// does the following:
|
// does the following:
|
||||||
//
|
//
|
||||||
// - converts its arguments to a list of Values args.
|
// - converts its arguments to a slice of Values.
|
||||||
// - runs results := fn(args).
|
// - runs results := fn(args).
|
||||||
// - returns the results as a slice of Values, one per formal result.
|
// - returns the results as a slice of Values, one per formal result.
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue