mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/cgo: bug fixes
* disallow embedding of C type (Fixes issue 2552) * detect 0-length array (Fixes issue 2806) * use typedefs when possible, to avoid attribute((unavailable)) (Fixes issue 2888) * print Go types constructed from C types using original C types (Fixes issue 2612) This fix changes _cgo_export.h to repeat the preamble from import "C". Otherwise the fix to issue 2612 is impossible, since it cannot refer to types that have not been defined. If people are using //export and putting non-header information in the preamble, they will need to refactor their code. R=golang-dev, r, r CC=golang-dev https://golang.org/cl/5672080
This commit is contained in:
parent
72fb81eeb6
commit
1a0c8fe9bb
14 changed files with 157 additions and 35 deletions
|
|
@ -39,6 +39,7 @@ type Package struct {
|
|||
Decl []ast.Decl
|
||||
GoFiles []string // list of Go files
|
||||
GccFiles []string // list of gcc output files
|
||||
Preamble string // collected preamble for _cgo_export.h
|
||||
}
|
||||
|
||||
// A File collects information about a single Go input file.
|
||||
|
|
@ -98,6 +99,7 @@ type Type struct {
|
|||
C *TypeRepr
|
||||
Go ast.Expr
|
||||
EnumValues map[string]int64
|
||||
Typedef string
|
||||
}
|
||||
|
||||
// A FuncType collects information about a function type in both the C and Go worlds.
|
||||
|
|
@ -312,6 +314,9 @@ func (p *Package) Record(f *File) {
|
|||
}
|
||||
}
|
||||
|
||||
p.ExpFunc = append(p.ExpFunc, f.ExpFunc...)
|
||||
if f.ExpFunc != nil {
|
||||
p.ExpFunc = append(p.ExpFunc, f.ExpFunc...)
|
||||
p.Preamble += "\n" + f.Preamble
|
||||
}
|
||||
p.Decl = append(p.Decl, f.AST.Decls...)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue