diff --git a/examples/foundation/main.go b/examples/foundation/main.go deleted file mode 100644 index a61638f..0000000 --- a/examples/foundation/main.go +++ /dev/null @@ -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") -} - diff --git a/examples/simple/ClassOne/main.go b/examples/simple/ClassOne/main.go deleted file mode 100644 index 0017ffe..0000000 --- a/examples/simple/ClassOne/main.go +++ /dev/null @@ -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 -} - diff --git a/types/cparser.go b/types/cparser.go index 25eea8a..9719419 100644 --- a/types/cparser.go +++ b/types/cparser.go @@ -1,6 +1,85 @@ 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 +abstract-declarator: + pointer + pointer direct-abstract-declarator +direct-abstract-declarator: + ( abstract-declarator ) + direct-abstract-declarator [ type-qualifier-list assignment-expression ] + direct-abstract-declarator [ static type-qualifier-list assignment-expression ] + direct-abstract-declarator [ type-qualifier-list static assignment-expression ] + direct-abstract-declarator [ * ] + direct-abstract-declarator ( parameter-type-list ) +pointer: + * type-qualifier-list + * type-qualifier-list 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 +type-qualifier-list: + type-qualifier + type-qualifier-list type-qualifier +specifier-qualifier-list: + type-specifier specifier-qualifier-list + type-qualifier specifier-qualifier-list +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 { 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: 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) diff --git a/wrap/main.go b/wrap/main.go index 1765653..0dbffeb 100644 --- a/wrap/main.go +++ b/wrap/main.go @@ -314,12 +314,13 @@ func (w *Wrapper) processTypes(tps []*types.Type) { } func (w *Wrapper) processType(tp *types.Type) { - gt := tp.GoType() + bt := tp.BaseType() + gt := bt.GoType() if gt == "" { return } if gt[0] == '*' { - w.processType(tp.PointsTo()) + w.processType(bt.PointsTo()) return } if w.Processed[gt] { return } @@ -327,10 +328,10 @@ func (w *Wrapper) processType(tp *types.Type) { if gt == "Char" { w.CharHelpers() } - if tp.IsFunction() { + if bt.IsFunction() { return } - w.goTypes.WriteString(tp.GoTypeDecl()) + w.goTypes.WriteString(bt.GoTypeDecl()) super := types.Super(gt) if super != "" { types.Wrap(super)