2
0
mirror of synced 2025-02-20 13:38:20 +00:00

bind/objc: change exported var accessors to class methods.

for example,

package testpkg
var AnInt int64

will be mapped to

@interface GoTestpkg: NSObject
+ (int64_t) AnInt;
+ (void) setAnInt:(int64_t)v;
@end

Followup of cl/15340

Update golang/go#12475

Change-Id: Ie26c92af977fc3dd62dcad2b10c6a5c1c1b8941b
Reviewed-on: https://go-review.googlesource.com/15770
Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
Hyang-Ah (Hana) Kim 2015-10-12 12:27:29 -04:00 committed by Hyang-Ah Hana Kim
parent 5c6636dcb9
commit 090457ac45
6 changed files with 115 additions and 108 deletions

View File

@ -114,6 +114,7 @@ func (g *objcGen) genH() error {
}
// const
// TODO: prefix with k?, or use a class method?
for _, obj := range g.constants {
switch b := obj.Type().(*types.Basic); b.Kind() {
case types.String, types.UntypedString:
@ -127,11 +128,14 @@ func (g *objcGen) genH() error {
}
// var
for _, obj := range g.vars {
objcType := g.objcType(obj.Type())
g.Printf("FOUNDATION_EXPORT void %s_set%s(%s v);\n", g.namePrefix, obj.Name(), objcType)
g.Printf("FOUNDATION_EXPORT %s %s%s();\n", objcType, g.namePrefix, obj.Name())
g.Printf("\n")
if len(g.vars) > 0 {
g.Printf("@interface %s : NSObject \n", g.namePrefix)
for _, obj := range g.vars {
objcType := g.objcType(obj.Type())
g.Printf("+ (%s) %s;\n", objcType, obj.Name())
g.Printf("+ (void) set%s:(%s)v;\n", obj.Name(), objcType)
}
g.Printf("@end\n")
}
// static functions.
@ -203,11 +207,12 @@ func (g *objcGen) genM() error {
}
// vars
for _, o := range g.vars {
g.genVarM(o)
}
if len(g.vars) > 0 {
g.Printf("\n")
g.Printf("@implementation %s\n", g.namePrefix)
for _, o := range g.vars {
g.genVarM(o)
}
g.Printf("@end\n\n")
}
// global functions.
@ -240,23 +245,23 @@ func (g *objcGen) genVarM(o *types.Var) {
// setter
s1 := &funcSummary{
name: g.namePrefix + "_set" + o.Name(),
name: "set" + o.Name(),
ret: "void",
params: []paramInfo{{typ: o.Type(), name: "v"}},
}
g.Printf("void %s(%s v) {\n", s1.name, objcType)
g.Printf("+ (void) %s:(%s)v {\n", s1.name, objcType)
g.Indent()
g.genFunc(varDesc, "1", s1, false)
g.genFunc(varDesc, "1", s1, false) // false: not instance method.
g.Outdent()
g.Printf("}\n\n")
// getter
s2 := &funcSummary{
name: g.namePrefix + o.Name(),
name: o.Name(),
ret: objcType,
retParams: []paramInfo{{typ: o.Type(), name: "ret"}},
}
g.Printf("%s %s() {\n", s2.ret, s2.name)
g.Printf("+ (%s) %s {\n", s2.ret, s2.name)
g.Indent()
g.genFunc(varDesc, "2", s2, false)
g.Outdent()

View File

@ -272,46 +272,51 @@ void testIssue12403() {
}
void testVar() {
NSString *s = GoTestpkgStringVar();
NSString *s = GoTestpkg.StringVar;
if (![s isEqualToString:@"a string var"]) {
ERROR(@"GoTestpkgStringVar = %@, want 'a string var'", s);
ERROR(@"GoTestpkg.StringVar = %@, want 'a string var'", s);
}
s = @"a new string var";
GoTestpkg_setStringVar(s);
NSString *s2 = GoTestpkgStringVar();
GoTestpkg.StringVar = s;
NSString *s2 = GoTestpkg.StringVar;
if (![s2 isEqualToString:s]) {
ERROR(@"GoTestpkgStringVar = %@, want %@", s2, s);
ERROR(@"GoTestpkg.StringVar = %@, want %@", s2, s);
}
int64_t i = GoTestpkgIntVar();
int64_t i = GoTestpkg.IntVar;
if (i != 77) {
ERROR(@"GoTestpkgIntVar = %lld, want 77", i);
ERROR(@"GoTestpkg.IntVar = %lld, want 77", i);
}
GoTestpkg_setIntVar(777);
i = GoTestpkgIntVar();
GoTestpkg.IntVar = 777;
i = GoTestpkg.IntVar;
if (i != 777) {
ERROR(@"GoTestpkgIntVar = %lld, want 777", i);
ERROR(@"GoTestpkg.IntVar = %lld, want 777", i);
}
[GoTestpkg setIntVar:7777];
i = [GoTestpkg IntVar];
if (i != 7777) {
ERROR(@"GoTestpkg.IntVar = %lld, want 7777", i);
}
GoTestpkgNode *n0 = GoTestpkgStructVar();
GoTestpkgNode *n0 = GoTestpkg.StructVar;
if (![n0.V isEqualToString:@"a struct var"]) {
ERROR(@"GoTestpkgStructVar = %@, want 'a struct var'", n0.V);
ERROR(@"GoTestpkg.StructVar = %@, want 'a struct var'", n0.V);
}
GoTestpkgNode *n1 = GoTestpkgNewNode(@"a new struct var");
GoTestpkg_setStructVar(n1);
GoTestpkgNode *n2 = GoTestpkgStructVar();
GoTestpkg.StructVar = n1;
GoTestpkgNode *n2 = GoTestpkg.StructVar;
if (![n2.V isEqualToString:@"a new struct var"]) {
ERROR(@"GoTestpkgStructVar = %@, want 'a new struct var'", n2.V);
ERROR(@"GoTestpkg.StructVar = %@, want 'a new struct var'", n2.V);
}
Number *num = [[Number alloc] init];
num.value = 12345;
GoTestpkg_setInterfaceVar(num);
id<GoTestpkgI> iface = GoTestpkgInterfaceVar();
GoTestpkg.InterfaceVar = num;
id<GoTestpkgI> iface = GoTestpkg.InterfaceVar;
int64_t x = [iface Times:10];
int64_t y = [num Times:10];
if (x != y) {
ERROR(@"GoTestpkgInterfaceVar Times 10 = %lld, want %lld", x, y);
ERROR(@"GoTestpkg.InterfaceVar Times 10 = %lld, want %lld", x, y);
}
}

View File

@ -56,17 +56,20 @@ FOUNDATION_EXPORT const int64_t GoTestpkgMinInt64;
FOUNDATION_EXPORT const float GoTestpkgSmallestNonzeroFloat32;
FOUNDATION_EXPORT const double GoTestpkgSmallestNonzeroFloat64;
FOUNDATION_EXPORT void GoTestpkg_setIntVar(int v);
FOUNDATION_EXPORT int GoTestpkgIntVar();
@interface GoTestpkg : NSObject
+ (int) IntVar;
+ (void) setIntVar:(int)v;
FOUNDATION_EXPORT void GoTestpkg_setInterfaceVar(id<GoTestpkgI> v);
FOUNDATION_EXPORT id<GoTestpkgI> GoTestpkgInterfaceVar();
+ (id<GoTestpkgI>) InterfaceVar;
+ (void) setInterfaceVar:(id<GoTestpkgI>)v;
FOUNDATION_EXPORT void GoTestpkg_setStringVar(NSString* v);
FOUNDATION_EXPORT NSString* GoTestpkgStringVar();
+ (NSString*) StringVar;
+ (void) setStringVar:(NSString*)v;
FOUNDATION_EXPORT void GoTestpkg_setStructVar(GoTestpkgNode* v);
FOUNDATION_EXPORT GoTestpkgNode* GoTestpkgStructVar();
+ (GoTestpkgNode*) StructVar;
+ (void) setStructVar:(GoTestpkgNode*)v;
@end
FOUNDATION_EXPORT NSData* GoTestpkgBytesAppend(NSData* a, NSData* b);

View File

@ -312,7 +312,8 @@ const int64_t GoTestpkgMinInt64 = -9223372036854775807LL-1;
const float GoTestpkgSmallestNonzeroFloat32 = 0;
const double GoTestpkgSmallestNonzeroFloat64 = 5e-324;
void GoTestpkg_setIntVar(int v) {
@implementation GoTestpkg
+ (void) setIntVar:(int)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeInt(&in_, v);
@ -321,7 +322,7 @@ void GoTestpkg_setIntVar(int v) {
go_seq_free(&out_);
}
int GoTestpkgIntVar() {
+ (int) IntVar {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("testpkg.IntVar", 2, &in_, &out_);
@ -331,7 +332,7 @@ int GoTestpkgIntVar() {
return ret;
}
void GoTestpkg_setInterfaceVar(id<GoTestpkgI> v) {
+ (void) setInterfaceVar:(id<GoTestpkgI>)v {
GoSeq in_ = {};
GoSeq out_ = {};
if ([(id<NSObject>)(v) isKindOfClass:[GoTestpkgI class]]) {
@ -345,7 +346,7 @@ void GoTestpkg_setInterfaceVar(id<GoTestpkgI> v) {
go_seq_free(&out_);
}
id<GoTestpkgI> GoTestpkgInterfaceVar() {
+ (id<GoTestpkgI>) InterfaceVar {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("testpkg.InterfaceVar", 2, &in_, &out_);
@ -359,7 +360,7 @@ id<GoTestpkgI> GoTestpkgInterfaceVar() {
return ret;
}
void GoTestpkg_setStringVar(NSString* v) {
+ (void) setStringVar:(NSString*)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeUTF8(&in_, v);
@ -368,7 +369,7 @@ void GoTestpkg_setStringVar(NSString* v) {
go_seq_free(&out_);
}
NSString* GoTestpkgStringVar() {
+ (NSString*) StringVar {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("testpkg.StringVar", 2, &in_, &out_);
@ -378,7 +379,7 @@ NSString* GoTestpkgStringVar() {
return ret;
}
void GoTestpkg_setStructVar(GoTestpkgNode* v) {
+ (void) setStructVar:(GoTestpkgNode*)v {
GoSeq in_ = {};
GoSeq out_ = {};
if ([(id<NSObject>)(v) isKindOfClass:[GoTestpkgNode class]]) {
@ -392,7 +393,7 @@ void GoTestpkg_setStructVar(GoTestpkgNode* v) {
go_seq_free(&out_);
}
GoTestpkgNode* GoTestpkgStructVar() {
+ (GoTestpkgNode*) StructVar {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("testpkg.StructVar", 2, &in_, &out_);
@ -406,6 +407,7 @@ GoTestpkgNode* GoTestpkgStructVar() {
return ret;
}
@end
NSData* GoTestpkgBytesAppend(NSData* a, NSData* b) {
GoSeq in_ = {};

View File

@ -20,40 +20,30 @@
- (id)initWithRef:(id)ref;
@end
FOUNDATION_EXPORT void GoVars_setABool(BOOL v);
FOUNDATION_EXPORT BOOL GoVarsABool();
FOUNDATION_EXPORT void GoVars_setAFloat(double v);
FOUNDATION_EXPORT double GoVarsAFloat();
FOUNDATION_EXPORT void GoVars_setAFloat32(float v);
FOUNDATION_EXPORT float GoVarsAFloat32();
FOUNDATION_EXPORT void GoVars_setAFloat64(double v);
FOUNDATION_EXPORT double GoVarsAFloat64();
FOUNDATION_EXPORT void GoVars_setAString(NSString* v);
FOUNDATION_EXPORT NSString* GoVarsAString();
FOUNDATION_EXPORT void GoVars_setAStructPtr(GoVarsS* v);
FOUNDATION_EXPORT GoVarsS* GoVarsAStructPtr();
FOUNDATION_EXPORT void GoVars_setAnInt(int v);
FOUNDATION_EXPORT int GoVarsAnInt();
FOUNDATION_EXPORT void GoVars_setAnInt16(int16_t v);
FOUNDATION_EXPORT int16_t GoVarsAnInt16();
FOUNDATION_EXPORT void GoVars_setAnInt32(int32_t v);
FOUNDATION_EXPORT int32_t GoVarsAnInt32();
FOUNDATION_EXPORT void GoVars_setAnInt64(int64_t v);
FOUNDATION_EXPORT int64_t GoVarsAnInt64();
FOUNDATION_EXPORT void GoVars_setAnInt8(int8_t v);
FOUNDATION_EXPORT int8_t GoVarsAnInt8();
FOUNDATION_EXPORT void GoVars_setAnInterface(id<GoVarsI> v);
FOUNDATION_EXPORT id<GoVarsI> GoVarsAnInterface();
@interface GoVars : NSObject
+ (BOOL) ABool;
+ (void) setABool:(BOOL)v;
+ (double) AFloat;
+ (void) setAFloat:(double)v;
+ (float) AFloat32;
+ (void) setAFloat32:(float)v;
+ (double) AFloat64;
+ (void) setAFloat64:(double)v;
+ (NSString*) AString;
+ (void) setAString:(NSString*)v;
+ (GoVarsS*) AStructPtr;
+ (void) setAStructPtr:(GoVarsS*)v;
+ (int) AnInt;
+ (void) setAnInt:(int)v;
+ (int16_t) AnInt16;
+ (void) setAnInt16:(int16_t)v;
+ (int32_t) AnInt32;
+ (void) setAnInt32:(int32_t)v;
+ (int64_t) AnInt64;
+ (void) setAnInt64:(int64_t)v;
+ (int8_t) AnInt8;
+ (void) setAnInt8:(int8_t)v;
+ (id<GoVarsI>) AnInterface;
+ (void) setAnInterface:(id<GoVarsI>)v;
@end
#endif

View File

@ -56,7 +56,8 @@ static void proxyGoVarsI(id obj, int code, GoSeq* in, GoSeq* out) {
@end
void GoVars_setABool(BOOL v) {
@implementation GoVars
+ (void) setABool:(BOOL)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeBool(&in_, v);
@ -65,7 +66,7 @@ void GoVars_setABool(BOOL v) {
go_seq_free(&out_);
}
BOOL GoVarsABool() {
+ (BOOL) ABool {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.ABool", 2, &in_, &out_);
@ -75,7 +76,7 @@ BOOL GoVarsABool() {
return ret;
}
void GoVars_setAFloat(double v) {
+ (void) setAFloat:(double)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeFloat64(&in_, v);
@ -84,7 +85,7 @@ void GoVars_setAFloat(double v) {
go_seq_free(&out_);
}
double GoVarsAFloat() {
+ (double) AFloat {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AFloat", 2, &in_, &out_);
@ -94,7 +95,7 @@ double GoVarsAFloat() {
return ret;
}
void GoVars_setAFloat32(float v) {
+ (void) setAFloat32:(float)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeFloat32(&in_, v);
@ -103,7 +104,7 @@ void GoVars_setAFloat32(float v) {
go_seq_free(&out_);
}
float GoVarsAFloat32() {
+ (float) AFloat32 {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AFloat32", 2, &in_, &out_);
@ -113,7 +114,7 @@ float GoVarsAFloat32() {
return ret;
}
void GoVars_setAFloat64(double v) {
+ (void) setAFloat64:(double)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeFloat64(&in_, v);
@ -122,7 +123,7 @@ void GoVars_setAFloat64(double v) {
go_seq_free(&out_);
}
double GoVarsAFloat64() {
+ (double) AFloat64 {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AFloat64", 2, &in_, &out_);
@ -132,7 +133,7 @@ double GoVarsAFloat64() {
return ret;
}
void GoVars_setAString(NSString* v) {
+ (void) setAString:(NSString*)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeUTF8(&in_, v);
@ -141,7 +142,7 @@ void GoVars_setAString(NSString* v) {
go_seq_free(&out_);
}
NSString* GoVarsAString() {
+ (NSString*) AString {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AString", 2, &in_, &out_);
@ -151,7 +152,7 @@ NSString* GoVarsAString() {
return ret;
}
void GoVars_setAStructPtr(GoVarsS* v) {
+ (void) setAStructPtr:(GoVarsS*)v {
GoSeq in_ = {};
GoSeq out_ = {};
if ([(id<NSObject>)(v) isKindOfClass:[GoVarsS class]]) {
@ -165,7 +166,7 @@ void GoVars_setAStructPtr(GoVarsS* v) {
go_seq_free(&out_);
}
GoVarsS* GoVarsAStructPtr() {
+ (GoVarsS*) AStructPtr {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AStructPtr", 2, &in_, &out_);
@ -179,7 +180,7 @@ GoVarsS* GoVarsAStructPtr() {
return ret;
}
void GoVars_setAnInt(int v) {
+ (void) setAnInt:(int)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeInt(&in_, v);
@ -188,7 +189,7 @@ void GoVars_setAnInt(int v) {
go_seq_free(&out_);
}
int GoVarsAnInt() {
+ (int) AnInt {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AnInt", 2, &in_, &out_);
@ -198,7 +199,7 @@ int GoVarsAnInt() {
return ret;
}
void GoVars_setAnInt16(int16_t v) {
+ (void) setAnInt16:(int16_t)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeInt16(&in_, v);
@ -207,7 +208,7 @@ void GoVars_setAnInt16(int16_t v) {
go_seq_free(&out_);
}
int16_t GoVarsAnInt16() {
+ (int16_t) AnInt16 {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AnInt16", 2, &in_, &out_);
@ -217,7 +218,7 @@ int16_t GoVarsAnInt16() {
return ret;
}
void GoVars_setAnInt32(int32_t v) {
+ (void) setAnInt32:(int32_t)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeInt32(&in_, v);
@ -226,7 +227,7 @@ void GoVars_setAnInt32(int32_t v) {
go_seq_free(&out_);
}
int32_t GoVarsAnInt32() {
+ (int32_t) AnInt32 {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AnInt32", 2, &in_, &out_);
@ -236,7 +237,7 @@ int32_t GoVarsAnInt32() {
return ret;
}
void GoVars_setAnInt64(int64_t v) {
+ (void) setAnInt64:(int64_t)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeInt64(&in_, v);
@ -245,7 +246,7 @@ void GoVars_setAnInt64(int64_t v) {
go_seq_free(&out_);
}
int64_t GoVarsAnInt64() {
+ (int64_t) AnInt64 {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AnInt64", 2, &in_, &out_);
@ -255,7 +256,7 @@ int64_t GoVarsAnInt64() {
return ret;
}
void GoVars_setAnInt8(int8_t v) {
+ (void) setAnInt8:(int8_t)v {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_writeInt8(&in_, v);
@ -264,7 +265,7 @@ void GoVars_setAnInt8(int8_t v) {
go_seq_free(&out_);
}
int8_t GoVarsAnInt8() {
+ (int8_t) AnInt8 {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AnInt8", 2, &in_, &out_);
@ -274,7 +275,7 @@ int8_t GoVarsAnInt8() {
return ret;
}
void GoVars_setAnInterface(id<GoVarsI> v) {
+ (void) setAnInterface:(id<GoVarsI>)v {
GoSeq in_ = {};
GoSeq out_ = {};
if ([(id<NSObject>)(v) isKindOfClass:[GoVarsI class]]) {
@ -288,7 +289,7 @@ void GoVars_setAnInterface(id<GoVarsI> v) {
go_seq_free(&out_);
}
id<GoVarsI> GoVarsAnInterface() {
+ (id<GoVarsI>) AnInterface {
GoSeq in_ = {};
GoSeq out_ = {};
go_seq_send("vars.AnInterface", 2, &in_, &out_);
@ -302,6 +303,7 @@ id<GoVarsI> GoVarsAnInterface() {
return ret;
}
@end
__attribute__((constructor)) static void init() {
go_seq_register_proxy("go.vars.I", proxyGoVarsI);