mirror of https://github.com/go-python/gopy.git
bind: refactor gen{Method,Func}Body
This commit is contained in:
parent
63da525aa1
commit
43f0028eb5
|
@ -112,18 +112,23 @@ gopy_%[3]s(PyObject *self, PyObject *args) {
|
||||||
)
|
)
|
||||||
|
|
||||||
g.impl.Indent()
|
g.impl.Indent()
|
||||||
g.genFuncBody(o)
|
g.genFuncBody(o.id, o.typ.Type().(*types.Signature))
|
||||||
g.impl.Outdent()
|
g.impl.Outdent()
|
||||||
g.impl.Printf("}\n\n")
|
g.impl.Printf("}\n\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *cpyGen) genFuncBody(fct Func) {
|
func (g *cpyGen) genFuncBody(id string, sig *types.Signature) {
|
||||||
o := fct.typ
|
|
||||||
funcArgs := []string{}
|
funcArgs := []string{}
|
||||||
|
|
||||||
sig := o.Type().(*types.Signature)
|
|
||||||
res := newVars(sig.Results())
|
res := newVars(sig.Results())
|
||||||
args := newVars(sig.Params())
|
args := newVars(sig.Params())
|
||||||
|
var recv *Var
|
||||||
|
if sig.Recv() != nil {
|
||||||
|
recv = newVar(sig.Recv())
|
||||||
|
recv.genRecvDecl(g.impl)
|
||||||
|
funcArgs = append(funcArgs, recv.getFuncArg())
|
||||||
|
}
|
||||||
|
|
||||||
for _, arg := range args {
|
for _, arg := range args {
|
||||||
arg.genDecl(g.impl)
|
arg.genDecl(g.impl)
|
||||||
funcArgs = append(funcArgs, arg.getFuncArg())
|
funcArgs = append(funcArgs, arg.getFuncArg())
|
||||||
|
@ -136,7 +141,7 @@ func (g *cpyGen) genFuncBody(fct Func) {
|
||||||
ret := res[0]
|
ret := res[0]
|
||||||
ret.genRetDecl(g.impl)
|
ret.genRetDecl(g.impl)
|
||||||
default:
|
default:
|
||||||
g.impl.Printf("struct %[1]s_return c_gopy_ret;\n", fct.id)
|
g.impl.Printf("struct %[1]s_return c_gopy_ret;\n", id)
|
||||||
/*
|
/*
|
||||||
for i := 0; i < res.Len(); i++ {
|
for i := 0; i < res.Len(); i++ {
|
||||||
ret := res.At(i)
|
ret := res.At(i)
|
||||||
|
@ -152,6 +157,10 @@ func (g *cpyGen) genFuncBody(fct Func) {
|
||||||
|
|
||||||
g.impl.Printf("\n")
|
g.impl.Printf("\n")
|
||||||
|
|
||||||
|
if recv != nil {
|
||||||
|
recv.genRecvImpl(g.impl)
|
||||||
|
}
|
||||||
|
|
||||||
if len(args) > 0 {
|
if len(args) > 0 {
|
||||||
g.impl.Printf("if (!PyArg_ParseTuple(args, ")
|
g.impl.Printf("if (!PyArg_ParseTuple(args, ")
|
||||||
format := []string{}
|
format := []string{}
|
||||||
|
@ -179,7 +188,7 @@ func (g *cpyGen) genFuncBody(fct Func) {
|
||||||
g.impl.Printf("c_gopy_ret = ")
|
g.impl.Printf("c_gopy_ret = ")
|
||||||
}
|
}
|
||||||
|
|
||||||
g.impl.Printf("GoPy_%[1]s(%[2]s);\n", fct.id, strings.Join(funcArgs, ", "))
|
g.impl.Printf("GoPy_%[1]s(%[2]s);\n", id, strings.Join(funcArgs, ", "))
|
||||||
|
|
||||||
g.impl.Printf("\n")
|
g.impl.Printf("\n")
|
||||||
|
|
||||||
|
@ -526,8 +535,7 @@ func (g *cpyGen) genMethod(cpy Struct, m Method) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *cpyGen) genMethodBody(cpy Struct, m Method) {
|
func (g *cpyGen) genMethodBody(cpy Struct, m Method) {
|
||||||
//FIXME(sbinet)
|
g.genFuncBody(m.id, m.sel.Type().(*types.Signature))
|
||||||
g.impl.Printf("Py_INCREF(Py_None);\nreturn Py_None;\n")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *cpyGen) genPreamble() {
|
func (g *cpyGen) genPreamble() {
|
||||||
|
|
|
@ -86,6 +86,15 @@ func (v *Var) genDecl(g *printer) {
|
||||||
g.Printf("%[1]s c_%[2]s;\n", v.CGoType(), v.Var.Name())
|
g.Printf("%[1]s c_%[2]s;\n", v.CGoType(), v.Var.Name())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Var) genRecvDecl(g *printer) {
|
||||||
|
g.Printf("%[1]s c_%[2]s;\n", v.CGoType(), v.Var.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *Var) genRecvImpl(g *printer) {
|
||||||
|
n := string(v.CGoType()[len("GoPy_"):])
|
||||||
|
g.Printf("c_%[1]s = ((_gopy_%[2]s*)self)->cgopy;\n", v.Var.Name(), n)
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Var) genRetDecl(g *printer) {
|
func (v *Var) genRetDecl(g *printer) {
|
||||||
if v.isGoString() {
|
if v.isGoString() {
|
||||||
g.Printf("const char* cgopy_gopy_ret;\n")
|
g.Printf("const char* cgopy_gopy_ret;\n")
|
||||||
|
|
Loading…
Reference in New Issue