Skip to content

Commit

Permalink
cgo: implement Go arrays (constant arrays in C)
Browse files Browse the repository at this point in the history
  • Loading branch information
aykevl authored and deadprogram committed Apr 17, 2019
1 parent 684543b commit 5360869
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 0 deletions.
10 changes: 10 additions & 0 deletions loader/libclang.go
Original file line number Diff line number Diff line change
Expand Up @@ -268,6 +268,16 @@ func (info *fileInfo) makeASTType(typ C.CXType) ast.Expr {
Star: info.importCPos,
X: info.makeASTType(C.clang_getPointeeType(typ)),
}
case C.CXType_ConstantArray:
return &ast.ArrayType{
Lbrack: info.importCPos,
Len: &ast.BasicLit{
ValuePos: info.importCPos,
Kind: token.INT,
Value: strconv.FormatInt(int64(C.clang_getArraySize(typ)), 10),
},
Elt: info.makeASTType(C.clang_getElementType(typ)),
}
case C.CXType_FunctionProto:
// Be compatible with gc, which uses the *[0]byte type for function
// pointer types.
Expand Down
1 change: 1 addition & 0 deletions testdata/cgo/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ _Complex float globalComplexFloat = 4.1+3.3i;
_Complex double globalComplexDouble = 4.2+3.4i;
_Complex double globalComplexLongDouble = 4.3+3.5i;
collection_t globalStruct = {256, -123456, 3.14};
short globalArray[3] = {5, 6, 7};

int fortytwo() {
return 42;
Expand Down
2 changes: 2 additions & 0 deletions testdata/cgo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ func main() {
println("complex double:", C.globalComplexDouble)
println("complex long double:", C.globalComplexLongDouble)
println("struct:", C.globalStruct.s, C.globalStruct.l, C.globalStruct.f)
var _ [3]C.short = C.globalArray
println("array:", C.globalArray[0], C.globalArray[1], C.globalArray[2])
}

//export mul
Expand Down
1 change: 1 addition & 0 deletions testdata/cgo/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ extern _Complex float globalComplexFloat;
extern _Complex double globalComplexDouble;
extern _Complex double globalComplexLongDouble;
extern collection_t globalStruct;
extern short globalArray[3];

// test duplicate definitions
int add(int a, int b);
Expand Down

0 comments on commit 5360869

Please sign in to comment.