Accept ObjC API wrapper types as arguments and return values from bound Go package functions and methods. Also, allow Go structs to extend ObjC classes and implement ObjC protocols as well as override and implement methods. This is the third and final part of the implementation of the golang/go#17102 proposal. Fixes golang/go#17102 Change-Id: I601d90fb6d22b8d6f8b7d5fe0130daa1a4dd4734 Reviewed-on: https://go-review.googlesource.com/29175 Reviewed-by: David Crawshaw <crawshaw@golang.org>
98 lines
2.4 KiB
Plaintext
98 lines
2.4 KiB
Plaintext
// Objective-C API for talking to issue10788 Go package.
|
|
// gobind -lang=objc issue10788
|
|
//
|
|
// File is generated by gobind. Do not edit.
|
|
|
|
#include <Foundation/Foundation.h>
|
|
#include "seq.h"
|
|
#include "_cgo_export.h"
|
|
#include "GoIssue10788.h"
|
|
|
|
|
|
@implementation GoIssue10788TestStruct {
|
|
}
|
|
|
|
- (id)initWithRef:(id)ref {
|
|
self = [super init];
|
|
if (self) { __ref = ref; }
|
|
return self;
|
|
}
|
|
|
|
- (NSString*)value {
|
|
int32_t refnum = go_seq_go_to_refnum(self._ref);
|
|
nstring r0 = proxyissue10788_TestStruct_Value_Get(refnum);
|
|
NSString *_r0 = go_seq_to_objc_string(r0);
|
|
return _r0;
|
|
}
|
|
|
|
- (void)setValue:(NSString*)v {
|
|
int32_t refnum = go_seq_go_to_refnum(self._ref);
|
|
nstring _v = go_seq_from_objc_string(v);
|
|
proxyissue10788_TestStruct_Value_Set(refnum, _v);
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
@implementation GoIssue10788TestInterface {
|
|
}
|
|
|
|
- (instancetype)initWithRef:(id)ref {
|
|
self = [super init];
|
|
if (self) { __ref = ref; }
|
|
return self;
|
|
}
|
|
|
|
- (void)doSomeWork:(GoIssue10788TestStruct*)s {
|
|
int32_t refnum = go_seq_go_to_refnum(self._ref);
|
|
int32_t _s;
|
|
if ([s conformsToProtocol:@protocol(goSeqRefInterface)]) {
|
|
id<goSeqRefInterface> s_proxy = (id<goSeqRefInterface>)(s);
|
|
_s = go_seq_go_to_refnum(s_proxy._ref);
|
|
} else {
|
|
_s = go_seq_to_refnum(s);
|
|
}
|
|
proxyissue10788_TestInterface_DoSomeWork(refnum, _s);
|
|
}
|
|
|
|
- (void)multipleUnnamedParams:(long)p0 p1:(NSString*)p1 日本:(int64_t)日本 {
|
|
int32_t refnum = go_seq_go_to_refnum(self._ref);
|
|
nint _p0 = (nint)p0;
|
|
nstring _p1 = go_seq_from_objc_string(p1);
|
|
int64_t _日本 = (int64_t)日本;
|
|
proxyissue10788_TestInterface_MultipleUnnamedParams(refnum, _p0, _p1, _日本);
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
|
|
void cproxyissue10788_TestInterface_DoSomeWork(int32_t refnum, int32_t s) {
|
|
@autoreleasepool {
|
|
GoIssue10788TestInterface* o = go_seq_objc_from_refnum(refnum);
|
|
GoIssue10788TestStruct* _s = nil;
|
|
GoSeqRef* _s_ref = go_seq_from_refnum(s);
|
|
if (_s_ref != NULL) {
|
|
_s = _s_ref.obj;
|
|
if (_s == nil) {
|
|
_s = [[GoIssue10788TestStruct alloc] initWithRef:_s_ref];
|
|
}
|
|
}
|
|
[o doSomeWork:_s];
|
|
}
|
|
}
|
|
|
|
void cproxyissue10788_TestInterface_MultipleUnnamedParams(int32_t refnum, nint p0, nstring p1, int64_t 日本) {
|
|
@autoreleasepool {
|
|
GoIssue10788TestInterface* o = go_seq_objc_from_refnum(refnum);
|
|
long _p0 = (long)p0;
|
|
NSString *_p1 = go_seq_to_objc_string(p1);
|
|
int64_t _日本 = (int64_t)日本;
|
|
[o multipleUnnamedParams:_p0 p1:_p1 日本:_日本];
|
|
}
|
|
}
|
|
|
|
__attribute__((constructor)) static void init() {
|
|
init_seq();
|
|
}
|