internal/lib/reflect: value.call support multi ret
This commit is contained in:
@@ -2044,9 +2044,7 @@ func toFFIArg(v Value, typ *abi.Type) unsafe.Pointer {
|
|||||||
} else {
|
} else {
|
||||||
return unsafe.Pointer(&v.ptr)
|
return unsafe.Pointer(&v.ptr)
|
||||||
}
|
}
|
||||||
case abi.Complex64:
|
case abi.Complex64, abi.Complex128:
|
||||||
//TODO
|
|
||||||
case abi.Complex128:
|
|
||||||
return unsafe.Pointer(v.ptr)
|
return unsafe.Pointer(v.ptr)
|
||||||
case abi.Array:
|
case abi.Array:
|
||||||
if v.flag&flagIndir != 0 {
|
if v.flag&flagIndir != 0 {
|
||||||
@@ -2210,7 +2208,12 @@ func (v Value) call(op string, in []Value) (out []Value) {
|
|||||||
case 1:
|
case 1:
|
||||||
return []Value{NewAt(toType(tout[0]), ret).Elem()}
|
return []Value{NewAt(toType(tout[0]), ret).Elem()}
|
||||||
default:
|
default:
|
||||||
panic("TODO multi ret")
|
out = make([]Value, n)
|
||||||
|
var off uintptr
|
||||||
|
for i, tout := range tout {
|
||||||
|
out[i] = NewAt(toType(tout), add(ret, off, "")).Elem()
|
||||||
|
off += tout.Size()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user