mirror of https://github.com/swig/swig
127 lines
2.2 KiB
OpenEdge ABL
127 lines
2.2 KiB
OpenEdge ABL
/*
|
|
This testcase tests that nested structs/unions work. Named structs/unions declared within
|
|
a struct produced redefinition errors in SWIG 1.3.6 as reported by SF bug #447488.
|
|
Also tests reported error when a #define placed in a deeply embedded struct/union.
|
|
*/
|
|
|
|
%module nested
|
|
|
|
|
|
#if defined(SWIGSCILAB)
|
|
%rename(OutStNamed) OuterStructNamed;
|
|
%rename(InStNamed) OuterStructNamed::InnerStructNamed;
|
|
%rename(InUnNamed) OuterStructNamed::Inner_union_named;
|
|
#endif
|
|
|
|
#if defined(SWIG_JAVASCRIPT_V8) || defined(SWIG_JAVASCRIPT_NAPI)
|
|
|
|
%inline %{
|
|
#if __GNUC__ >= 5 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)
|
|
/* for nested C class wrappers compiled as C++ code */
|
|
/* dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] */
|
|
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
|
|
#endif
|
|
%}
|
|
|
|
#endif
|
|
|
|
%inline %{
|
|
|
|
struct TestStruct {
|
|
int a;
|
|
};
|
|
|
|
struct OuterStructNamed {
|
|
struct InnerStructNamed {
|
|
double dd;
|
|
} inner_struct_named;
|
|
union InnerUnionNamed {
|
|
double ee;
|
|
int ff;
|
|
} inner_union_named;
|
|
};
|
|
|
|
%}
|
|
|
|
|
|
%inline %{
|
|
|
|
struct OutStUnnamed {
|
|
struct {
|
|
double xx;
|
|
} inSt;
|
|
union {
|
|
double yy;
|
|
int zz;
|
|
} inUn;
|
|
};
|
|
|
|
typedef struct OutSt {
|
|
union {
|
|
|
|
struct nst_st {
|
|
union in_un {
|
|
#define BAD_STYLE 1
|
|
int red;
|
|
struct TestStruct green;
|
|
} InUn;
|
|
|
|
struct in_st {
|
|
int blue;
|
|
} InSt;
|
|
} NstdSt;
|
|
|
|
} EmbedUn;
|
|
} OutSt;
|
|
|
|
%}
|
|
|
|
|
|
%inline %{
|
|
typedef struct {
|
|
union x_union {
|
|
int x;
|
|
} duplicate_p;
|
|
} x_t;
|
|
|
|
typedef struct {
|
|
union y_union {
|
|
int y;
|
|
} duplicate_p;
|
|
} y_t;
|
|
|
|
typedef struct A {
|
|
union a_union {
|
|
int a;
|
|
} duplicate_p;
|
|
} a_t;
|
|
|
|
typedef struct B {
|
|
union b_union {
|
|
int b;
|
|
} duplicate_p;
|
|
} b_t;
|
|
|
|
typedef struct {
|
|
union {
|
|
int c;
|
|
} duplicate_p;
|
|
} c_t;
|
|
|
|
typedef struct {
|
|
union {
|
|
int d;
|
|
} duplicate_p;
|
|
} d_t;
|
|
|
|
void set_union_values(int startval, x_t *x, y_t *y, a_t *a, b_t *b, c_t *c, d_t *d) {
|
|
x->duplicate_p.x = startval++;
|
|
y->duplicate_p.y = startval++;
|
|
a->duplicate_p.a = startval++;
|
|
b->duplicate_p.b = startval++;
|
|
c->duplicate_p.c = startval++;
|
|
d->duplicate_p.d = startval++;
|
|
}
|
|
%}
|
|
|