From f949b7f8d2c53036d55d5e101c86ad35fbc706a5 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 27 Feb 2014 20:48:32 -0500 Subject: Ported the runtime test to Go. It works in both 32-bit and 64-bit! --- darwintest/runtimetest.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 darwintest/runtimetest.go (limited to 'darwintest/runtimetest.go') diff --git a/darwintest/runtimetest.go b/darwintest/runtimetest.go new file mode 100644 index 0000000..7a36fb7 --- /dev/null +++ b/darwintest/runtimetest.go @@ -0,0 +1,41 @@ +// 27 february 2014 +package main + +import ( + "fmt" + "unsafe" +) + +// #cgo LDFLAGS: -lobjc -framework Foundation +// #include +// #include +// #include +// #include +// /* cgo doesn't handle ... */ +// id objc_msgSend_noargs(id obj, SEL sel) { return objc_msgSend(obj, sel); } +// id objc_msgSend_strarg(id obj, SEL sel, char *a) { return objc_msgSend(obj, sel, a); } +import "C" + +func main() { + _NSString := C.CString("NSString") + defer C.free(unsafe.Pointer(_NSString)) + _stringWithUTF8String := C.CString("stringWithUTF8String:") + defer C.free(unsafe.Pointer(_stringWithUTF8String)) + _UTF8String := C.CString("UTF8String") + defer C.free(unsafe.Pointer(_UTF8String)) + _hello := C.CString("hello, world\n") + defer C.free(unsafe.Pointer(_hello)) + + NSString := C.objc_getClass(_NSString) + stringWithUTF8String := + C.sel_getUid(_stringWithUTF8String) + str := C.objc_msgSend_strarg(NSString, + stringWithUTF8String, + _hello) + UTF8String := + C.sel_getUid(_UTF8String) + res := C.objc_msgSend_noargs(str, + UTF8String) + cres := (*C.char)(unsafe.Pointer(res)) + fmt.Printf("%s", C.GoString(cres)) +} -- cgit v1.2.3