mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-07 04:23:41 +00:00
cgo: add support for enum types
Enum types are implemented as named types (with possible accompanying typedefs as type aliases). The constants inside the enums are treated as Go constants like in the Go toolchain.
This commit is contained in:
committed by
Ron Evans
parent
82dc14b741
commit
dfa713040a
Vendored
+1
@@ -17,6 +17,7 @@ int globalStructSize = sizeof(globalStruct);
|
||||
short globalArray[3] = {5, 6, 7};
|
||||
joined_t globalUnion;
|
||||
int globalUnionSize = sizeof(globalUnion);
|
||||
option_t globalOption = optionG;
|
||||
|
||||
int fortytwo() {
|
||||
return 42;
|
||||
|
||||
Vendored
+18
@@ -75,6 +75,24 @@ func main() {
|
||||
println("n in chain:", list.n)
|
||||
list = (*C.list_t)(list.next)
|
||||
}
|
||||
|
||||
// named enum
|
||||
var _ C.enum_option = C.optionA
|
||||
var _ C.option_t = C.optionA
|
||||
println("option:", C.globalOption)
|
||||
println("option A:", C.optionA)
|
||||
println("option B:", C.optionB)
|
||||
println("option C:", C.optionC)
|
||||
println("option D:", C.optionD)
|
||||
println("option E:", C.optionE)
|
||||
println("option F:", C.optionF)
|
||||
println("option G:", C.optionG)
|
||||
|
||||
// anonymous enum
|
||||
var _ C.option2_t = C.option2A
|
||||
var _ C.option3_t = C.option3A
|
||||
println("option 2A:", C.option2A)
|
||||
println("option 3A:", C.option3A)
|
||||
}
|
||||
|
||||
func printUnion(union C.joined_t) C.joined_t {
|
||||
|
||||
Vendored
+19
@@ -47,6 +47,24 @@ void unionSetShort(short s);
|
||||
void unionSetFloat(float f);
|
||||
void unionSetData(short f0, short f1, short f2);
|
||||
|
||||
typedef enum option {
|
||||
optionA,
|
||||
optionB,
|
||||
optionC = -5,
|
||||
optionD,
|
||||
optionE = 10,
|
||||
optionF,
|
||||
optionG,
|
||||
} option_t;
|
||||
|
||||
typedef enum {
|
||||
option2A = 20,
|
||||
} option2_t;
|
||||
|
||||
typedef enum {
|
||||
option3A = 21,
|
||||
} option3_t;
|
||||
|
||||
// test globals and datatypes
|
||||
extern int global;
|
||||
extern int unusedGlobal;
|
||||
@@ -66,6 +84,7 @@ extern int globalStructSize;
|
||||
extern short globalArray[3];
|
||||
extern joined_t globalUnion;
|
||||
extern int globalUnionSize;
|
||||
extern option_t globalOption;
|
||||
|
||||
// test duplicate definitions
|
||||
int add(int a, int b);
|
||||
|
||||
Vendored
+10
@@ -35,3 +35,13 @@ struct: 3 5
|
||||
n in chain: 3
|
||||
n in chain: 6
|
||||
n in chain: 7
|
||||
option: 12
|
||||
option A: 0
|
||||
option B: 1
|
||||
option C: -5
|
||||
option D: -4
|
||||
option E: 10
|
||||
option F: 11
|
||||
option G: 12
|
||||
option 2A: 20
|
||||
option 3A: 21
|
||||
|
||||
Reference in New Issue
Block a user