Support for unions
This commit is contained in:
parent
cb1c7f28cb
commit
dfe06fd9d4
7 changed files with 112 additions and 50 deletions
|
|
@ -1,35 +1,51 @@
|
|||
#include "test.h"
|
||||
|
||||
int test_call_int() {
|
||||
return 5;
|
||||
return 5;
|
||||
}
|
||||
|
||||
#ifdef FORCE
|
||||
struct STRUCT1 _test_call_int_param_(int param1) {
|
||||
struct STRUCT1 _test_call_param_(int param1) {
|
||||
struct STRUCT1 s;
|
||||
|
||||
|
||||
s.field1 = param1;
|
||||
|
||||
|
||||
return s;
|
||||
}
|
||||
#endif
|
||||
|
||||
STRUCT2 test_call_int_param2(int param1, STRUCT2 param2) {
|
||||
STRUCT2 test_call_param2(int param1, STRUCT2 param2) {
|
||||
STRUCT2 s;
|
||||
|
||||
|
||||
s.field1 = param1 + param2.field1;
|
||||
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
STRUCT2 test_call_int_param3(int param1, struct STRUCT1 param2) {
|
||||
STRUCT2 test_call_param3(int param1, struct STRUCT1 param2) {
|
||||
STRUCT2 s;
|
||||
|
||||
|
||||
s.field1 = param1 + param2.field1;
|
||||
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
ENUM2 test_call_int_param4(enum ENUM param1) {
|
||||
ENUM2 test_call_param4(enum ENUM param1) {
|
||||
return enum4;
|
||||
}
|
||||
|
||||
union UNION1 test_call_param5(float param1) {
|
||||
union UNION1 u;
|
||||
|
||||
u.field2 = param1;
|
||||
|
||||
return u;
|
||||
}
|
||||
|
||||
unsigned char test_call_param6(UNION2 param1) {
|
||||
return param1.field2;
|
||||
}
|
||||
|
||||
int test_call_param7(union UNION1 param1) {
|
||||
return param1.field1;
|
||||
}
|
||||
|
|
@ -36,8 +36,21 @@ typedef struct {
|
|||
int *field;
|
||||
} STRUCT4;
|
||||
|
||||
union UNION1 {
|
||||
int field1;
|
||||
float field2;
|
||||
};
|
||||
|
||||
typedef union {
|
||||
double field1;
|
||||
unsigned char field2;
|
||||
} UNION2;
|
||||
|
||||
int test_call_int();
|
||||
struct STRUCT1 _test_call_int_param_(int param1);
|
||||
STRUCT2 test_call_int_param2(int param1, STRUCT2 param2);
|
||||
STRUCT2 test_call_int_param3(int param1, struct STRUCT1 param2);
|
||||
ENUM2 test_call_int_param4(enum ENUM param1);
|
||||
struct STRUCT1 _test_call_param_(int param1);
|
||||
STRUCT2 test_call_param2(int param1, STRUCT2 param2);
|
||||
STRUCT2 test_call_param3(int param1, struct STRUCT1 param2);
|
||||
ENUM2 test_call_param4(enum ENUM param1);
|
||||
union UNION1 test_call_param5(float param1);
|
||||
unsigned char test_call_param6(UNION2 param1);
|
||||
int test_call_param7(union UNION1 param1);
|
||||
|
|
@ -28,6 +28,9 @@ var
|
|||
vptr: VOIDPTR
|
||||
iptr: INTPTR
|
||||
|
||||
u: UNION1
|
||||
u2: UNION2
|
||||
|
||||
pt = 3
|
||||
ct = 4
|
||||
|
||||
|
|
@ -38,10 +41,16 @@ s3.field1 = 7
|
|||
e = enum1
|
||||
e2 = enum4
|
||||
|
||||
u2.field2 = 'c'
|
||||
|
||||
check test_call_int() == 5
|
||||
check test_call_int_param(5).field1 == 5
|
||||
check test_call_int_param2(5, s2).field1 == 11
|
||||
check test_call_int_param3(5, s).field1 == 10
|
||||
check test_call_int_param4(e) == e2
|
||||
check test_call_param(5).field1 == 5
|
||||
check test_call_param2(5, s2).field1 == 11
|
||||
check test_call_param3(5, s).field1 == 10
|
||||
check test_call_param4(e) == e2
|
||||
check test_call_param5(5.0).field2 == 5.0
|
||||
check test_call_param6(u2) == 'c'
|
||||
u.field1 = 4
|
||||
check test_call_param7(u) == 4
|
||||
|
||||
cAddStdDir()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue