diff --git a/generate/codegen/gen_function.go b/generate/codegen/gen_function.go index ea4f98c5..4434bcdc 100644 --- a/generate/codegen/gen_function.go +++ b/generate/codegen/gen_function.go @@ -175,6 +175,8 @@ func (f *Function) WriteGoCallCode(currentModule *modules.Module, cw *CodeWriter sb.WriteString(cw.IndentStr + fmt.Sprintf(" (*C.%s)(unsafe.Pointer(&%s))", tt.CName(), p.GoName())) case *typing.DispatchType: sb.WriteString(cw.IndentStr + fmt.Sprintf(" (*C.%s)(unsafe.Pointer(&%s))", tt.CName(), p.GoName())) + case *typing.IDType: + sb.WriteString(cw.IndentStr + fmt.Sprintf(" %s.Ptr()", p.GoName())) default: sb.WriteString(cw.IndentStr + p.GoName()) } @@ -196,6 +198,8 @@ func (f *Function) WriteGoCallCode(currentModule *modules.Module, cw *CodeWriter cw.WriteLineF("return C.GoString(%s)", resultName) case *typing.ProtocolType: cw.WriteLineF("return %s{objc.ObjectFrom(%s)}", returnTypeStr, resultName) + case *typing.AliasType: + cw.WriteLineF("return *(*%s)(unsafe.Pointer(&%s))", returnTypeStr, resultName) default: cw.WriteLineF("return %s(%s)", returnTypeStr, resultName) } @@ -290,6 +294,7 @@ func (f *Function) WriteCSignature(currentModule *modules.Module, cw *CodeWriter if cs, ok := rt.(hasCSignature); ok { returnTypeStr = cs.CSignature() } + if hasBlockParam(f.Parameters) { cw.WriteLineF("// // TODO: %v not implemented (missing block param support)", f.Name) return diff --git a/generate/function.go b/generate/function.go index ead33db1..b971a15e 100644 --- a/generate/function.go +++ b/generate/function.go @@ -45,6 +45,9 @@ var unhandledStructTypes = map[string]bool{ "CFUUIDBytes": true, "dispatch_queue_t": true, // for return values, not parameters "va_list": true, + + "MTLIndirectCommandBufferExecutionRange": true, + "MTLPackedFloat3": true, } func (db *Generator) ToFunction(fw string, sym Symbol) *codegen.Function { @@ -70,9 +73,8 @@ func (db *Generator) ToFunction(fw string, sym Symbol) *codegen.Function { "CGPDFArrayGetName": true, // "const char * _Nullable *" "CGPDFDictionaryGetName": true, // "const char *key, const char * _Nullable *" "CGPDFScannerPopName": true, // "const char * _Nullable *" - } - if sym.Name != "MTLCreateSystemDefaultDevice" { - return nil + + "MTLSizeMake": true, // duplicate symbol issue } if knownIssues[sym.Name] { _, err := sym.Parse(db.Platform) @@ -134,6 +136,12 @@ func (db *Generator) ToFunction(fw string, sym Symbol) *codegen.Function { fmt.Printf("skipping %s because of unhandled struct type %s\n", sym.Name, fntyp.ReturnType.ObjcName()) return nil } + + // we (unfortuantely) don't handle array returns cleanly yet: + if _, ok := fntyp.ReturnType.(*typing.ArrayType); ok { + fmt.Printf("skipping %s because of array return type\n", sym.Name) + return nil + } // populate return type if fntyp.ReturnType != nil { fn.ReturnType = fntyp.ReturnType diff --git a/generate/typing/id_type.go b/generate/typing/id_type.go index db30038e..25c7ff94 100644 --- a/generate/typing/id_type.go +++ b/generate/typing/id_type.go @@ -25,7 +25,7 @@ func (i *IDType) ObjcName() string { } func (i *IDType) CName() string { - return "id" + return "void *" } func (i *IDType) DeclareModule() *modules.Module {