]> Cypherpunks repositories - gostls13.git/commitdiff
cgo: handle C99 bool type
authorDevon H. O'Dell <devon.odell@gmail.com>
Wed, 13 Jan 2010 18:25:28 +0000 (10:25 -0800)
committerRuss Cox <rsc@golang.org>
Wed, 13 Jan 2010 18:25:28 +0000 (10:25 -0800)
Fixes #307.

R=rsc
CC=golang-dev
https://golang.org/cl/186073

src/cmd/cgo/gcc.go

index dd6223ea7760342c78c3572a0fad3ad0f2e5bf75..4f65a1afb7295cc2b3c7df7e58d2b822f3ef4be3 100644 (file)
@@ -329,6 +329,7 @@ type typeConv struct {
        typedef map[string]ast.Expr
 
        // Predeclared types.
+       bool                                   ast.Expr
        byte                                   ast.Expr // denotes padding
        int8, int16, int32, int64              ast.Expr
        uint8, uint16, uint32, uint64, uintptr ast.Expr
@@ -346,6 +347,7 @@ func (c *typeConv) Init(ptrSize int64) {
        c.ptrSize = ptrSize
        c.m = make(map[dwarf.Type]*Type)
        c.typedef = make(map[string]ast.Expr)
+       c.bool = c.Ident("bool")
        c.byte = c.Ident("byte")
        c.int8 = c.Ident("int8")
        c.int16 = c.Ident("int16")
@@ -443,6 +445,10 @@ func (c *typeConv) Type(dtype dwarf.Type) *Type {
                gt.Elt = sub.Go
                t.C = fmt.Sprintf("typeof(%s[%d])", sub.C, dt.Count)
 
+       case *dwarf.BoolType:
+               t.Go = c.bool
+               t.Align = c.ptrSize
+
        case *dwarf.CharType:
                if t.Size != 1 {
                        fatal("unexpected: %d-byte char type - %s", t.Size, dtype)
@@ -613,7 +619,7 @@ func (c *typeConv) Type(dtype dwarf.Type) *Type {
        }
 
        switch dtype.(type) {
-       case *dwarf.AddrType, *dwarf.CharType, *dwarf.IntType, *dwarf.FloatType, *dwarf.UcharType, *dwarf.UintType:
+       case *dwarf.AddrType, *dwarf.BoolType, *dwarf.CharType, *dwarf.IntType, *dwarf.FloatType, *dwarf.UcharType, *dwarf.UintType:
                s := dtype.Common().Name
                if s != "" {
                        if ss, ok := cnameMap[s]; ok {