%module r_copy_struct %feature("opaque", "yes") B; %feature("opaque", "yes") C; %inline %{ struct A { int i; unsigned int ui; double d; char* str; int **tmp; }; struct A getA(); struct A* getARef(); typedef struct { int invisible; } B; struct C { int invisible; double blind; }; typedef B C; B* getBRef(); struct C* getCRef(); C* getCCRef(); typedef struct { int x; double u; } D; struct A getA() { struct A a; a.i = 10; a.d = 3.1415; return a; } static struct A fixed = {20, 3, 42.0, 0, 0}; struct A * getARef() { return(&fixed); } static B bb = {101}; B* getBRef() { return(&bb); } struct C cc = {201, 3.14159}; struct C * getCRef() { return(&cc); } C* getCCRef() { return(&bb); } D bar() { D a; a.x = 1; a.u = 0; return(a); } %}