bind: remove error wrappers to preserve error instance identity
CL 24800 changed the error representation from strings to objects. However, since native errors types are not immediately compatible across languages, wrapper types were introduced to bridge the gap. This CL remove those wrappers and instead special case the error proxy types to conform to their language error protocol. Specifically: - The ObjC proxy for Go errors now extends NSError and calls initWithDomain to store the error message. - The Go proxy for ObjC NSError return the localizedDescription property for calls to Error. - The Java proxy for Go errors ow extends Exception and overrides getMessage() to return the error message. - The Go proxy for Java Exceptions returns getMessage whenever Error is called. The end result is that error values behave more like normal objects across the language boundary. In particular, instance identity is now preserved: an error passed across the boundary and back will result in the same instance. There are two semantic changes that followed this change: - The domain for wrapped Go errors is now always "go". The domain wasn't useful before this CL: the domains were set to the package name of function or method where the error happened to cross the language boundary. - If a Go method that returns an error is implemented in ObjC, the implementation must now both return NO _and_ set the error result for the calling Go code to receive a non-nil error. Before this CL, because errors were always wrapped, a nil ObjC could be represented with a non-nil wrapper. Change-Id: Idb415b6b13ecf79ccceb60f675059942bfc48fec Reviewed-on: https://go-review.googlesource.com/29298 Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
84d710de20
commit
89b8360218
|
@ -302,7 +302,7 @@ func (g *ClassGen) genCMethodBody(cls *java.Class, f *java.Func, virtual bool) {
|
||||||
g.Printf(", _a%d", i)
|
g.Printf(", _a%d", i)
|
||||||
}
|
}
|
||||||
g.Printf(");\n")
|
g.Printf(");\n")
|
||||||
g.Printf("jobject _exc = go_seq_wrap_exception(env);\n")
|
g.Printf("jobject _exc = go_seq_get_exception(env);\n")
|
||||||
g.Printf("int32_t _exc_ref = go_seq_to_refnum(env, _exc);\n")
|
g.Printf("int32_t _exc_ref = go_seq_to_refnum(env, _exc);\n")
|
||||||
if f.Ret != nil {
|
if f.Ret != nil {
|
||||||
g.genJavaToC("res", f.Ret)
|
g.genJavaToC("res", f.Ret)
|
||||||
|
@ -370,7 +370,7 @@ func (g *ClassGen) genC(cls *java.Class) {
|
||||||
g.Printf(", _a%d", i)
|
g.Printf(", _a%d", i)
|
||||||
}
|
}
|
||||||
g.Printf(");\n")
|
g.Printf(");\n")
|
||||||
g.Printf("jobject _exc = go_seq_wrap_exception(env);\n")
|
g.Printf("jobject _exc = go_seq_get_exception(env);\n")
|
||||||
g.Printf("int32_t _exc_ref = go_seq_to_refnum(env, _exc);\n")
|
g.Printf("int32_t _exc_ref = go_seq_to_refnum(env, _exc);\n")
|
||||||
if f.Ret != nil {
|
if f.Ret != nil {
|
||||||
g.genJavaToC("res", f.Ret)
|
g.genJavaToC("res", f.Ret)
|
||||||
|
|
|
@ -120,6 +120,15 @@ func (g *JavaGen) GenClass(idx int) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *JavaGen) genProxyImpl(name string) {
|
||||||
|
g.Printf("private final Seq.Ref ref;\n\n")
|
||||||
|
g.Printf("@Override public final int incRefnum() {\n")
|
||||||
|
g.Printf(" int refnum = ref.refnum;\n")
|
||||||
|
g.Printf(" Seq.incGoRef(refnum);\n")
|
||||||
|
g.Printf(" return refnum;\n")
|
||||||
|
g.Printf("}\n\n")
|
||||||
|
}
|
||||||
|
|
||||||
func (g *JavaGen) genStruct(s structInfo) {
|
func (g *JavaGen) genStruct(s structInfo) {
|
||||||
pkgPath := ""
|
pkgPath := ""
|
||||||
if g.Pkg != nil {
|
if g.Pkg != nil {
|
||||||
|
@ -140,6 +149,8 @@ func (g *JavaGen) genStruct(s structInfo) {
|
||||||
impls = append(impls, cls.Name)
|
impls = append(impls, cls.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
impls = append(impls, "Seq.Proxy")
|
||||||
}
|
}
|
||||||
|
|
||||||
pT := types.NewPointer(s.obj.Type())
|
pT := types.NewPointer(s.obj.Type())
|
||||||
|
@ -158,8 +169,6 @@ func (g *JavaGen) genStruct(s structInfo) {
|
||||||
if jinf.extends != nil {
|
if jinf.extends != nil {
|
||||||
g.Printf(" extends %s", jinf.extends.Name)
|
g.Printf(" extends %s", jinf.extends.Name)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
g.Printf(" extends Seq.Proxy")
|
|
||||||
}
|
}
|
||||||
if len(impls) > 0 {
|
if len(impls) > 0 {
|
||||||
g.Printf(" implements %s", strings.Join(impls, ", "))
|
g.Printf(" implements %s", strings.Join(impls, ", "))
|
||||||
|
@ -168,8 +177,8 @@ func (g *JavaGen) genStruct(s structInfo) {
|
||||||
g.Indent()
|
g.Indent()
|
||||||
|
|
||||||
g.Printf("static { %s.touch(); }\n\n", g.className())
|
g.Printf("static { %s.touch(); }\n\n", g.className())
|
||||||
|
g.genProxyImpl(n)
|
||||||
if jinf != nil {
|
if jinf != nil {
|
||||||
g.Printf("private final Seq.Ref ref;\n\n")
|
|
||||||
for _, f := range jinf.cons {
|
for _, f := range jinf.cons {
|
||||||
if !g.isSigSupported(f.Type()) {
|
if !g.isSigSupported(f.Type()) {
|
||||||
g.Printf("// skipped constructor %s.%s with unsupported parameter or return types\n\n", n, f.Name())
|
g.Printf("// skipped constructor %s.%s with unsupported parameter or return types\n\n", n, f.Name())
|
||||||
|
@ -184,13 +193,8 @@ func (g *JavaGen) genStruct(s structInfo) {
|
||||||
g.Printf("public %s() { this.ref = __New(); }\n\n", n)
|
g.Printf("public %s() { this.ref = __New(); }\n\n", n)
|
||||||
g.Printf("private static native Seq.Ref __New();\n\n")
|
g.Printf("private static native Seq.Ref __New();\n\n")
|
||||||
}
|
}
|
||||||
g.Printf("@Override public final int incRefnum() {\n")
|
|
||||||
g.Printf(" int refnum = ref.refnum;\n")
|
|
||||||
g.Printf(" Seq.incGoRef(refnum);\n")
|
|
||||||
g.Printf(" return refnum;\n")
|
|
||||||
g.Printf("}\n\n")
|
|
||||||
} else {
|
} else {
|
||||||
g.Printf("%s(Seq.Ref ref) { super(ref); }\n\n", n)
|
g.Printf("%s(Seq.Ref ref) { this.ref = ref; }\n\n", n)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range fields {
|
for _, f := range fields {
|
||||||
|
@ -1090,7 +1094,7 @@ func (g *JavaGen) genMethodInterfaceProxy(oName string, m *types.Func) {
|
||||||
rets = append(rets, retName)
|
rets = append(rets, retName)
|
||||||
}
|
}
|
||||||
if res.Len() == 2 || isErrorType(t) {
|
if res.Len() == 2 || isErrorType(t) {
|
||||||
g.Printf("jobject exc = go_seq_wrap_exception(env);\n")
|
g.Printf("jobject exc = go_seq_get_exception(env);\n")
|
||||||
errType := types.Universe.Lookup("error").Type()
|
errType := types.Universe.Lookup("error").Type()
|
||||||
g.genJavaToC("exc", errType, modeRetained)
|
g.genJavaToC("exc", errType, modeRetained)
|
||||||
retName = "_exc"
|
retName = "_exc"
|
||||||
|
@ -1288,6 +1292,13 @@ func (g *JavaGen) GenC() error {
|
||||||
g.Printf("clazz = (*env)->FindClass(env, %q);\n", g.jniClassSigPrefix(pkg)+className(pkg)+"$proxy"+iface.obj.Name())
|
g.Printf("clazz = (*env)->FindClass(env, %q);\n", g.jniClassSigPrefix(pkg)+className(pkg)+"$proxy"+iface.obj.Name())
|
||||||
g.Printf("proxy_class_%s_%s = (*env)->NewGlobalRef(env, clazz);\n", g.pkgPrefix, iface.obj.Name())
|
g.Printf("proxy_class_%s_%s = (*env)->NewGlobalRef(env, clazz);\n", g.pkgPrefix, iface.obj.Name())
|
||||||
g.Printf("proxy_class_%s_%s_cons = (*env)->GetMethodID(env, clazz, \"<init>\", \"(Lgo/Seq$Ref;)V\");\n", g.pkgPrefix, iface.obj.Name())
|
g.Printf("proxy_class_%s_%s_cons = (*env)->GetMethodID(env, clazz, \"<init>\", \"(Lgo/Seq$Ref;)V\");\n", g.pkgPrefix, iface.obj.Name())
|
||||||
|
if isErrorType(iface.obj.Type()) {
|
||||||
|
// As a special case, Java Exceptions are passed to Go pretending to implement the Go error interface.
|
||||||
|
// To complete the illusion, use the Throwable.getMessage method for proxied calls to the error.Error method.
|
||||||
|
g.Printf("clazz = (*env)->FindClass(env, \"java/lang/Throwable\");\n")
|
||||||
|
g.Printf("mid_error_Error = (*env)->GetMethodID(env, clazz, \"getMessage\", \"()Ljava/lang/String;\");\n")
|
||||||
|
continue
|
||||||
|
}
|
||||||
g.Printf("clazz = (*env)->FindClass(env, %q);\n", g.jniClassSigPrefix(pkg)+iface.obj.Name())
|
g.Printf("clazz = (*env)->FindClass(env, %q);\n", g.jniClassSigPrefix(pkg)+iface.obj.Name())
|
||||||
for _, m := range iface.summary.callable {
|
for _, m := range iface.summary.callable {
|
||||||
if !g.isSigSupported(m.Type()) {
|
if !g.isSigSupported(m.Type()) {
|
||||||
|
@ -1390,12 +1401,22 @@ func (g *JavaGen) GenJava() error {
|
||||||
g.Printf("private static native void _init();\n\n")
|
g.Printf("private static native void _init();\n\n")
|
||||||
|
|
||||||
for _, iface := range g.interfaces {
|
for _, iface := range g.interfaces {
|
||||||
g.Printf(javaProxyPreamble, iface.obj.Name())
|
n := iface.obj.Name()
|
||||||
|
g.Printf("private static final class proxy%s", n)
|
||||||
|
if isErrorType(iface.obj.Type()) {
|
||||||
|
g.Printf(" extends Exception")
|
||||||
|
}
|
||||||
|
g.Printf(" implements Seq.Proxy, %s {\n", n)
|
||||||
g.Indent()
|
g.Indent()
|
||||||
|
g.genProxyImpl("proxy" + n)
|
||||||
|
g.Printf("proxy%s(Seq.Ref ref) { this.ref = ref; }\n\n", n)
|
||||||
|
|
||||||
|
if isErrorType(iface.obj.Type()) {
|
||||||
|
g.Printf("@Override public String getMessage() { return error(); }\n\n")
|
||||||
|
}
|
||||||
for _, m := range iface.summary.callable {
|
for _, m := range iface.summary.callable {
|
||||||
if !g.isSigSupported(m.Type()) {
|
if !g.isSigSupported(m.Type()) {
|
||||||
g.Printf("// skipped method %s.%s with unsupported parameter or return types\n\n", iface.obj.Name(), m.Name())
|
g.Printf("// skipped method %s.%s with unsupported parameter or return types\n\n", n, m.Name())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
g.Printf("public native ")
|
g.Printf("public native ")
|
||||||
|
@ -1461,10 +1482,6 @@ func classNameFor(t types.Type) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
javaProxyPreamble = `private static final class proxy%[1]s extends Seq.Proxy implements %[1]s {
|
|
||||||
proxy%[1]s(Seq.Ref ref) { super(ref); }
|
|
||||||
|
|
||||||
`
|
|
||||||
javaPreamble = `// Java class %[1]s.%[2]s is a proxy for talking to a Go program.
|
javaPreamble = `// Java class %[1]s.%[2]s is a proxy for talking to a Go program.
|
||||||
// gobind %[3]s %[4]s
|
// gobind %[3]s %[4]s
|
||||||
//
|
//
|
||||||
|
|
|
@ -193,12 +193,8 @@ func (g *objcGen) gobindOpts() string {
|
||||||
|
|
||||||
func (g *objcGen) genM() error {
|
func (g *objcGen) genM() error {
|
||||||
var pkgPath string
|
var pkgPath string
|
||||||
var errDomain string
|
|
||||||
if g.Pkg != nil {
|
if g.Pkg != nil {
|
||||||
pkgPath = g.Pkg.Path()
|
pkgPath = g.Pkg.Path()
|
||||||
errDomain = "go." + pkgPath
|
|
||||||
} else {
|
|
||||||
errDomain = "go"
|
|
||||||
}
|
}
|
||||||
g.Printf(objcPreamble, pkgPath, g.gobindOpts(), pkgPath)
|
g.Printf(objcPreamble, pkgPath, g.gobindOpts(), pkgPath)
|
||||||
g.Printf("#include <Foundation/Foundation.h>\n")
|
g.Printf("#include <Foundation/Foundation.h>\n")
|
||||||
|
@ -206,8 +202,6 @@ func (g *objcGen) genM() error {
|
||||||
g.Printf("#include \"_cgo_export.h\"\n")
|
g.Printf("#include \"_cgo_export.h\"\n")
|
||||||
g.Printf("#include %q\n", g.namePrefix+".h")
|
g.Printf("#include %q\n", g.namePrefix+".h")
|
||||||
g.Printf("\n")
|
g.Printf("\n")
|
||||||
g.Printf("static NSString* errDomain = @%q;\n", errDomain)
|
|
||||||
g.Printf("\n")
|
|
||||||
|
|
||||||
// struct
|
// struct
|
||||||
for _, s := range g.structs {
|
for _, s := range g.structs {
|
||||||
|
@ -676,7 +670,7 @@ func (g *objcGen) genFunc(s *funcSummary, objName string) {
|
||||||
if isErrorType(p.typ) {
|
if isErrorType(p.typ) {
|
||||||
g.Printf("if (_%s != nil && %s != nil) {\n", p.name, p.name)
|
g.Printf("if (_%s != nil && %s != nil) {\n", p.name, p.name)
|
||||||
g.Indent()
|
g.Indent()
|
||||||
g.Printf("*%s = go_seq_to_nserror(_%s, errDomain);\n", p.name, p.name)
|
g.Printf("*%s = _%s;\n", p.name, p.name)
|
||||||
g.Outdent()
|
g.Outdent()
|
||||||
g.Printf("}\n")
|
g.Printf("}\n")
|
||||||
} else {
|
} else {
|
||||||
|
@ -696,14 +690,19 @@ func (g *objcGen) genFunc(s *funcSummary, objName string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *objcGen) genInterfaceInterface(obj *types.TypeName, summary ifaceSummary, isProtocol bool) {
|
func (g *objcGen) genInterfaceInterface(obj *types.TypeName, summary ifaceSummary, isProtocol bool) {
|
||||||
g.Printf("@interface %[1]s%[2]s : NSObject", g.namePrefix, obj.Name())
|
g.Printf("@interface %[1]s%[2]s : ", g.namePrefix, obj.Name())
|
||||||
|
if isErrorType(obj.Type()) {
|
||||||
|
g.Printf("NSError")
|
||||||
|
} else {
|
||||||
|
g.Printf("NSObject")
|
||||||
|
}
|
||||||
if isProtocol {
|
if isProtocol {
|
||||||
g.Printf(" <%[1]s%[2]s>", g.namePrefix, obj.Name())
|
g.Printf(" <%[1]s%[2]s>", g.namePrefix, obj.Name())
|
||||||
}
|
}
|
||||||
g.Printf(" {\n}\n")
|
g.Printf(" {\n}\n")
|
||||||
g.Printf("@property(strong, readonly) id _ref;\n")
|
g.Printf("@property(strong, readonly) id _ref;\n")
|
||||||
g.Printf("\n")
|
g.Printf("\n")
|
||||||
g.Printf("- (id)initWithRef:(id)ref;\n")
|
g.Printf("- (instancetype)initWithRef:(id)ref;\n")
|
||||||
for _, m := range summary.callable {
|
for _, m := range summary.callable {
|
||||||
if !g.isSigSupported(m.Type()) {
|
if !g.isSigSupported(m.Type()) {
|
||||||
g.Printf("// skipped method %s.%s with unsupported parameter or return types\n\n", obj.Name(), m.Name())
|
g.Printf("// skipped method %s.%s with unsupported parameter or return types\n\n", obj.Name(), m.Name())
|
||||||
|
@ -740,10 +739,17 @@ func (g *objcGen) genInterfaceM(obj *types.TypeName, t *types.Interface) bool {
|
||||||
g.Printf("@implementation %s%s {\n", g.namePrefix, obj.Name())
|
g.Printf("@implementation %s%s {\n", g.namePrefix, obj.Name())
|
||||||
g.Printf("}\n")
|
g.Printf("}\n")
|
||||||
g.Printf("\n")
|
g.Printf("\n")
|
||||||
g.Printf("- (id)initWithRef:(id)ref {\n")
|
g.Printf("- (instancetype)initWithRef:(id)ref {\n")
|
||||||
g.Indent()
|
g.Indent()
|
||||||
|
if isErrorType(obj.Type()) {
|
||||||
|
g.Printf("if (self) {\n")
|
||||||
|
g.Printf(" __ref = ref;\n")
|
||||||
|
g.Printf(" self = [super initWithDomain:@\"go\" code:1 userInfo:@{NSLocalizedDescriptionKey: [self error]}];\n")
|
||||||
|
g.Printf("}\n")
|
||||||
|
} else {
|
||||||
g.Printf("self = [super init];\n")
|
g.Printf("self = [super init];\n")
|
||||||
g.Printf("if (self) { __ref = ref; }\n")
|
g.Printf("if (self) { __ref = ref; }\n")
|
||||||
|
}
|
||||||
g.Printf("return self;\n")
|
g.Printf("return self;\n")
|
||||||
g.Outdent()
|
g.Outdent()
|
||||||
g.Printf("}\n")
|
g.Printf("}\n")
|
||||||
|
@ -790,11 +796,17 @@ func (g *objcGen) genInterfaceMethodProxy(obj *types.TypeName, m *types.Func) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if isErrorType(obj.Type()) && m.Name() == "Error" {
|
||||||
|
// As a special case, ObjC NSErrors are passed to Go pretending to implement the Go error interface.
|
||||||
|
// They don't actually have an Error method, so calls to to it needs to be rerouted.
|
||||||
|
g.Printf("NSString *returnVal = [o localizedDescription];\n")
|
||||||
|
} else {
|
||||||
if s.ret == "void" {
|
if s.ret == "void" {
|
||||||
g.Printf("[o %s];\n", s.callMethod(g))
|
g.Printf("[o %s];\n", s.callMethod(g))
|
||||||
} else {
|
} else {
|
||||||
g.Printf("%s returnVal = [o %s];\n", s.ret, s.callMethod(g))
|
g.Printf("%s returnVal = [o %s];\n", s.ret, s.callMethod(g))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(s.retParams) > 0 {
|
if len(s.retParams) > 0 {
|
||||||
if s.returnsVal() { // len(s.retParams) == 1 && s.retParams[0] != error
|
if s.returnsVal() { // len(s.retParams) == 1 && s.retParams[0] != error
|
||||||
|
@ -812,7 +824,7 @@ func (g *objcGen) genInterfaceMethodProxy(obj *types.TypeName, m *types.Func) {
|
||||||
g.Printf("if (%s != nil) {\n", p.name)
|
g.Printf("if (%s != nil) {\n", p.name)
|
||||||
}
|
}
|
||||||
g.Indent()
|
g.Indent()
|
||||||
g.Printf("_%[1]s = [[goSeqErrorWrapper alloc] initWithError:%[1]s];\n", p.name)
|
g.Printf("_%[1]s = %[1]s;\n", p.name)
|
||||||
g.Outdent()
|
g.Outdent()
|
||||||
g.Printf("}\n")
|
g.Printf("}\n")
|
||||||
g.genWrite("_"+p.name, p.typ, modeRetained)
|
g.genWrite("_"+p.name, p.typ, modeRetained)
|
||||||
|
|
|
@ -9,7 +9,6 @@ import java.util.IdentityHashMap;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import go.Universe;
|
import go.Universe;
|
||||||
import go.error;
|
|
||||||
|
|
||||||
// Seq is a sequence of machine-dependent encoded values.
|
// Seq is a sequence of machine-dependent encoded values.
|
||||||
// Used by automatically generated language bindings to talk to Go.
|
// Used by automatically generated language bindings to talk to Go.
|
||||||
|
@ -48,18 +47,6 @@ public class Seq {
|
||||||
private Seq() {
|
private Seq() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void throwException(error err) throws Exception {
|
|
||||||
throw new Exception(err.error());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static error wrapThrowable(final Throwable t) {
|
|
||||||
return new error() {
|
|
||||||
@Override public String error() {
|
|
||||||
return t.getMessage();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// ctx is an android.context.Context.
|
// ctx is an android.context.Context.
|
||||||
static native void setContext(java.lang.Object ctx);
|
static native void setContext(java.lang.Object ctx);
|
||||||
|
|
||||||
|
@ -105,23 +92,10 @@ public class Seq {
|
||||||
// invalidating it before being translated on the Go side.
|
// invalidating it before being translated on the Go side.
|
||||||
int incRefnum();
|
int incRefnum();
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Proxy is a Java object that proxies a Go object. Proxies, unlike
|
// A Proxy is a Java object that proxies a Go object. Proxies, unlike
|
||||||
// GoObjects, are unwrapped to their Go counterpart when deserialized
|
// GoObjects, are unwrapped to their Go counterpart when deserialized
|
||||||
// in Go.
|
// in Go.
|
||||||
public static abstract class Proxy implements GoObject {
|
public interface Proxy extends GoObject {}
|
||||||
private final Ref ref;
|
|
||||||
|
|
||||||
protected Proxy(Ref ref) {
|
|
||||||
this.ref = ref;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override public final int incRefnum() {
|
|
||||||
int refnum = ref.refnum;
|
|
||||||
Seq.incGoRef(refnum);
|
|
||||||
return refnum;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Ref is an object tagged with an integer for passing back and
|
// A Ref is an object tagged with an integer for passing back and
|
||||||
// forth across the language boundary.
|
// forth across the language boundary.
|
||||||
|
|
|
@ -416,11 +416,19 @@ public class SeqTest extends InstrumentationTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testErrorField() {
|
public void testErrorField() {
|
||||||
final String want = "an error message";
|
|
||||||
Node n = Testpkg.newNode("ErrTest");
|
Node n = Testpkg.newNode("ErrTest");
|
||||||
n.setErr(new Exception(want));
|
Exception want = new Exception("an error message");
|
||||||
|
n.setErr(want);
|
||||||
Exception got = n.getErr();
|
Exception got = n.getErr();
|
||||||
assertEquals("want back the error message we set", want, got.getMessage());
|
assertTrue("want back the error we set", want == got);
|
||||||
|
String msg = Testpkg.errorMessage(want);
|
||||||
|
assertEquals("the error message must match", want.getMessage(), msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testErrorDup() {
|
||||||
|
Exception err = Testpkg.getGlobalErr();
|
||||||
|
assertTrue("the Go error instance must preserve its identity", Testpkg.isGlobalErr(err));
|
||||||
|
assertEquals("the Go error message must be preserved", "global err", err.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
//test if we have JNI local reference table overflow error
|
//test if we have JNI local reference table overflow error
|
||||||
|
|
|
@ -39,9 +39,8 @@ extern int32_t go_seq_to_refnum_go(JNIEnv *env, jobject o);
|
||||||
extern jobject go_seq_from_refnum(JNIEnv *env, int32_t refnum, jclass proxy_class, jmethodID proxy_cons);
|
extern jobject go_seq_from_refnum(JNIEnv *env, int32_t refnum, jclass proxy_class, jmethodID proxy_cons);
|
||||||
|
|
||||||
extern void go_seq_maybe_throw_exception(JNIEnv *env, jobject msg);
|
extern void go_seq_maybe_throw_exception(JNIEnv *env, jobject msg);
|
||||||
// go_seq_wrap_exception wraps a pending exception in a Java object implementing the
|
// go_seq_get_exception returns any pending exception and clears the exception status.
|
||||||
// golang/x/mobile/bind/errors.Error interface. If there is no pending exception, it returns NULL.
|
extern jobject go_seq_get_exception(JNIEnv *env);
|
||||||
extern jobject go_seq_wrap_exception(JNIEnv *env);
|
|
||||||
|
|
||||||
extern jbyteArray go_seq_to_java_bytearray(JNIEnv *env, nbyteslice s, int copy);
|
extern jbyteArray go_seq_to_java_bytearray(JNIEnv *env, nbyteslice s, int copy);
|
||||||
extern nbyteslice go_seq_from_java_bytearray(JNIEnv *env, jbyteArray s, int copy);
|
extern nbyteslice go_seq_from_java_bytearray(JNIEnv *env, jbyteArray s, int copy);
|
||||||
|
|
|
@ -25,13 +25,11 @@ static JavaVM *jvm;
|
||||||
static pthread_key_t jnienvs;
|
static pthread_key_t jnienvs;
|
||||||
|
|
||||||
static jclass seq_class;
|
static jclass seq_class;
|
||||||
static jmethodID seq_throw_exc;
|
|
||||||
static jmethodID seq_getRef;
|
static jmethodID seq_getRef;
|
||||||
static jmethodID seq_decRef;
|
static jmethodID seq_decRef;
|
||||||
static jmethodID seq_incRef;
|
static jmethodID seq_incRef;
|
||||||
static jmethodID seq_incGoObjectRef;
|
static jmethodID seq_incGoObjectRef;
|
||||||
static jmethodID seq_incRefnum;
|
static jmethodID seq_incRefnum;
|
||||||
static jmethodID seq_wrapThrowable;
|
|
||||||
|
|
||||||
static jfieldID ref_objField;
|
static jfieldID ref_objField;
|
||||||
|
|
||||||
|
@ -60,23 +58,19 @@ static JNIEnv *go_seq_get_thread_env(void) {
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
void go_seq_maybe_throw_exception(JNIEnv *env, jobject msg) {
|
void go_seq_maybe_throw_exception(JNIEnv *env, jobject exc) {
|
||||||
if (msg != NULL) {
|
if (exc != NULL) {
|
||||||
if ((*env)->IsInstanceOf(env, msg, throwable_class)) {
|
(*env)->Throw(env, exc);
|
||||||
(*env)->Throw(env, msg);
|
|
||||||
} else {
|
|
||||||
(*env)->CallStaticVoidMethod(env, seq_class, seq_throw_exc, msg);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject go_seq_wrap_exception(JNIEnv *env) {
|
jobject go_seq_get_exception(JNIEnv *env) {
|
||||||
jthrowable exc = (*env)->ExceptionOccurred(env);
|
jthrowable exc = (*env)->ExceptionOccurred(env);
|
||||||
if (!exc) {
|
if (!exc) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
(*env)->ExceptionClear(env);
|
(*env)->ExceptionClear(env);
|
||||||
return (*env)->CallStaticObjectMethod(env, seq_class, seq_wrapThrowable, exc);
|
return exc;
|
||||||
}
|
}
|
||||||
|
|
||||||
jbyteArray go_seq_to_java_bytearray(JNIEnv *env, nbyteslice s, int copy) {
|
jbyteArray go_seq_to_java_bytearray(JNIEnv *env, nbyteslice s, int copy) {
|
||||||
|
@ -310,11 +304,6 @@ Java_go_Seq_init(JNIEnv *env, jclass clazz) {
|
||||||
}
|
}
|
||||||
|
|
||||||
seq_class = (*env)->NewGlobalRef(env, clazz);
|
seq_class = (*env)->NewGlobalRef(env, clazz);
|
||||||
seq_throw_exc = (*env)->GetStaticMethodID(env, seq_class, "throwException", "(Lgo/error;)V");
|
|
||||||
if (seq_throw_exc == NULL) {
|
|
||||||
LOG_FATAL("failed to find method Seq.throwException");
|
|
||||||
}
|
|
||||||
|
|
||||||
seq_getRef = (*env)->GetStaticMethodID(env, seq_class, "getRef", "(I)Lgo/Seq$Ref;");
|
seq_getRef = (*env)->GetStaticMethodID(env, seq_class, "getRef", "(I)Lgo/Seq$Ref;");
|
||||||
if (seq_getRef == NULL) {
|
if (seq_getRef == NULL) {
|
||||||
LOG_FATAL("failed to find method Seq.getRef");
|
LOG_FATAL("failed to find method Seq.getRef");
|
||||||
|
@ -335,15 +324,6 @@ Java_go_Seq_init(JNIEnv *env, jclass clazz) {
|
||||||
if (seq_incGoObjectRef == NULL) {
|
if (seq_incGoObjectRef == NULL) {
|
||||||
LOG_FATAL("failed to find method Seq.incGoObjectRef");
|
LOG_FATAL("failed to find method Seq.incGoObjectRef");
|
||||||
}
|
}
|
||||||
seq_wrapThrowable = (*env)->GetStaticMethodID(env, seq_class, "wrapThrowable", "(Ljava/lang/Throwable;)Lgo/error;");
|
|
||||||
if (seq_wrapThrowable == NULL) {
|
|
||||||
LOG_FATAL("failed to find method Seq.wrapThrowable");
|
|
||||||
}
|
|
||||||
throwable_class = (*env)->FindClass(env, "java/lang/Throwable");
|
|
||||||
if (throwable_class == NULL) {
|
|
||||||
LOG_FATAL("failed to find Throwable class");
|
|
||||||
}
|
|
||||||
throwable_class = (*env)->NewGlobalRef(env, throwable_class);
|
|
||||||
jclass ref_class = (*env)->FindClass(env, "go/Seq$Ref");
|
jclass ref_class = (*env)->FindClass(env, "go/Seq$Ref");
|
||||||
if (ref_class == NULL) {
|
if (ref_class == NULL) {
|
||||||
LOG_FATAL("failed to find the Seq.Ref class");
|
LOG_FATAL("failed to find the Seq.Ref class");
|
||||||
|
|
|
@ -35,6 +35,7 @@ static int numI = 0;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*error = [NSError errorWithDomain:@"SeqTest" code:1 userInfo:@{NSLocalizedDescriptionKey: @"NumberError"}];
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,12 +296,20 @@ static int numI = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testErrorField {
|
- (void)testErrorField {
|
||||||
NSString *want = @"an error message";
|
NSString *wantMsg = @"an error message";
|
||||||
|
NSError *want = [NSError errorWithDomain:@"SeqTest" code:1 userInfo:@{NSLocalizedDescriptionKey: wantMsg}];
|
||||||
GoTestpkgNode *n = GoTestpkgNewNode(@"ErrTest");
|
GoTestpkgNode *n = GoTestpkgNewNode(@"ErrTest");
|
||||||
n.err = [NSError errorWithDomain:@"SeqTest" code:1 userInfo:@{NSLocalizedDescriptionKey: want}];
|
n.err = want;
|
||||||
NSError *got = n.err;
|
NSError *got = n.err;
|
||||||
NSString *gotMsg = [got.userInfo valueForKey:NSLocalizedDescriptionKey];
|
XCTAssertEqual(got, want, @"got different objects efter roundtrip");
|
||||||
XCTAssertEqualObjects(gotMsg, want, @"err = %@, want %@", gotMsg, want);
|
NSString *gotMsg = GoTestpkgErrorMessage(want);
|
||||||
|
XCTAssertEqualObjects(gotMsg, wantMsg, @"err = %@, want %@", gotMsg, wantMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)testErrorDup {
|
||||||
|
NSError *err = GoTestpkg.globalErr;
|
||||||
|
XCTAssertTrue(GoTestpkgIsGlobalErr(err), @"A Go error must preserve its identity across the boundary");
|
||||||
|
XCTAssertEqualObjects([err localizedDescription], @"global err", "A Go error message must be preserved");
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testVar {
|
- (void)testVar {
|
||||||
|
@ -343,6 +352,8 @@ static int numI = 0;
|
||||||
NSString *ret;
|
NSString *ret;
|
||||||
NSError *error;
|
NSError *error;
|
||||||
XCTAssertFalse(GoTestpkgCallIStringError(num, @"alphabet", &ret, &error), @"GoTestpkgCallIStringError(Number, 'alphabet') succeeded; want error");
|
XCTAssertFalse(GoTestpkgCallIStringError(num, @"alphabet", &ret, &error), @"GoTestpkgCallIStringError(Number, 'alphabet') succeeded; want error");
|
||||||
|
NSString *desc = [error localizedDescription];
|
||||||
|
XCTAssertEqualObjects(desc, @"NumberError", @"GoTestpkgCallIStringError(Number, 'alphabet') returned unexpected error message %@", desc);
|
||||||
NSError *error2;
|
NSError *error2;
|
||||||
XCTAssertTrue(GoTestpkgCallIStringError(num, @"number", &ret, &error2), @"GoTestpkgCallIStringError(Number, 'number') failed(%@); want success", error2);
|
XCTAssertTrue(GoTestpkgCallIStringError(num, @"number", &ret, &error2), @"GoTestpkgCallIStringError(Number, 'number') failed(%@); want success", error2);
|
||||||
XCTAssertEqualObjects(ret, @"OK", @"GoTestpkgCallIStringError(Number, 'number') returned unexpected results %@", ret);
|
XCTAssertEqualObjects(ret, @"OK", @"GoTestpkgCallIStringError(Number, 'number') returned unexpected results %@", ret);
|
||||||
|
|
|
@ -24,14 +24,6 @@
|
||||||
userInfo:NULL]; \
|
userInfo:NULL]; \
|
||||||
}
|
}
|
||||||
|
|
||||||
// goErrorWrapper is a adapter between an NSError * and the bind Error interface
|
|
||||||
@interface goSeqErrorWrapper : NSObject<GoUniverseerror> {
|
|
||||||
}
|
|
||||||
@property NSError *err;
|
|
||||||
|
|
||||||
- (id)initWithError:(NSError *)err;
|
|
||||||
@end
|
|
||||||
|
|
||||||
// GoSeqRef is an object tagged with an integer for passing back and
|
// GoSeqRef is an object tagged with an integer for passing back and
|
||||||
// forth across the language boundary. A GoSeqRef may represent either
|
// forth across the language boundary. A GoSeqRef may represent either
|
||||||
// an instance of a Go object, or an Objective-C object passed to Go.
|
// an instance of a Go object, or an Objective-C object passed to Go.
|
||||||
|
@ -92,6 +84,5 @@ extern nstring go_seq_from_objc_string(NSString *s);
|
||||||
|
|
||||||
extern NSData *go_seq_to_objc_bytearray(nbyteslice, int copy);
|
extern NSData *go_seq_to_objc_bytearray(nbyteslice, int copy);
|
||||||
extern NSString *go_seq_to_objc_string(nstring str);
|
extern NSString *go_seq_to_objc_string(nstring str);
|
||||||
extern NSError *go_seq_to_nserror(id<GoUniverseerror> err, NSString *errDomain);
|
|
||||||
|
|
||||||
#endif // __GO_SEQ_HDR__
|
#endif // __GO_SEQ_HDR__
|
||||||
|
|
|
@ -49,22 +49,6 @@
|
||||||
// Note that this file is copied into and compiled with the generated
|
// Note that this file is copied into and compiled with the generated
|
||||||
// bindings.
|
// bindings.
|
||||||
|
|
||||||
@implementation goSeqErrorWrapper {
|
|
||||||
}
|
|
||||||
@synthesize err;
|
|
||||||
|
|
||||||
- (id)initWithError:(NSError *)e {
|
|
||||||
if (!(self = [super init]))
|
|
||||||
return nil;
|
|
||||||
self.err = e;
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (NSString *)error {
|
|
||||||
return [self.err localizedDescription];
|
|
||||||
}
|
|
||||||
@end
|
|
||||||
|
|
||||||
// A simple thread-safe mutable dictionary.
|
// A simple thread-safe mutable dictionary.
|
||||||
@interface goSeqDictionary : NSObject {
|
@interface goSeqDictionary : NSObject {
|
||||||
}
|
}
|
||||||
|
@ -250,13 +234,6 @@ nstring go_seq_from_objc_string(NSString *s) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSError *go_seq_to_nserror(id<GoUniverseerror> err, NSString *errDomain) {
|
|
||||||
NSString *errStr = [err error];
|
|
||||||
NSMutableDictionary* details = [NSMutableDictionary dictionary];
|
|
||||||
[details setValue:errStr forKey:NSLocalizedDescriptionKey];
|
|
||||||
return [NSError errorWithDomain:errDomain code:1 userInfo:details];
|
|
||||||
}
|
|
||||||
|
|
||||||
@implementation GoSeqRef {
|
@implementation GoSeqRef {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoBasictypes.h"
|
#include "GoBasictypes.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.basictypes";
|
|
||||||
|
|
||||||
const BOOL GoBasictypesABool = YES;
|
const BOOL GoBasictypesABool = YES;
|
||||||
const double GoBasictypesAFloat = 0.2015;
|
const double GoBasictypesAFloat = 0.2015;
|
||||||
NSString* const GoBasictypesALongString = @"LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString";
|
NSString* const GoBasictypesALongString = @"LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString,LongString";
|
||||||
|
@ -47,7 +45,7 @@ BOOL GoBasictypesError(NSError** error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
@ -65,7 +63,7 @@ BOOL GoBasictypesErrorPair(long* ret0_, NSError** error) {
|
||||||
}
|
}
|
||||||
*ret0_ = _ret0_;
|
*ret0_ = _ret0_;
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ jint cproxy_java_lang_Runnable_run(jint this) {
|
||||||
// Must be a Java object
|
// Must be a Java object
|
||||||
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
||||||
(*env)->CallVoidMethod(env, _this, m_java_lang_Runnable_run);
|
(*env)->CallVoidMethod(env, _this, m_java_lang_Runnable_run);
|
||||||
jobject _exc = go_seq_wrap_exception(env);
|
jobject _exc = go_seq_get_exception(env);
|
||||||
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
||||||
go_seq_pop_local_frame(env);
|
go_seq_pop_local_frame(env);
|
||||||
return _exc_ref;
|
return _exc_ref;
|
||||||
|
@ -50,7 +50,7 @@ ret_jint cproxy_java_io_InputStream_read__(jint this) {
|
||||||
// Must be a Java object
|
// Must be a Java object
|
||||||
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
||||||
jint res = (*env)->CallIntMethod(env, _this, m_java_io_InputStream_read__);
|
jint res = (*env)->CallIntMethod(env, _this, m_java_io_InputStream_read__);
|
||||||
jobject _exc = go_seq_wrap_exception(env);
|
jobject _exc = go_seq_get_exception(env);
|
||||||
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
||||||
jint _res = res;
|
jint _res = res;
|
||||||
go_seq_pop_local_frame(env);
|
go_seq_pop_local_frame(env);
|
||||||
|
@ -63,7 +63,7 @@ ret_jint csuper_java_io_InputStream_read__(jint this) {
|
||||||
// Must be a Java object
|
// Must be a Java object
|
||||||
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
||||||
jint res = (*env)->CallNonvirtualIntMethod(env, _this, class_java_io_InputStream, m_java_io_InputStream_read__);
|
jint res = (*env)->CallNonvirtualIntMethod(env, _this, class_java_io_InputStream, m_java_io_InputStream_read__);
|
||||||
jobject _exc = go_seq_wrap_exception(env);
|
jobject _exc = go_seq_get_exception(env);
|
||||||
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
||||||
jint _res = res;
|
jint _res = res;
|
||||||
go_seq_pop_local_frame(env);
|
go_seq_pop_local_frame(env);
|
||||||
|
@ -76,7 +76,7 @@ ret_jint cproxy_java_util_concurrent_Future_get__(jint this) {
|
||||||
// Must be a Java object
|
// Must be a Java object
|
||||||
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
jobject _this = go_seq_from_refnum(env, this, NULL, NULL);
|
||||||
jobject res = (*env)->CallObjectMethod(env, _this, m_java_util_concurrent_Future_get__);
|
jobject res = (*env)->CallObjectMethod(env, _this, m_java_util_concurrent_Future_get__);
|
||||||
jobject _exc = go_seq_wrap_exception(env);
|
jobject _exc = go_seq_get_exception(env);
|
||||||
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
||||||
jint _res = go_seq_to_refnum(env, res);
|
jint _res = go_seq_to_refnum(env, res);
|
||||||
go_seq_pop_local_frame(env);
|
go_seq_pop_local_frame(env);
|
||||||
|
@ -91,7 +91,7 @@ ret_jint cproxy_java_util_concurrent_Future_get__JLjava_util_concurrent_TimeUnit
|
||||||
jlong _a0 = a0;
|
jlong _a0 = a0;
|
||||||
jobject _a1 = go_seq_from_refnum(env, a1, NULL, NULL);
|
jobject _a1 = go_seq_from_refnum(env, a1, NULL, NULL);
|
||||||
jobject res = (*env)->CallObjectMethod(env, _this, m_java_util_concurrent_Future_get__JLjava_util_concurrent_TimeUnit_2, _a0, _a1);
|
jobject res = (*env)->CallObjectMethod(env, _this, m_java_util_concurrent_Future_get__JLjava_util_concurrent_TimeUnit_2, _a0, _a1);
|
||||||
jobject _exc = go_seq_wrap_exception(env);
|
jobject _exc = go_seq_get_exception(env);
|
||||||
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
int32_t _exc_ref = go_seq_to_refnum(env, _exc);
|
||||||
jint _res = go_seq_to_refnum(env, res);
|
jint _res = go_seq_to_refnum(env, res);
|
||||||
go_seq_pop_local_frame(env);
|
go_seq_pop_local_frame(env);
|
||||||
|
|
|
@ -11,18 +11,18 @@ public final class Future implements Seq.GoObject, java.util.concurrent.Future {
|
||||||
|
|
||||||
private final Seq.Ref ref;
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
Future(Seq.Ref ref) { this.ref = ref; }
|
|
||||||
|
|
||||||
public Future() { this.ref = __New(); }
|
|
||||||
|
|
||||||
private static native Seq.Ref __New();
|
|
||||||
|
|
||||||
@Override public final int incRefnum() {
|
@Override public final int incRefnum() {
|
||||||
int refnum = ref.refnum;
|
int refnum = ref.refnum;
|
||||||
Seq.incGoRef(refnum);
|
Seq.incGoRef(refnum);
|
||||||
return refnum;
|
return refnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
|
public Future() { this.ref = __New(); }
|
||||||
|
|
||||||
|
private static native Seq.Ref __New();
|
||||||
|
|
||||||
public final native java.util.concurrent.Future getFuture();
|
public final native java.util.concurrent.Future getFuture();
|
||||||
public final native void setFuture(java.util.concurrent.Future v);
|
public final native void setFuture(java.util.concurrent.Future v);
|
||||||
|
|
||||||
|
@ -43,6 +43,12 @@ public final class InputStream extends java.io.InputStream implements Seq.GoObje
|
||||||
|
|
||||||
private final Seq.Ref ref;
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
public InputStream() {
|
public InputStream() {
|
||||||
super();
|
super();
|
||||||
this.ref = __NewInputStream();
|
this.ref = __NewInputStream();
|
||||||
|
@ -50,12 +56,6 @@ public final class InputStream extends java.io.InputStream implements Seq.GoObje
|
||||||
|
|
||||||
private static native Seq.Ref __NewInputStream();
|
private static native Seq.Ref __NewInputStream();
|
||||||
|
|
||||||
@Override public final int incRefnum() {
|
|
||||||
int refnum = ref.refnum;
|
|
||||||
Seq.incGoRef(refnum);
|
|
||||||
return refnum;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final native java.io.InputStream getInputStream();
|
public final native java.io.InputStream getInputStream();
|
||||||
public final native void setInputStream(java.io.InputStream v);
|
public final native void setInputStream(java.io.InputStream v);
|
||||||
|
|
||||||
|
@ -75,18 +75,18 @@ public final class Object extends java.lang.Object implements Seq.GoObject {
|
||||||
|
|
||||||
private final Seq.Ref ref;
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
Object(Seq.Ref ref) { this.ref = ref; }
|
|
||||||
|
|
||||||
public Object() { this.ref = __New(); }
|
|
||||||
|
|
||||||
private static native Seq.Ref __New();
|
|
||||||
|
|
||||||
@Override public final int incRefnum() {
|
@Override public final int incRefnum() {
|
||||||
int refnum = ref.refnum;
|
int refnum = ref.refnum;
|
||||||
Seq.incGoRef(refnum);
|
Seq.incGoRef(refnum);
|
||||||
return refnum;
|
return refnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Object(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
|
public Object() { this.ref = __New(); }
|
||||||
|
|
||||||
|
private static native Seq.Ref __New();
|
||||||
|
|
||||||
public final native java.lang.Object getObject();
|
public final native java.lang.Object getObject();
|
||||||
public final native void setObject(java.lang.Object v);
|
public final native void setObject(java.lang.Object v);
|
||||||
|
|
||||||
|
@ -105,18 +105,18 @@ public final class Runnable implements Seq.GoObject, java.lang.Runnable {
|
||||||
|
|
||||||
private final Seq.Ref ref;
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
Runnable(Seq.Ref ref) { this.ref = ref; }
|
|
||||||
|
|
||||||
public Runnable() { this.ref = __New(); }
|
|
||||||
|
|
||||||
private static native Seq.Ref __New();
|
|
||||||
|
|
||||||
@Override public final int incRefnum() {
|
@Override public final int incRefnum() {
|
||||||
int refnum = ref.refnum;
|
int refnum = ref.refnum;
|
||||||
Seq.incGoRef(refnum);
|
Seq.incGoRef(refnum);
|
||||||
return refnum;
|
return refnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Runnable(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
|
public Runnable() { this.ref = __New(); }
|
||||||
|
|
||||||
|
private static native Seq.Ref __New();
|
||||||
|
|
||||||
public final native java.lang.Runnable getRunnable();
|
public final native java.lang.Runnable getRunnable();
|
||||||
public final native void setRunnable(java.lang.Runnable v);
|
public final native void setRunnable(java.lang.Runnable v);
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "EXCustomprefix.h"
|
#include "EXCustomprefix.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.customprefix";
|
|
||||||
|
|
||||||
|
|
||||||
void EXCustomprefixF() {
|
void EXCustomprefixF() {
|
||||||
proxycustomprefix__F();
|
proxycustomprefix__F();
|
||||||
|
|
|
@ -6,10 +6,18 @@ package go.ignore;
|
||||||
|
|
||||||
import go.Seq;
|
import go.Seq;
|
||||||
|
|
||||||
public final class S extends Seq.Proxy implements I {
|
public final class S implements Seq.Proxy, I {
|
||||||
static { Ignore.touch(); }
|
static { Ignore.touch(); }
|
||||||
|
|
||||||
S(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
S(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
// skipped field S.F with unsupported type: *types.Interface
|
// skipped field S.F with unsupported type: *types.Interface
|
||||||
|
|
||||||
|
@ -75,8 +83,16 @@ public abstract class Ignore {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyI extends Seq.Proxy implements I {
|
private static final class proxyI implements Seq.Proxy, I {
|
||||||
proxyI(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
// skipped method I.Argument with unsupported parameter or return types
|
// skipped method I.Argument with unsupported parameter or return types
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
// skipped method I.Argument with unsupported parameter or return types
|
// skipped method I.Argument with unsupported parameter or return types
|
||||||
|
|
||||||
// skipped method I.Result with unsupported parameter or return types
|
// skipped method I.Result with unsupported parameter or return types
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoIgnore.h"
|
#include "GoIgnore.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.ignore";
|
|
||||||
|
|
||||||
|
|
||||||
@implementation GoIgnoreS {
|
@implementation GoIgnoreS {
|
||||||
}
|
}
|
||||||
|
@ -31,7 +29,7 @@ static NSString* errDomain = @"go.ignore";
|
||||||
@implementation GoIgnoreI {
|
@implementation GoIgnoreI {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -124,7 +124,7 @@ int32_t cproxyinterfaces_Error_Err(int32_t refnum) {
|
||||||
JNIEnv *env = go_seq_push_local_frame(0);
|
JNIEnv *env = go_seq_push_local_frame(0);
|
||||||
jobject o = go_seq_from_refnum(env, refnum, proxy_class_interfaces_Error, proxy_class_interfaces_Error_cons);
|
jobject o = go_seq_from_refnum(env, refnum, proxy_class_interfaces_Error, proxy_class_interfaces_Error_cons);
|
||||||
(*env)->CallVoidMethod(env, o, mid_Error_Err);
|
(*env)->CallVoidMethod(env, o, mid_Error_Err);
|
||||||
jobject exc = go_seq_wrap_exception(env);
|
jobject exc = go_seq_get_exception(env);
|
||||||
int32_t _exc = go_seq_to_refnum(env, exc);
|
int32_t _exc = go_seq_to_refnum(env, exc);
|
||||||
go_seq_pop_local_frame(env);
|
go_seq_pop_local_frame(env);
|
||||||
return _exc;
|
return _exc;
|
||||||
|
|
|
@ -124,44 +124,108 @@ public abstract class Interfaces {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyError extends Seq.Proxy implements Error {
|
private static final class proxyError implements Seq.Proxy, Error {
|
||||||
proxyError(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyError(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void err() throws Exception;
|
public native void err() throws Exception;
|
||||||
}
|
}
|
||||||
private static final class proxyI extends Seq.Proxy implements I {
|
private static final class proxyI implements Seq.Proxy, I {
|
||||||
proxyI(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native int rand();
|
public native int rand();
|
||||||
}
|
}
|
||||||
private static final class proxyI1 extends Seq.Proxy implements I1 {
|
private static final class proxyI1 implements Seq.Proxy, I1 {
|
||||||
proxyI1(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI1(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void j();
|
public native void j();
|
||||||
}
|
}
|
||||||
private static final class proxyI2 extends Seq.Proxy implements I2 {
|
private static final class proxyI2 implements Seq.Proxy, I2 {
|
||||||
proxyI2(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI2(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void g();
|
public native void g();
|
||||||
}
|
}
|
||||||
private static final class proxyI3 extends Seq.Proxy implements I3 {
|
private static final class proxyI3 implements Seq.Proxy, I3 {
|
||||||
proxyI3(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI3(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native I1 f();
|
public native I1 f();
|
||||||
}
|
}
|
||||||
private static final class proxyLargerI extends Seq.Proxy implements LargerI {
|
private static final class proxyLargerI implements Seq.Proxy, LargerI {
|
||||||
proxyLargerI(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyLargerI(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void anotherFunc();
|
public native void anotherFunc();
|
||||||
public native int rand();
|
public native int rand();
|
||||||
}
|
}
|
||||||
private static final class proxySameI extends Seq.Proxy implements SameI {
|
private static final class proxySameI implements Seq.Proxy, SameI {
|
||||||
proxySameI(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxySameI(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native int rand();
|
public native int rand();
|
||||||
}
|
}
|
||||||
private static final class proxyWithParam extends Seq.Proxy implements WithParam {
|
private static final class proxyWithParam implements Seq.Proxy, WithParam {
|
||||||
proxyWithParam(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyWithParam(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void hasParam(boolean p0);
|
public native void hasParam(boolean p0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)j;
|
- (void)j;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)g;
|
- (void)g;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (BOOL)err:(NSError**)error;
|
- (BOOL)err:(NSError**)error;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (int32_t)rand;
|
- (int32_t)rand;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (GoInterfacesI1*)f;
|
- (GoInterfacesI1*)f;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@ FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)anotherFunc;
|
- (void)anotherFunc;
|
||||||
- (int32_t)rand;
|
- (int32_t)rand;
|
||||||
@end
|
@end
|
||||||
|
@ -120,7 +120,7 @@ FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (int32_t)rand;
|
- (int32_t)rand;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ FOUNDATION_EXPORT id<GoInterfacesI> GoInterfacesSeven();
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)hasParam:(BOOL)p0;
|
- (void)hasParam:(BOOL)p0;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,10 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoInterfaces.h"
|
#include "GoInterfaces.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.interfaces";
|
|
||||||
|
|
||||||
@implementation GoInterfacesError {
|
@implementation GoInterfacesError {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -31,7 +29,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
@ -42,7 +40,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesI {
|
@implementation GoInterfacesI {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -61,7 +59,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesI1 {
|
@implementation GoInterfacesI1 {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -78,7 +76,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesI2 {
|
@implementation GoInterfacesI2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -95,7 +93,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesI3 {
|
@implementation GoInterfacesI3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -121,7 +119,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesLargerI {
|
@implementation GoInterfacesLargerI {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -145,7 +143,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesSameI {
|
@implementation GoInterfacesSameI {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -164,7 +162,7 @@ static NSString* errDomain = @"go.interfaces";
|
||||||
@implementation GoInterfacesWithParam {
|
@implementation GoInterfacesWithParam {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -211,7 +209,7 @@ BOOL GoInterfacesCallErr(id<GoInterfacesError> e, NSError** error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
@ -236,7 +234,7 @@ int32_t cproxyinterfaces_Error_Err(int32_t refnum) {
|
||||||
BOOL returnVal = [o err:&error];
|
BOOL returnVal = [o err:&error];
|
||||||
id<GoUniverseerror> _error = nil;
|
id<GoUniverseerror> _error = nil;
|
||||||
if (!returnVal) {
|
if (!returnVal) {
|
||||||
_error = [[goSeqErrorWrapper alloc] initWithError:error];
|
_error = error;
|
||||||
}
|
}
|
||||||
int32_t __error;
|
int32_t __error;
|
||||||
if ([(id<NSObject>)(_error) isKindOfClass:[GoUniverseerror class]]) {
|
if ([(id<NSObject>)(_error) isKindOfClass:[GoUniverseerror class]]) {
|
||||||
|
|
|
@ -6,10 +6,18 @@ package go.issue10788;
|
||||||
|
|
||||||
import go.Seq;
|
import go.Seq;
|
||||||
|
|
||||||
public final class TestStruct extends Seq.Proxy {
|
public final class TestStruct implements Seq.Proxy {
|
||||||
static { Issue10788.touch(); }
|
static { Issue10788.touch(); }
|
||||||
|
|
||||||
TestStruct(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
TestStruct(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public final native String getValue();
|
public final native String getValue();
|
||||||
public final native void setValue(String v);
|
public final native void setValue(String v);
|
||||||
|
@ -78,8 +86,16 @@ public abstract class Issue10788 {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyTestInterface extends Seq.Proxy implements TestInterface {
|
private static final class proxyTestInterface implements Seq.Proxy, TestInterface {
|
||||||
proxyTestInterface(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyTestInterface(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void doSomeWork(TestStruct s);
|
public native void doSomeWork(TestStruct s);
|
||||||
public native void multipleUnnamedParams(long p0, String p1, long p2);
|
public native void multipleUnnamedParams(long p0, String p1, long p2);
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)doSomeWork:(GoIssue10788TestStruct*)s;
|
- (void)doSomeWork:(GoIssue10788TestStruct*)s;
|
||||||
- (void)multipleUnnamedParams:(long)p0 p1:(NSString*)p1 p2:(int64_t)p2;
|
- (void)multipleUnnamedParams:(long)p0 p1:(NSString*)p1 p2:(int64_t)p2;
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoIssue10788.h"
|
#include "GoIssue10788.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.issue10788";
|
|
||||||
|
|
||||||
|
|
||||||
@implementation GoIssue10788TestStruct {
|
@implementation GoIssue10788TestStruct {
|
||||||
}
|
}
|
||||||
|
@ -38,7 +36,7 @@ static NSString* errDomain = @"go.issue10788";
|
||||||
@implementation GoIssue10788TestInterface {
|
@implementation GoIssue10788TestInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -6,10 +6,18 @@ package go.issue12328;
|
||||||
|
|
||||||
import go.Seq;
|
import go.Seq;
|
||||||
|
|
||||||
public final class T extends Seq.Proxy {
|
public final class T implements Seq.Proxy {
|
||||||
static { Issue12328.touch(); }
|
static { Issue12328.touch(); }
|
||||||
|
|
||||||
T(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
T(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public final native java.lang.Exception getErr();
|
public final native java.lang.Exception getErr();
|
||||||
public final native void setErr(java.lang.Exception v);
|
public final native void setErr(java.lang.Exception v);
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoIssue12328.h"
|
#include "GoIssue12328.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.issue12328";
|
|
||||||
|
|
||||||
|
|
||||||
@implementation GoIssue12328T {
|
@implementation GoIssue12328T {
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ struct cproxyissue12403_Parsable_ToJSON_return cproxyissue12403_Parsable_ToJSON(
|
||||||
jobject o = go_seq_from_refnum(env, refnum, proxy_class_issue12403_Parsable, proxy_class_issue12403_Parsable_cons);
|
jobject o = go_seq_from_refnum(env, refnum, proxy_class_issue12403_Parsable, proxy_class_issue12403_Parsable_cons);
|
||||||
jstring res = (*env)->CallObjectMethod(env, o, mid_Parsable_ToJSON);
|
jstring res = (*env)->CallObjectMethod(env, o, mid_Parsable_ToJSON);
|
||||||
nstring _res = go_seq_from_java_string(env, res);
|
nstring _res = go_seq_from_java_string(env, res);
|
||||||
jobject exc = go_seq_wrap_exception(env);
|
jobject exc = go_seq_get_exception(env);
|
||||||
int32_t _exc = go_seq_to_refnum(env, exc);
|
int32_t _exc = go_seq_to_refnum(env, exc);
|
||||||
cproxyissue12403_Parsable_ToJSON_return sres = {
|
cproxyissue12403_Parsable_ToJSON_return sres = {
|
||||||
_res, _exc
|
_res, _exc
|
||||||
|
|
|
@ -33,8 +33,16 @@ public abstract class Issue12403 {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyParsable extends Seq.Proxy implements Parsable {
|
private static final class proxyParsable implements Seq.Proxy, Parsable {
|
||||||
proxyParsable(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyParsable(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native String fromJSON(String jstr);
|
public native String fromJSON(String jstr);
|
||||||
public native String toJSON() throws Exception;
|
public native String toJSON() throws Exception;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (NSString*)fromJSON:(NSString*)jstr;
|
- (NSString*)fromJSON:(NSString*)jstr;
|
||||||
- (BOOL)toJSON:(NSString**)ret0_ error:(NSError**)error;
|
- (BOOL)toJSON:(NSString**)ret0_ error:(NSError**)error;
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -8,12 +8,10 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoIssue12403.h"
|
#include "GoIssue12403.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.issue12403";
|
|
||||||
|
|
||||||
@implementation GoIssue12403Parsable {
|
@implementation GoIssue12403Parsable {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -41,7 +39,7 @@ static NSString* errDomain = @"go.issue12403";
|
||||||
}
|
}
|
||||||
*ret0_ = _ret0_;
|
*ret0_ = _ret0_;
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
@ -69,7 +67,7 @@ struct cproxyissue12403_Parsable_ToJSON_return cproxyissue12403_Parsable_ToJSON(
|
||||||
nstring _ret0_ = go_seq_from_objc_string(ret0_);
|
nstring _ret0_ = go_seq_from_objc_string(ret0_);
|
||||||
id<GoUniverseerror> _error = nil;
|
id<GoUniverseerror> _error = nil;
|
||||||
if (!returnVal) {
|
if (!returnVal) {
|
||||||
_error = [[goSeqErrorWrapper alloc] initWithError:error];
|
_error = error;
|
||||||
}
|
}
|
||||||
int32_t __error;
|
int32_t __error;
|
||||||
if ([(id<NSObject>)(_error) isKindOfClass:[GoUniverseerror class]]) {
|
if ([(id<NSObject>)(_error) isKindOfClass:[GoUniverseerror class]]) {
|
||||||
|
|
|
@ -71,22 +71,54 @@ public abstract class Java {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyF extends Seq.Proxy implements F {
|
private static final class proxyF implements Seq.Proxy, F {
|
||||||
proxyF(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyF(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
}
|
}
|
||||||
private static final class proxyO extends Seq.Proxy implements O {
|
private static final class proxyO implements Seq.Proxy, O {
|
||||||
proxyO(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyO(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
// skipped method O.Super with unsupported parameter or return types
|
// skipped method O.Super with unsupported parameter or return types
|
||||||
|
|
||||||
}
|
}
|
||||||
private static final class proxyR extends Seq.Proxy implements R {
|
private static final class proxyR implements Seq.Proxy, R {
|
||||||
proxyR(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyR(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
}
|
}
|
||||||
private static final class proxyS extends Seq.Proxy implements S {
|
private static final class proxyS implements Seq.Proxy, S {
|
||||||
proxyS(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyS(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
// skipped method S.Super with unsupported parameter or return types
|
// skipped method S.Super with unsupported parameter or return types
|
||||||
|
|
||||||
|
|
|
@ -84,8 +84,16 @@ public abstract class Keywords {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyKeywordCaller extends Seq.Proxy implements KeywordCaller {
|
private static final class proxyKeywordCaller implements Seq.Proxy, KeywordCaller {
|
||||||
proxyKeywordCaller(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyKeywordCaller(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void abstract_();
|
public native void abstract_();
|
||||||
public native void assert_();
|
public native void assert_();
|
||||||
|
|
|
@ -74,7 +74,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)abstract;
|
- (void)abstract;
|
||||||
- (void)assert;
|
- (void)assert;
|
||||||
- (void)boolean;
|
- (void)boolean;
|
||||||
|
|
|
@ -8,12 +8,10 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoKeywords.h"
|
#include "GoKeywords.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.keywords";
|
|
||||||
|
|
||||||
@implementation GoKeywordsKeywordCaller {
|
@implementation GoKeywordsKeywordCaller {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -6,10 +6,18 @@ package go.structs;
|
||||||
|
|
||||||
import go.Seq;
|
import go.Seq;
|
||||||
|
|
||||||
public final class S extends Seq.Proxy {
|
public final class S implements Seq.Proxy {
|
||||||
static { Structs.touch(); }
|
static { Structs.touch(); }
|
||||||
|
|
||||||
S(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
S(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public final native double getX();
|
public final native double getX();
|
||||||
public final native void setX(double v);
|
public final native void setX(double v);
|
||||||
|
@ -58,10 +66,18 @@ package go.structs;
|
||||||
|
|
||||||
import go.Seq;
|
import go.Seq;
|
||||||
|
|
||||||
public final class S2 extends Seq.Proxy implements I {
|
public final class S2 implements Seq.Proxy, I {
|
||||||
static { Structs.touch(); }
|
static { Structs.touch(); }
|
||||||
|
|
||||||
S2(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
S2(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void m();
|
public native void m();
|
||||||
public native String string();
|
public native String string();
|
||||||
|
@ -116,8 +132,16 @@ public abstract class Structs {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyI extends Seq.Proxy implements I {
|
private static final class proxyI implements Seq.Proxy, I {
|
||||||
proxyI(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
public native void m();
|
public native void m();
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ FOUNDATION_EXPORT BOOL GoStructsIdentityWithError(GoStructsS* s, GoStructsS** re
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
- (void)m;
|
- (void)m;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoStructs.h"
|
#include "GoStructs.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.structs";
|
|
||||||
|
|
||||||
|
|
||||||
@implementation GoStructsS {
|
@implementation GoStructsS {
|
||||||
}
|
}
|
||||||
|
@ -67,7 +65,7 @@ static NSString* errDomain = @"go.structs";
|
||||||
}
|
}
|
||||||
*ret0_ = _ret0_;
|
*ret0_ = _ret0_;
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
@ -108,7 +106,7 @@ static NSString* errDomain = @"go.structs";
|
||||||
@implementation GoStructsI {
|
@implementation GoStructsI {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
@ -170,7 +168,7 @@ BOOL GoStructsIdentityWithError(GoStructsS* s, GoStructsS** ret0_, NSError** err
|
||||||
}
|
}
|
||||||
*ret0_ = _ret0_;
|
*ret0_ = _ret0_;
|
||||||
if (_error != nil && error != nil) {
|
if (_error != nil && error != nil) {
|
||||||
*error = go_seq_to_nserror(_error, errDomain);
|
*error = _error;
|
||||||
}
|
}
|
||||||
return (_error == nil);
|
return (_error == nil);
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoTry.h"
|
#include "GoTry.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.try";
|
|
||||||
|
|
||||||
|
|
||||||
NSString* GoTryThis() {
|
NSString* GoTryThis() {
|
||||||
nstring r0 = proxytry__This();
|
nstring r0 = proxytry__This();
|
||||||
|
|
|
@ -6,10 +6,18 @@ package go.vars;
|
||||||
|
|
||||||
import go.Seq;
|
import go.Seq;
|
||||||
|
|
||||||
public final class S extends Seq.Proxy implements I {
|
public final class S implements Seq.Proxy, I {
|
||||||
static { Vars.touch(); }
|
static { Vars.touch(); }
|
||||||
|
|
||||||
S(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
S(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
@Override public boolean equals(Object o) {
|
@Override public boolean equals(Object o) {
|
||||||
if (o == null || !(o instanceof S)) {
|
if (o == null || !(o instanceof S)) {
|
||||||
|
@ -63,8 +71,16 @@ public abstract class Vars {
|
||||||
|
|
||||||
private static native void _init();
|
private static native void _init();
|
||||||
|
|
||||||
private static final class proxyI extends Seq.Proxy implements I {
|
private static final class proxyI implements Seq.Proxy, I {
|
||||||
proxyI(Seq.Ref ref) { super(ref); }
|
private final Seq.Ref ref;
|
||||||
|
|
||||||
|
@Override public final int incRefnum() {
|
||||||
|
int refnum = ref.refnum;
|
||||||
|
Seq.incGoRef(refnum);
|
||||||
|
return refnum;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxyI(Seq.Ref ref) { this.ref = ref; }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
}
|
}
|
||||||
@property(strong, readonly) id _ref;
|
@property(strong, readonly) id _ref;
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref;
|
- (instancetype)initWithRef:(id)ref;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#include "_cgo_export.h"
|
#include "_cgo_export.h"
|
||||||
#include "GoVars.h"
|
#include "GoVars.h"
|
||||||
|
|
||||||
static NSString* errDomain = @"go.vars";
|
|
||||||
|
|
||||||
|
|
||||||
@implementation GoVarsS {
|
@implementation GoVarsS {
|
||||||
}
|
}
|
||||||
|
@ -25,7 +23,7 @@ static NSString* errDomain = @"go.vars";
|
||||||
@implementation GoVarsI {
|
@implementation GoVarsI {
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithRef:(id)ref {
|
- (instancetype)initWithRef:(id)ref {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) { __ref = ref; }
|
if (self) { __ref = ref; }
|
||||||
return self;
|
return self;
|
||||||
|
|
|
@ -537,3 +537,13 @@ func (ic *InitCaller) Init() {}
|
||||||
type Issue17073 interface {
|
type Issue17073 interface {
|
||||||
OnError(err error)
|
OnError(err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ErrorMessage(err error) string {
|
||||||
|
return err.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
var GlobalErr error = errors.New("global err")
|
||||||
|
|
||||||
|
func IsGlobalErr(err error) bool {
|
||||||
|
return GlobalErr == err
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue