Fix to go type declarations.
This commit is contained in:
		
							parent
							
								
									500b457d32
								
							
						
					
					
						commit
						c0c17e88d1
					
				| 
						 | 
					@ -1,21 +0,0 @@
 | 
				
			||||||
package main
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "C"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"gitlab.wow.st/gmp/nswrap/examples/foundation/ns"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func main() {
 | 
					 | 
				
			||||||
	fmt.Println("Started")
 | 
					 | 
				
			||||||
	n1 := ns.StringWithUTF8String(ns.CharFromString("hi there"))
 | 
					 | 
				
			||||||
	c := n1.CapitalizedString()
 | 
					 | 
				
			||||||
	gstring := c.UTF8String().String()
 | 
					 | 
				
			||||||
	fmt.Println(gstring)
 | 
					 | 
				
			||||||
	n2 := ns.StringWithUTF8String(ns.CharFromString("ok bye"))
 | 
					 | 
				
			||||||
	n3 := ns.StringWithUTF8String(ns.CharFromString("one two three"))
 | 
					 | 
				
			||||||
	a := ns.ArrayWithObjects(n1)
 | 
					 | 
				
			||||||
	fmt.Println("ok")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,103 +0,0 @@
 | 
				
			||||||
package ClassOne
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
#cgo CFLAGS: -x objective-c
 | 
					 | 
				
			||||||
#cgo LDFLAGS: -framework Foundation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#import "simple.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ClassOne*
 | 
					 | 
				
			||||||
NewClassOne() {
 | 
					 | 
				
			||||||
	return [ClassOne alloc];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
ClassOne_geti1(void* obj) {
 | 
					 | 
				
			||||||
	return [(id)obj geti1];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int*
 | 
					 | 
				
			||||||
ClassOne_getp1(void* obj) {
 | 
					 | 
				
			||||||
	return [(id)obj getp1];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
ClassOne_hi1(void* obj, struct stru in) {
 | 
					 | 
				
			||||||
	return [(id)obj hi1:in];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
int
 | 
					 | 
				
			||||||
ClassOne_hi2(void* obj, void* in) {
 | 
					 | 
				
			||||||
	return [(id)obj hi2:in];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
struct stru
 | 
					 | 
				
			||||||
ClassOne_nstru1(void* obj) {
 | 
					 | 
				
			||||||
	return [(id)obj nstru1];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
struct stru*
 | 
					 | 
				
			||||||
ClassOne_nstru2(void* obj) {
 | 
					 | 
				
			||||||
	return [(id)obj nstru2];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
ClassOne*
 | 
					 | 
				
			||||||
ClassOne_init(void* obj) {
 | 
					 | 
				
			||||||
	return [(id)obj init];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
import "C"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"unsafe"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//ClassOne*
 | 
					 | 
				
			||||||
type ClassOne struct { NSObject }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//NSObject*
 | 
					 | 
				
			||||||
type NSObject struct { ptr unsafe.Pointer }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//int
 | 
					 | 
				
			||||||
type Int C.int
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
//struct stru
 | 
					 | 
				
			||||||
type Stru C.struct_stru
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewClassOne() *ClassOne {
 | 
					 | 
				
			||||||
	ret := &ClassOne{}
 | 
					 | 
				
			||||||
	ret.ptr = unsafe.Pointer(C.NewClassOne())
 | 
					 | 
				
			||||||
	//ret = ret.Init()
 | 
					 | 
				
			||||||
	return ret
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Geti1() Int {
 | 
					 | 
				
			||||||
	return (Int)(C.ClassOne_geti1(o.ptr))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Getp1() *Int {
 | 
					 | 
				
			||||||
	return (*Int)(unsafe.Pointer(C.ClassOne_getp1(o.ptr)))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Hi1(in Stru) Int {
 | 
					 | 
				
			||||||
	return (Int)(C.ClassOne_hi1(o.ptr, (C.struct_stru)(in)))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Hi2(in *Stru) Int {
 | 
					 | 
				
			||||||
	return (Int)(C.ClassOne_hi2(o.ptr, unsafe.Pointer(in)))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Nstru1() Stru {
 | 
					 | 
				
			||||||
	return (Stru)(C.ClassOne_nstru1(o.ptr))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Nstru2() *Stru {
 | 
					 | 
				
			||||||
	return (*Stru)(unsafe.Pointer(C.ClassOne_nstru2(o.ptr)))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (o *ClassOne) Init() *ClassOne {
 | 
					 | 
				
			||||||
	ret := &ClassOne{}
 | 
					 | 
				
			||||||
	ret.ptr = unsafe.Pointer(C.ClassOne_init(o.ptr))
 | 
					 | 
				
			||||||
	return ret
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,85 @@
 | 
				
			||||||
package types
 | 
					package types
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Parsers for recognizing type names in C/Objective-C
 | 
					/* Parsers for recognizing type names in C/Objective-C
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type-name:
 | 
				
			||||||
 | 
						specifier-qualifier-list abstract-declarator<opt>
 | 
				
			||||||
 | 
					abstract-declarator:
 | 
				
			||||||
 | 
						pointer
 | 
				
			||||||
 | 
						pointer<opt> direct-abstract-declarator
 | 
				
			||||||
 | 
					direct-abstract-declarator:
 | 
				
			||||||
 | 
						( abstract-declarator )
 | 
				
			||||||
 | 
						direct-abstract-declarator<opt> [ type-qualifier-list<opt> assignment-expression<opt> ]
 | 
				
			||||||
 | 
						direct-abstract-declarator<opt> [ static type-qualifier-list<opt> assignment-expression ]
 | 
				
			||||||
 | 
						direct-abstract-declarator<opt> [ type-qualifier-list static assignment-expression ]
 | 
				
			||||||
 | 
						direct-abstract-declarator<opt> [ * ]
 | 
				
			||||||
 | 
						direct-abstract-declarator<opt> ( parameter-type-list<opt> )
 | 
				
			||||||
 | 
					pointer:
 | 
				
			||||||
 | 
						* type-qualifier-list<opt>
 | 
				
			||||||
 | 
						* type-qualifier-list<opt> pointer
 | 
				
			||||||
 | 
					parameter-type-list:
 | 
				
			||||||
 | 
						parameter-list
 | 
				
			||||||
 | 
						parameter-list , ...
 | 
				
			||||||
 | 
					parameter-list:
 | 
				
			||||||
 | 
						parameter-declaration
 | 
				
			||||||
 | 
						parameter-list , parameter-declaration
 | 
				
			||||||
 | 
					parameter-declaration:
 | 
				
			||||||
 | 
						declaration-specifiers declarator
 | 
				
			||||||
 | 
						declaration-specifiers abstract-declarator<opt>
 | 
				
			||||||
 | 
					type-qualifier-list:
 | 
				
			||||||
 | 
						type-qualifier
 | 
				
			||||||
 | 
						type-qualifier-list type-qualifier
 | 
				
			||||||
 | 
					specifier-qualifier-list:
 | 
				
			||||||
 | 
						type-specifier specifier-qualifier-list<opt>
 | 
				
			||||||
 | 
						type-qualifier specifier-qualifier-list<opt>
 | 
				
			||||||
 | 
					type-specifier:
 | 
				
			||||||
 | 
						void
 | 
				
			||||||
 | 
						char
 | 
				
			||||||
 | 
						short
 | 
				
			||||||
 | 
						int
 | 
				
			||||||
 | 
						long
 | 
				
			||||||
 | 
						float
 | 
				
			||||||
 | 
						double
 | 
				
			||||||
 | 
						signed
 | 
				
			||||||
 | 
						unsigned
 | 
				
			||||||
 | 
						_Bool
 | 
				
			||||||
 | 
						_Complex
 | 
				
			||||||
 | 
						struct-or-union-specifier
 | 
				
			||||||
 | 
						enum-specifier
 | 
				
			||||||
 | 
						typedef-name
 | 
				
			||||||
 | 
					type-qualifier:
 | 
				
			||||||
 | 
						const
 | 
				
			||||||
 | 
						restrict
 | 
				
			||||||
 | 
						volatile
 | 
				
			||||||
 | 
					struct-or-union-specifier:
 | 
				
			||||||
 | 
						// DON'T DO struct-or-union identifier<opt> { struct-declaration-list }
 | 
				
			||||||
 | 
						struct-or-union identifier
 | 
				
			||||||
 | 
					struct-or-union:
 | 
				
			||||||
 | 
						struct
 | 
				
			||||||
 | 
						union
 | 
				
			||||||
 | 
					struct-declaration-list:
 | 
				
			||||||
 | 
						struct-declaration
 | 
				
			||||||
 | 
						struct-declaration-list struct-declaration
 | 
				
			||||||
 | 
					struct-declaration:
 | 
				
			||||||
 | 
						specifier-qualifier-list struct-declarator-list ;
 | 
				
			||||||
 | 
					struct-declarator-list:
 | 
				
			||||||
 | 
						struct-declarator
 | 
				
			||||||
 | 
						struct-declarator-list , struct-declarator
 | 
				
			||||||
 | 
					struct-declarator:
 | 
				
			||||||
 | 
						declarator
 | 
				
			||||||
 | 
						declarator<opt>: constant-expression
 | 
				
			||||||
 | 
					identifier:
 | 
				
			||||||
 | 
						identifier-non-digit
 | 
				
			||||||
 | 
						identifier identifier-nondigit
 | 
				
			||||||
 | 
						identifier digit
 | 
				
			||||||
 | 
					identifier-nondigit:
 | 
				
			||||||
 | 
						nondigit
 | 
				
			||||||
 | 
						universal-character-name
 | 
				
			||||||
 | 
					nondigit:
 | 
				
			||||||
 | 
						_ [a-zA-Z]
 | 
				
			||||||
 | 
					digit:
 | 
				
			||||||
 | 
						[0-9]
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var TypeName func(s string, n *Node) (string, *Node)
 | 
					var TypeName func(s string, n *Node) (string, *Node)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -314,12 +314,13 @@ func (w *Wrapper) processTypes(tps []*types.Type) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (w *Wrapper) processType(tp *types.Type) {
 | 
					func (w *Wrapper) processType(tp *types.Type) {
 | 
				
			||||||
	gt := tp.GoType()
 | 
						bt := tp.BaseType()
 | 
				
			||||||
 | 
						gt := bt.GoType()
 | 
				
			||||||
	if gt == "" {
 | 
						if gt == "" {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if gt[0] == '*' {
 | 
						if gt[0] == '*' {
 | 
				
			||||||
		w.processType(tp.PointsTo())
 | 
							w.processType(bt.PointsTo())
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if w.Processed[gt] { return }
 | 
						if w.Processed[gt] { return }
 | 
				
			||||||
| 
						 | 
					@ -327,10 +328,10 @@ func (w *Wrapper) processType(tp *types.Type) {
 | 
				
			||||||
	if gt == "Char" {
 | 
						if gt == "Char" {
 | 
				
			||||||
		w.CharHelpers()
 | 
							w.CharHelpers()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if tp.IsFunction() {
 | 
						if bt.IsFunction() {
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	w.goTypes.WriteString(tp.GoTypeDecl())
 | 
						w.goTypes.WriteString(bt.GoTypeDecl())
 | 
				
			||||||
	super := types.Super(gt)
 | 
						super := types.Super(gt)
 | 
				
			||||||
	if super != "" {
 | 
						if super != "" {
 | 
				
			||||||
		types.Wrap(super)
 | 
							types.Wrap(super)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user