diff --git a/cmd/gogensig/convert/_testdata/receiver/conf/llcppg.cfg b/cmd/gogensig/convert/_testdata/receiver/conf/llcppg.cfg new file mode 100644 index 00000000..c509b09c --- /dev/null +++ b/cmd/gogensig/convert/_testdata/receiver/conf/llcppg.cfg @@ -0,0 +1,5 @@ +{ + "name": "comment", + "include": ["temp.h","use.h"], + "cplusplus":false +} diff --git a/cmd/gogensig/convert/_testdata/receiver/conf/llcppg.symb.json b/cmd/gogensig/convert/_testdata/receiver/conf/llcppg.symb.json new file mode 100644 index 00000000..afd2c42f --- /dev/null +++ b/cmd/gogensig/convert/_testdata/receiver/conf/llcppg.symb.json @@ -0,0 +1,7 @@ +[ + { + "mangle": "ares_dns_addr_to_ptr", + "c++": "ares_dns_addr_to_ptr(const struct ares_addr *)", + "go": "(*aresAddr).AresDnsAddrToPtr" + } +] diff --git a/cmd/gogensig/convert/_testdata/receiver/gogensig.expect b/cmd/gogensig/convert/_testdata/receiver/gogensig.expect new file mode 100644 index 00000000..58333eab --- /dev/null +++ b/cmd/gogensig/convert/_testdata/receiver/gogensig.expect @@ -0,0 +1,43 @@ +===== temp.go ===== +package receiver + +import ( + "github.com/goplus/llgo/c" + _ "unsafe" +) + +type X__Uint32T c.Uint +type InAddrT X__Uint32T + +type InAddr struct { + SAddr InAddrT +} + +type AresIn6Addr struct { + X_S6Un struct { + X_S6U8 [16]int8 + } +} + +===== use.go ===== +package receiver + +import _ "unsafe" + +type AresAddr struct { + Family c.Int + Addr struct { + Addr6 AresIn6Addr + } +} +// llgo:link (*aresAddr).AresDnsAddrToPtr C.ares_dns_addr_to_ptr +func (p *AresAddr) AresDnsAddrToPtr() *int8 { + return nil +} + +===== llcppg.pub ===== +__uint32_t X__Uint32T +ares_addr AresAddr +ares_in6_addr AresIn6Addr +in_addr InAddr +in_addr_t InAddrT \ No newline at end of file diff --git a/cmd/gogensig/convert/_testdata/receiver/hfile/temp.h b/cmd/gogensig/convert/_testdata/receiver/hfile/temp.h new file mode 100644 index 00000000..d265b65f --- /dev/null +++ b/cmd/gogensig/convert/_testdata/receiver/hfile/temp.h @@ -0,0 +1,22 @@ +typedef unsigned int __uint32_t; +typedef __uint32_t in_addr_t; +struct in_addr { + in_addr_t s_addr; +}; + +struct ares_in6_addr { + union { + unsigned char _S6_u8[16]; + } _S6_un; +}; + +struct ares_addr { + int family; + + union { + struct in_addr addr4; + struct ares_in6_addr addr6; + } addr; +}; + +#include "use.h" diff --git a/cmd/gogensig/convert/_testdata/receiver/hfile/use.h b/cmd/gogensig/convert/_testdata/receiver/hfile/use.h new file mode 100644 index 00000000..6fb852af --- /dev/null +++ b/cmd/gogensig/convert/_testdata/receiver/hfile/use.h @@ -0,0 +1,2 @@ + +char *ares_dns_addr_to_ptr(const struct ares_addr *addr); diff --git a/cmd/gogensig/convert/type.go b/cmd/gogensig/convert/type.go index c7705bbc..abf42224 100644 --- a/cmd/gogensig/convert/type.go +++ b/cmd/gogensig/convert/type.go @@ -211,9 +211,13 @@ func (p *TypeConv) ToSignature(funcType *ast.FuncType, recv *types.Var) (*types. ctx := p.ctx p.ctx = Param defer func() { p.ctx = ctx }() - params, variadic, err := p.fieldListToParams(funcType.Params) + var params *types.Tuple + var variadic bool + var err error if recv != nil { params, variadic, err = p.fieldListToParams(&ast.FieldList{List: funcType.Params.List[1:]}) + } else { + params, variadic, err = p.fieldListToParams(funcType.Params) } if err != nil { return nil, err