summaryrefslogtreecommitdiff
path: root/Examples/test-suite/nested_extend_c.i
blob: f1d7ff2c8f92fed9cc7ce3a2b79eb6e776e69576 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
%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

#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;
}
%}