| %module nested_extend_c |
| |
| #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 |
| |
| %{ |
| #include "stdlib.h" |
| %} |
| |
| #if !defined(SWIGOCTAVE) && !defined(SWIG_JAVASCRIPT_V8) |
| %extend hiA { |
| hiA() { |
| union hiA *self = (union hiA *)malloc(sizeof(union hiA)); |
| self->c = 'h'; |
| return self; |
| } |
| char hi_extend() { |
| return $self->c; |
| } |
| static const long swig_size = sizeof(union hiA); |
| } |
| %extend lowA { |
| lowA() { |
| struct lowA *self = (struct lowA *)malloc(sizeof(struct lowA)); |
| self->name = 0; |
| self->num = 99; |
| return self; |
| } |
| int low_extend() { |
| return $self->num; |
| } |
| static const long swig_size = sizeof(struct lowA); |
| } |
| |
| %extend hiB { |
| hiB() { |
| union hiB *self = (union hiB *)malloc(sizeof(union hiB)); |
| self->c = 'h'; |
| return self; |
| } |
| char hi_extend() { |
| return $self->c; |
| } |
| static const long swig_size = sizeof(union hiB); |
| } |
| %extend lowB { |
| lowB() { |
| struct lowB *self = (struct lowB *)malloc(sizeof(struct lowB)); |
| self->name = 0; |
| self->num = 99; |
| return self; |
| } |
| int low_extend() { |
| return $self->num; |
| } |
| static const long swig_size = sizeof(struct lowB); |
| } |
| |
| %extend FOO_bar { |
| void bar_extend() { |
| $self->d = 1; |
| } |
| }; |
| %extend NestedA { |
| static const long swig_size = sizeof(struct NestedA); |
| } |
| |
| #endif |
| |
| %inline %{ |
| typedef struct NestedA { |
| int a; |
| union hiA { |
| char c; |
| int d; |
| } hiA_instance; |
| |
| struct lowA { |
| char *name; |
| int num; |
| } lowA_instance; |
| } NestedA; |
| |
| typedef struct { |
| int a; |
| union hiB { |
| char c; |
| int d; |
| } hiB_instance; |
| |
| struct lowB { |
| char *name; |
| int num; |
| } lowB_instance; |
| } NestedB; |
| |
| typedef struct { |
| int a; |
| union { |
| char c; |
| int d; |
| } bar; |
| } FOO; |
| |
| static struct { |
| int i; |
| } THING; |
| |
| int useThing() { |
| return THING.i; |
| } |
| %} |
| |