Skip to content

Commit

Permalink
minor cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
therecipe committed Aug 28, 2016
1 parent 634982b commit 54246e1
Show file tree
Hide file tree
Showing 14 changed files with 933 additions and 925 deletions.
2 changes: 1 addition & 1 deletion internal/binding/converter/body_input_cpp.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ func CppInputParametersForCallbackHeader(function *parser.Function) string {
return strings.Join(input, ", ")
}

func CppInputParametersForCallbackBody(function *parser.Function) (o string) {
func CppInputParametersForCallbackBody(function *parser.Function) string {

var input = make([]string, len(function.Parameters)+1)

Expand Down
4 changes: 2 additions & 2 deletions internal/binding/converter/body_input_go.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func GoInputParametersForC(function *parser.Function) string {
for _, parameter := range function.Parameters {
var alloc = goInput(parameter.Name, parameter.Value, function)
if strings.Contains(alloc, "C.CString") {
input = append(input, cleanName(parameter.Name, parameter.Value)+"C")
input = append(input, fmt.Sprintf("%vC", cleanName(parameter.Name, parameter.Value)))
} else {
input = append(input, alloc)
}
Expand All @@ -37,7 +37,7 @@ func GoInputParametersForCAlloc(function *parser.Function) []string {
for _, parameter := range function.Parameters {
var (
alloc = goInput(parameter.Name, parameter.Value, function)
name = cleanName(parameter.Name, parameter.Value) + "C"
name = fmt.Sprintf("%vC", cleanName(parameter.Name, parameter.Value))
)
if strings.Contains(alloc, "C.CString") {
input = append(input, fmt.Sprintf("var %v = %v\ndefer C.free(unsafe.Pointer(%v))\n", name, alloc, name))
Expand Down
139 changes: 81 additions & 58 deletions internal/binding/converter/header.go
Original file line number Diff line number Diff line change
@@ -1,73 +1,90 @@
package converter

import (
"bytes"
"fmt"
"strings"

"github.com/therecipe/qt/internal/binding/parser"
)

func GoHeaderName(f *parser.Function) (o string) {
func GoHeaderName(f *parser.Function) string {

if f.SignalMode == parser.CALLBACK {
return fmt.Sprintf("callback%v_%v%v", f.Class(), strings.Replace(strings.Title(f.Name), parser.TILDE, "Destroy", -1), f.OverloadNumber)
}

var bb = new(bytes.Buffer)
defer bb.Reset()

if f.Static {
o += fmt.Sprintf("%v_", strings.Split(f.Fullname, "::")[0])
fmt.Fprintf(bb, "%v_", strings.Split(f.Fullname, "::")[0])
}

o += f.SignalMode
fmt.Fprint(bb, f.SignalMode)

switch f.Meta {
case parser.CONSTRUCTOR:
switch {
case f.Meta == parser.CONSTRUCTOR:
{
o += "New"
fmt.Fprint(bb, "New")
}
}

if f.Meta == parser.DESTRUCTOR || strings.HasPrefix(f.Name, parser.TILDE) {
o += "Destroy"
case f.Meta == parser.DESTRUCTOR, strings.HasPrefix(f.Name, parser.TILDE):
{
fmt.Fprint(bb, "Destroy")
}
}

if f.TemplateMode == "String" || f.TemplateMode == "Object" {

if strings.Contains(f.Name, "Object") {
if f.TemplateMode == "String" {
o += strings.Replace(strings.Title(f.Name), "Object", "", -1) + f.TemplateMode
} else {
o += strings.Title(f.Name)
switch f.TemplateMode {
case "String", "Object":
{
if strings.Contains(f.Name, "Object") {
if f.TemplateMode == "String" {
fmt.Fprintf(bb, "%v%v", strings.Replace(strings.Title(f.Name), "Object", "", -1), f.TemplateMode)
} else {
fmt.Fprint(bb, strings.Title(f.Name))
}
}
}

} else {
o += strings.Title(f.Name) + f.TemplateMode
default:
{
fmt.Fprintf(bb, "%v%v", strings.Title(f.Name), f.TemplateMode)
}
}

if f.Overload {
o += f.OverloadNumber
fmt.Fprint(bb, f.OverloadNumber)
}

if f.Default {
fmt.Fprint(bb, "Default")
}

if strings.ContainsAny(o, "&<>=/!()[]{}^|*+-") || strings.Contains(o, "Operator") {
if strings.ContainsAny(bb.String(), "&<>=/!()[]{}^|*+-") || strings.Contains(bb.String(), "Operator") {
f.Access = "unsupported_GoHeaderName"
return f.Access
}

return strings.Replace(o, parser.TILDE, "", -1)
return strings.Replace(bb.String(), parser.TILDE, "", -1)
}

func CppHeaderName(f *parser.Function) string {
return fmt.Sprintf("%v_%v", strings.Split(f.Fullname, "::")[0], GoHeaderName(f))
return fmt.Sprintf("%v_%v", f.Class(), GoHeaderName(f))
}

func GoHeaderOutput(f *parser.Function) string {

if f.SignalMode == parser.CALLBACK {
return cgoType(f, f.Output)
}
switch f.SignalMode {
case parser.CALLBACK:
{
return cgoType(f, f.Output)
}

if f.SignalMode == parser.CONNECT || f.SignalMode == parser.DISCONNECT {
return ""
case parser.CONNECT, parser.DISCONNECT:
{
return ""
}
}

var value = f.Output
Expand All @@ -94,112 +111,118 @@ func CppHeaderOutput(f *parser.Function) string {
return cppType(f, value)
}

func GoHeaderInput(f *parser.Function) (o string) {
func GoHeaderInput(f *parser.Function) string {
var bb = new(bytes.Buffer)
defer bb.Reset()

if f.SignalMode == parser.CALLBACK {
o += "ptr unsafe.Pointer"
fmt.Fprint(bb, "ptr unsafe.Pointer")
for _, p := range f.Parameters {
if v := cgoType(f, p.Value); v != "" {
o += fmt.Sprintf(", %v %v", cleanName(p.Name, p.Value), v)
fmt.Fprintf(bb, ", %v %v", cleanName(p.Name, p.Value), v)
}
}
return strings.TrimSuffix(o, ", ")
return bb.String()
}

if f.SignalMode == parser.CONNECT {
o += "f func ("
fmt.Fprint(bb, "f func (")
}

if (f.Meta == parser.SIGNAL || strings.Contains(f.Virtual, parser.IMPURE)) && f.SignalMode != parser.CONNECT {
if strings.Contains(f.Virtual, parser.IMPURE) && f.SignalMode == "" {
} else {
return
return bb.String()
}
}

var tmp = make([]string, 0)
for _, p := range f.Parameters {
if v := goType(f, p.Value); v != "" {
if isClass(v) {
if f.SignalMode == parser.CONNECT {
o += fmt.Sprintf("%v *%v, ", cleanName(p.Name, p.Value), v)
tmp = append(tmp, fmt.Sprintf("%v *%v", cleanName(p.Name, p.Value), v))
} else {
o += fmt.Sprintf("%v %v_ITF, ", cleanName(p.Name, p.Value), v)
tmp = append(tmp, fmt.Sprintf("%v %v_ITF", cleanName(p.Name, p.Value), v))
}
} else {
o += fmt.Sprintf("%v %v, ", cleanName(p.Name, p.Value), v)
tmp = append(tmp, fmt.Sprintf("%v %v", cleanName(p.Name, p.Value), v))
}
} else {
f.Access = "unsupported_GoHeaderInput"
return f.Access
}
}

o = strings.TrimSuffix(o, ", ")
fmt.Fprint(bb, strings.Join(tmp, ", "))

if f.SignalMode == parser.CONNECT {
o += ")"
}
fmt.Fprint(bb, ")")

if f.SignalMode == parser.CONNECT {
if isClass(goType(f, f.Output)) {
o += " *" + goType(f, f.Output)
fmt.Fprintf(bb, " *%v", goType(f, f.Output))
} else {
o += " " + goType(f, f.Output)
fmt.Fprintf(bb, " %v", goType(f, f.Output))
}
}

return
return bb.String()
}

func GoHeaderInputSignalFunction(f *parser.Function) (o string) {
func GoHeaderInputSignalFunction(f *parser.Function) string {
var bb = new(bytes.Buffer)
defer bb.Reset()

fmt.Fprint(bb, "func (")

o += "func ("
var tmp = make([]string, 0)

for _, p := range f.Parameters {
if v := goType(f, p.Value); v != "" {
if isClass(v) {
o += fmt.Sprintf("*%v, ", v)
tmp = append(tmp, fmt.Sprintf("*%v", v))
} else {
o += fmt.Sprintf("%v, ", v)
tmp = append(tmp, v)
}
} else {
f.Access = "unsupported_GoHeaderInputSignalFunction"
return f.Access
}
}

o = strings.TrimSuffix(o, ", ")
fmt.Fprint(bb, strings.Join(tmp, ", "))

o += ")"
fmt.Fprint(bb, ")")

if f.SignalMode == parser.CALLBACK {
if isClass(goType(f, f.Output)) {
o += " *" + goType(f, f.Output)
fmt.Fprintf(bb, " *%v", goType(f, f.Output))
} else {
o += " " + goType(f, f.Output)
fmt.Fprintf(bb, " %v", goType(f, f.Output))
}
}

return
return bb.String()
}

func CppHeaderInput(f *parser.Function) (o string) {
func CppHeaderInput(f *parser.Function) string {
var tmp = make([]string, 0)

if !(f.Static || f.Meta == parser.CONSTRUCTOR) {
o += "void* ptr, "
tmp = append(tmp, "void* ptr")
}

if f.Meta == parser.SIGNAL {
return strings.TrimSuffix(o, ", ")
return strings.Join(tmp, ", ")
}

for _, p := range f.Parameters {
if v := cppType(f, p.Value); !(v == "") {
o += fmt.Sprintf("%v %v, ", v, cleanName(p.Name, p.Value))
tmp = append(tmp, fmt.Sprintf("%v %v", v, cleanName(p.Name, p.Value)))
} else {
f.Access = "unsupported_CppHeaderInput"
return f.Access
}
}

return strings.TrimSuffix(o, ", ")
return strings.Join(tmp, ", ")
}
13 changes: 6 additions & 7 deletions internal/binding/converter/helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ func cleanName(name, value string) string {

case "":
{
return "v" + strings.Replace(strings.ToLower(CleanValue(value)[:2]), ".", "", -1)
return fmt.Sprintf("v%v", strings.Replace(strings.ToLower(CleanValue(value)[:2]), ".", "", -1))
}
}

Expand Down Expand Up @@ -159,7 +159,7 @@ func findEnumH(e *parser.Enum, value string, byValue bool) (string, string) {

if byValue {
for _, v := range e.Values {
if outE, _ := findEnumHelper(value, class(e)+"::"+v.Name, ""); outE != "" {
if outE, _ := findEnumHelper(value, fmt.Sprintf("%v::%v", class(e), v.Name), ""); outE != "" {
return outE, ""
}
}
Expand Down Expand Up @@ -305,15 +305,14 @@ func IsPrivateSignal(f *parser.Function) bool {
}

if fData != "" {
if strings.Contains(fData, f.Name+"(") {
if strings.Contains(fData, fmt.Sprintf("%v(", f.Name)) {

return strings.Contains(strings.Split(strings.Split(fData, f.Name+"(")[1], ")")[0], "QPrivateSignal")
return strings.Contains(strings.Split(strings.Split(fData, fmt.Sprintf("%v(", f.Name))[1], ")")[0], "QPrivateSignal")
}

if strings.Contains(fData, f.Name+" (") {
return strings.Contains(strings.Split(strings.Split(fData, f.Name+" (")[1], ")")[0], "QPrivateSignal")
if strings.Contains(fData, fmt.Sprintf("%v (", f.Name)) {
return strings.Contains(strings.Split(strings.Split(fData, fmt.Sprintf("%v (", f.Name))[1], ")")[0], "QPrivateSignal")
}

}

fmt.Println("converter.IsPrivateSignal", f.Class())
Expand Down
4 changes: 2 additions & 2 deletions internal/binding/converter/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ func goType(f *parser.Function, value string) string {
if parser.ClassMap[f.Class()].WeakLink[c.Module] {
return "int64"
}
return module(c.Module) + "." + goEnum(f, value)
return fmt.Sprintf("%v.%v", module(c.Module), goEnum(f, value))
}
return goEnum(f, value)
}
Expand All @@ -150,7 +150,7 @@ func goType(f *parser.Function, value string) string {
if parser.ClassMap[f.Class()].WeakLink[parser.ClassMap[value].Module] {
return "unsafe.Pointer"
}
return m + "." + value
return fmt.Sprintf("%v.%v", m, value)
}

if f.TemplateMode == "String" {
Expand Down
13 changes: 7 additions & 6 deletions internal/binding/parser/class.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ func (c *Class) fix() {

defFunction.Name = "standardPixmap"
defFunction.Output = "QPixmap"
defFunction.Fullname = c.Name + "::" + defFunction.Name
defFunction.Fullname = fmt.Sprintf("%v::%v", c.Name, defFunction.Name)

c.Functions = append(c.Functions, &defFunction)
}
Expand Down Expand Up @@ -269,7 +269,7 @@ func (c *Class) fixBases() {
case "QColumnView", "QLCDNumber", "QWebEngineUrlSchemeHandler", "QWebEngineUrlRequestInterceptor", "QWebEngineCookieStore", "QWebEngineUrlRequestInfo", "QWebEngineUrlRequestJob":
{
for _, m := range append(LibDeps[strings.TrimPrefix(c.Module, "Qt")], strings.TrimPrefix(c.Module, "Qt")) {
m = "Qt" + m
m = fmt.Sprintf("Qt%v", m)
if utils.Exists(fmt.Sprintf(filepath.Join("%v", "%v", "%v%v%v"), prefixPath, midfixPath, m, suffixPath, c.Name)) {

c.Bases = getBasesFromHeader(utils.Load(fmt.Sprintf(filepath.Join("%v", "%v", "%v%v%v.h"), prefixPath, midfixPath, m, suffixPath, strings.ToLower(c.Name))), c.Name, c.Module)
Expand Down Expand Up @@ -299,7 +299,7 @@ func (c *Class) fixBases() {

var found bool
for _, m := range append(LibDeps[strings.TrimPrefix(c.Module, "Qt")], strings.TrimPrefix(c.Module, "Qt")) {
m = "Qt" + m
m = fmt.Sprintf("Qt%v", m)
if utils.Exists(fmt.Sprintf(filepath.Join("%v", "%v", "%v%v%v"), prefixPath, midfixPath, m, suffixPath, c.Name)) {

var f = utils.Load(fmt.Sprintf(filepath.Join("%v", "%v", "%v%v%v"), prefixPath, midfixPath, m, suffixPath, c.Name))
Expand Down Expand Up @@ -382,17 +382,18 @@ func getBasesFromHeader(f string, n string, m string) string {
}

func normalizedClassDeclaration(f string, is int) string {
var bb = new(bytes.Buffer)
defer bb.Reset()

var out string
for i, l := range strings.Split(f, "\n") {
if i >= is {
out += l
fmt.Fprint(bb, l)
if strings.Contains(l, "{") {
break
}
}
}
return out
return bb.String()
}

var LibDeps = map[string][]string{
Expand Down
Loading

0 comments on commit 54246e1

Please sign in to comment.