Fix types in c and go parameter lists.
This commit is contained in:
parent
9e3c7c2ce8
commit
3ecb3b1eeb
42
wrap/main.go
42
wrap/main.go
|
@ -34,8 +34,8 @@ var builtinTypes map[string]string = map[string]string{
|
|||
"unsigned long": "int",
|
||||
"long long": "int",
|
||||
"unsigned long long": "int",
|
||||
"float": "float",
|
||||
"double": "float",
|
||||
"float": "float64",
|
||||
"double": "float64",
|
||||
"complex float": "C.complexfloat",
|
||||
"complex double": "C.complexdouble",
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ var builtinTypes map[string]string = map[string]string{
|
|||
var gobuiltinTypes map[string]bool = map[string]bool{
|
||||
"byte": true,
|
||||
"int": true,
|
||||
"float": true,
|
||||
"float64": true,
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -82,6 +82,7 @@ func goType(t,class string) (string, error) {
|
|||
if len(nt) > 3 && nt[0:3] == "id<" {
|
||||
nt = t[3:len(t)-1]
|
||||
}
|
||||
nt = strings.ReplaceAll(nt,"const ","")
|
||||
nt = strings.ReplaceAll(nt," _Nullable","")
|
||||
nt = strings.ReplaceAll(nt," _Nonnull","")
|
||||
if t == "instancetype" {
|
||||
|
@ -141,18 +142,22 @@ func (m Method) isVoid() bool {
|
|||
return typeOrType2(m.Type,m.Type2) == "void"
|
||||
}
|
||||
|
||||
func (w Wrapper) isObject(m Method) bool { // FIXME NEEDED?
|
||||
tp,_ := goType(typeOrType2(m.Type,m.Type2),m.Class)
|
||||
func (w Wrapper) isObject(tp string) bool { // takes a goType
|
||||
if _,ok := w.Interfaces[tp]; ok {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (m Method) cparamlist() string {
|
||||
func (w Wrapper) cparamlist(m Method) string {
|
||||
ret := []string{"void* obj"}
|
||||
for _,p := range m.Parameters {
|
||||
ret = append(ret,fmt.Sprintf("%s %s",typeOrType2(p.Type,p.Type2),p.Vname))
|
||||
tp := typeOrType2(p.Type,p.Type2)
|
||||
gtp,_ := goType(tp,m.Class)
|
||||
if w.isObject(gtp) {
|
||||
tp = "void*"
|
||||
}
|
||||
ret = append(ret,fmt.Sprintf("%s %s",tp,p.Vname))
|
||||
}
|
||||
return strings.Join(ret,", ")
|
||||
}
|
||||
|
@ -178,7 +183,7 @@ var goreserved map[string]bool = map[string]bool{
|
|||
"range": true,
|
||||
}
|
||||
|
||||
func (m Method) goparamlist() (string,[]string,bool) {
|
||||
func (w Wrapper) goparamlist(m Method) (string,[]string,bool) {
|
||||
ret := []string{}
|
||||
tps := []string{}
|
||||
for _,p := range m.Parameters {
|
||||
|
@ -187,6 +192,9 @@ func (m Method) goparamlist() (string,[]string,bool) {
|
|||
if err != nil {
|
||||
return "UNSUPPORTED TYPE", []string{},false
|
||||
}
|
||||
if w.isObject(tp) {
|
||||
tp = "*" + tp
|
||||
}
|
||||
if goreserved[gname] {
|
||||
gname = gname + "_"
|
||||
}
|
||||
|
@ -196,13 +204,17 @@ func (m Method) goparamlist() (string,[]string,bool) {
|
|||
return strings.Join(ret,", "),tps,true
|
||||
}
|
||||
|
||||
func (m Method) goparamnames() string {
|
||||
func (w Wrapper) goparamnames(m Method) string {
|
||||
ret := []string{"o.ptr"}
|
||||
for _,p := range m.Parameters {
|
||||
gname := p.Vname
|
||||
if goreserved[gname] {
|
||||
gname = gname + "_"
|
||||
}
|
||||
gt,_ := goType(typeOrType2(p.Type,p.Type2),m.Class)
|
||||
if w.isObject(gt) {
|
||||
gname = gname + ".ptr"
|
||||
}
|
||||
ret = append(ret,gname)
|
||||
}
|
||||
return strings.Join(ret, ", ")
|
||||
|
@ -357,6 +369,9 @@ func (w *Wrapper) ProcessType(gotype string) {
|
|||
if gotype == "" {
|
||||
return
|
||||
}
|
||||
if gotype[0] == '*' {
|
||||
gotype = gotype[1:]
|
||||
}
|
||||
if _,ok := gobuiltinTypes[gotype]; ok {
|
||||
return
|
||||
}
|
||||
|
@ -466,8 +481,11 @@ New%s() {
|
|||
gcast2 = ")"
|
||||
}
|
||||
}
|
||||
if grtype == "id" { // can't return id
|
||||
continue
|
||||
}
|
||||
w.ProcessType(grtype)
|
||||
gplist, gptypes,ok := y.goparamlist()
|
||||
gplist, gptypes, ok := w.goparamlist(y)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
|
@ -475,7 +493,7 @@ New%s() {
|
|||
w.goCode.WriteString(fmt.Sprintf(`
|
||||
func (o *%s) %s(%s) %s%s {
|
||||
%sC.%s_%s(%s)%s
|
||||
}`,v.Name, gname, gplist, grptr, grtype, gcast, v.Name, y.Name, y.goparamnames(),gcast2))
|
||||
}`,v.Name, gname, gplist, grptr, grtype, gcast, v.Name, y.Name, w.goparamnames(y),gcast2))
|
||||
|
||||
cret := ""
|
||||
if !y.isVoid() {
|
||||
|
@ -485,7 +503,7 @@ func (o *%s) %s(%s) %s%s {
|
|||
%s
|
||||
%s_%s(%s) {
|
||||
%s[(id)obj %s];
|
||||
}`, cmtype, v.Name, y.Name, y.cparamlist(), cret, y.objcparamlist()))
|
||||
}`, cmtype, v.Name, y.Name, w.cparamlist(y), cret, y.objcparamlist()))
|
||||
}
|
||||
}
|
||||
fmt.Println(`package main
|
||||
|
|
Loading…
Reference in New Issue
Block a user