Commit b077669c by Ian Lance Taylor

reflect: Fix build for systems that do not define ffi_go_closure.

From-SVN: r219831
parent 342a3394
...@@ -63,7 +63,7 @@ func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value { ...@@ -63,7 +63,7 @@ func MakeFunc(typ Type, fn func(args []Value) (results []Value)) Value {
method: -1, method: -1,
} }
makeFuncFFI(ftyp, impl) makeFuncFFI(ftyp, unsafe.Pointer(impl))
return Value{t, unsafe.Pointer(&impl), flag(Func) | flagIndir} return Value{t, unsafe.Pointer(&impl), flag(Func) | flagIndir}
} }
...@@ -102,7 +102,7 @@ func makeMethodValue(op string, v Value) Value { ...@@ -102,7 +102,7 @@ func makeMethodValue(op string, v Value) Value {
rcvr: rcvr, rcvr: rcvr,
} }
makeFuncFFI(ftyp, fv) makeFuncFFI(ftyp, unsafe.Pointer(fv))
return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func) | flagIndir} return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func) | flagIndir}
} }
...@@ -128,7 +128,7 @@ func makeValueMethod(v Value) Value { ...@@ -128,7 +128,7 @@ func makeValueMethod(v Value) Value {
rcvr: v, rcvr: v,
} }
makeFuncFFI(ftyp, impl) makeFuncFFI(ftyp, unsafe.Pointer(impl))
return Value{t, unsafe.Pointer(&impl), v.flag&flagRO | flag(Func) | flagIndir} return Value{t, unsafe.Pointer(&impl), v.flag&flagRO | flag(Func) | flagIndir}
} }
......
...@@ -10,7 +10,7 @@ import ( ...@@ -10,7 +10,7 @@ import (
// The makeFuncFFI function, written in C, fills in an FFI closure. // The makeFuncFFI function, written in C, fills in an FFI closure.
// It arranges for ffiCall to be invoked directly from FFI. // It arranges for ffiCall to be invoked directly from FFI.
func makeFuncFFI(ftyp *funcType, impl *makeFuncImpl) func makeFuncFFI(ftyp *funcType, impl unsafe.Pointer)
// FFICallbackGo implements the Go side of the libffi callback. // FFICallbackGo implements the Go side of the libffi callback.
// It is exported so that C code can call it. // It is exported so that C code can call it.
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
/* Declare C functions with the names used to call from Go. */ /* Declare C functions with the names used to call from Go. */
void makeFuncFFI(const struct __go_func_type *ftyp, ffi_go_closure *impl) void makeFuncFFI(const struct __go_func_type *ftyp, void *impl)
__asm__ (GOSYM_PREFIX "reflect.makeFuncFFI"); __asm__ (GOSYM_PREFIX "reflect.makeFuncFFI");
#ifdef USE_LIBFFI_CLOSURES #ifdef USE_LIBFFI_CLOSURES
...@@ -70,7 +70,7 @@ ffi_callback (ffi_cif* cif __attribute__ ((unused)), void *results, ...@@ -70,7 +70,7 @@ ffi_callback (ffi_cif* cif __attribute__ ((unused)), void *results,
/* Allocate an FFI closure and arrange to call ffi_callback. */ /* Allocate an FFI closure and arrange to call ffi_callback. */
void void
makeFuncFFI(const struct __go_func_type *ftyp, ffi_go_closure *impl) makeFuncFFI(const struct __go_func_type *ftyp, void *impl)
{ {
ffi_cif *cif; ffi_cif *cif;
...@@ -83,7 +83,7 @@ makeFuncFFI(const struct __go_func_type *ftyp, ffi_go_closure *impl) ...@@ -83,7 +83,7 @@ makeFuncFFI(const struct __go_func_type *ftyp, ffi_go_closure *impl)
#else /* !defined(USE_LIBFFI_CLOSURES) */ #else /* !defined(USE_LIBFFI_CLOSURES) */
void void
makeFuncFFI(const struct __go_func_type *ftyp, ffi_go_closure *impl) makeFuncFFI(const struct __go_func_type *ftyp, void *impl)
{ {
runtime_panicstring ("libgo built without FFI does not support " runtime_panicstring ("libgo built without FFI does not support "
"reflect.MakeFunc"); "reflect.MakeFunc");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment