/* 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) %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++; } %}