wxruby3 0.9.0 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/wxruby3/include/wxruby-runtime.h +3 -0
- data/ext/wxruby3/swig/common.i +22 -0
- data/ext/wxruby3/swig/custom/director.swg +296 -0
- data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
- data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
- data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
- data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
- data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
- data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
- data/ext/wxruby3/swig/wx.i +50 -30
- data/lib/wx/core/const.rb +83 -0
- data/lib/wx/doc/const.rb +66 -66
- data/lib/wx/doc/event.rb +0 -6
- data/lib/wx/doc/functions.rb +9 -9
- data/lib/wx/doc/window.rb +5 -0
- data/lib/wx/keyword_defs.rb +43 -6
- data/lib/wx/version.rb +1 -1
- data/rakelib/lib/config/macosx.rb +1 -1
- data/rakelib/lib/core/include/funcall.inc +33 -14
- data/rakelib/lib/core/include/swigdirector.inc +384 -0
- data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
- data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
- data/rakelib/lib/core/include/swigrun.inc +700 -0
- data/rakelib/lib/core/package.rb +5 -2
- data/rakelib/lib/core/parameter.rb +3 -0
- data/rakelib/lib/director/accelerator.rb +1 -1
- data/rakelib/lib/director/animation.rb +1 -1
- data/rakelib/lib/director/animation_ctrl.rb +20 -0
- data/rakelib/lib/director/app.rb +23 -5
- data/rakelib/lib/director/art_provider.rb +1 -1
- data/rakelib/lib/director/data_object_simple_base.rb +1 -2
- data/rakelib/lib/director/dialog.rb +5 -0
- data/rakelib/lib/director/dialup_event.rb +44 -0
- data/rakelib/lib/director/dialup_manager.rb +45 -0
- data/rakelib/lib/director/event.rb +20 -2
- data/rakelib/lib/director/file_ctrl.rb +35 -0
- data/rakelib/lib/director/file_ctrl_event.rb +26 -0
- data/rakelib/lib/director/gdicommon.rb +19 -1
- data/rakelib/lib/director/grid_cell_editor.rb +6 -6
- data/rakelib/lib/director/help_controller.rb +1 -1
- data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
- data/rakelib/lib/director/pgeditor.rb +2 -2
- data/rakelib/lib/director/pgproperties.rb +2 -2
- data/rakelib/lib/director/richtext_buffer.rb +1 -1
- data/rakelib/lib/director/richtext_ctrl.rb +1 -1
- data/rakelib/lib/director/sash_event.rb +42 -0
- data/rakelib/lib/director/sizer.rb +64 -1
- data/rakelib/lib/director/sizer_item.rb +22 -0
- data/rakelib/lib/director/task_bar_icon.rb +1 -1
- data/rakelib/lib/director/tree_ctrl.rb +19 -44
- data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
- data/rakelib/lib/generate/doc/events.yaml +10 -4
- data/rakelib/lib/generate/doc/static_box.yaml +8 -0
- data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
- data/rakelib/lib/generate/doc.rb +14 -3
- data/rakelib/lib/generate/interface.rb +4 -3
- data/rakelib/lib/specs/interfaces.rb +5 -1
- data/rakelib/lib/swig_runner.rb +4 -50
- data/rakelib/lib/typemap/common.rb +24 -9
- data/rakelib/lib/typemap/data_format.rb +1 -1
- data/rakelib/lib/typemap/data_object_data.rb +2 -2
- data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
- data/rakelib/lib/typemap/points_list.rb +5 -7
- data/rakelib/lib/util/string.rb +10 -8
- data/samples/text/richtext.rb +0 -30
- data/tests/test_app_exit_exception.rb +36 -0
- data/tests/test_app_init_exception.rb +20 -0
- data/tests/test_book_controls.rb +29 -0
- data/tests/test_exceptions.rb +41 -0
- data/tests/test_sizer.rb +43 -0
- data/tests/test_std_controls.rb +36 -0
- metadata +25 -4
- data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
@@ -1,58 +1,134 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
* This file contains the runtime support for Ruby modules
|
5
|
-
* and includes code for managing global variables and pointer
|
6
|
-
* type checking.
|
7
|
-
* ----------------------------------------------------------------------------- */
|
8
|
-
|
9
|
-
/* For backward compatibility only */
|
10
|
-
#define SWIG_POINTER_EXCEPTION 0
|
11
|
-
|
12
|
-
/* for raw pointers */
|
13
|
-
#define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_Ruby_ConvertPtrAndOwn(obj, pptr, type, flags, 0)
|
14
|
-
#define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_Ruby_ConvertPtrAndOwn(obj, pptr, type, flags, own)
|
15
|
-
#define SWIG_NewPointerObj(ptr, type, flags) SWIG_Ruby_NewPointerObj(ptr, type, flags)
|
16
|
-
#define SWIG_AcquirePtr(ptr, own) SWIG_Ruby_AcquirePtr(ptr, own)
|
17
|
-
#define swig_owntype swig_ruby_owntype
|
18
|
-
|
19
|
-
/* for raw packed data */
|
20
|
-
#define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_Ruby_ConvertPacked(obj, ptr, sz, ty, flags)
|
21
|
-
#define SWIG_NewPackedObj(ptr, sz, type) SWIG_Ruby_NewPackedObj(ptr, sz, type)
|
1
|
+
// Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
//
|
3
|
+
// This software is released under the MIT license.
|
22
4
|
|
23
|
-
|
24
|
-
#define SWIG_ConvertInstance(obj, pptr, type, flags) SWIG_ConvertPtr(obj, pptr, type, flags)
|
25
|
-
#define SWIG_NewInstanceObj(ptr, type, flags) SWIG_NewPointerObj(ptr, type, flags)
|
5
|
+
// SWIG Ruby runtime
|
26
6
|
|
27
|
-
/*
|
28
|
-
#define SWIG_ConvertFunctionPtr(obj, pptr, type) SWIG_ConvertPtr(obj, pptr, type, 0)
|
29
|
-
#define SWIG_NewFunctionPtrObj(ptr, type) SWIG_NewPointerObj(ptr, type, 0)
|
7
|
+
/* From rubytracking.swg */
|
30
8
|
|
31
|
-
|
32
|
-
|
33
|
-
#
|
34
|
-
|
35
|
-
|
36
|
-
|
9
|
+
#ifdef __cplusplus
|
10
|
+
extern "C" {
|
11
|
+
#endif
|
12
|
+
// Shared custom swig tracking functions
|
13
|
+
WXRB_EXPORT_FLAG void wxRuby_AddTracking(void* ptr, VALUE object);
|
14
|
+
WXRB_EXPORT_FLAG VALUE wxRuby_FindTracking(void* ptr);
|
15
|
+
WXRB_EXPORT_FLAG void wxRuby_RemoveTracking(void* ptr);
|
16
|
+
WXRB_EXPORT_FLAG void wxRuby_IterateTracking( void(*meth)(void* ptr, VALUE obj) );
|
17
|
+
/* Setup a Ruby hash table to store Trackings - mostly done in wx.i */
|
18
|
+
SWIGRUNTIMEINLINE void SWIG_RubyInitializeTrackings(void)
|
19
|
+
{
|
20
|
+
// no-op
|
21
|
+
}
|
22
|
+
/* Add a Tracking from a C/C++ struct to a Ruby object */
|
23
|
+
SWIGRUNTIMEINLINE void SWIG_RubyAddTracking(void* ptr, VALUE object)
|
24
|
+
{
|
25
|
+
wxRuby_AddTracking(ptr, object);
|
26
|
+
}
|
27
|
+
/* Get the Ruby object that owns the specified C/C++ struct */
|
28
|
+
SWIGRUNTIMEINLINE VALUE SWIG_RubyInstanceFor(void* ptr)
|
29
|
+
{
|
30
|
+
return wxRuby_FindTracking(ptr);
|
31
|
+
}
|
32
|
+
/* Remove a Tracking from a C/C++ struct to a Ruby object. It
|
33
|
+
is very important to remove objects once they are destroyed
|
34
|
+
since the same memory address may be reused later to create
|
35
|
+
a new object. */
|
36
|
+
SWIGRUNTIMEINLINE void SWIG_RubyRemoveTracking(void* ptr)
|
37
|
+
{
|
38
|
+
wxRuby_RemoveTracking(ptr);
|
39
|
+
}
|
40
|
+
/* This is a helper method that unlinks a Ruby object from its
|
41
|
+
underlying C++ object. This is needed if the lifetime of the
|
42
|
+
Ruby object is longer than the C++ object */
|
43
|
+
SWIGRUNTIMEINLINE void SWIG_RubyUnlinkObjects(void* ptr)
|
44
|
+
{
|
45
|
+
VALUE object = SWIG_RubyInstanceFor(ptr);
|
46
|
+
if (object != Qnil)
|
47
|
+
{
|
48
|
+
DATA_PTR(object) = 0;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
#ifdef __cplusplus
|
52
|
+
}
|
53
|
+
#endif
|
37
54
|
|
38
|
-
|
39
|
-
#define SWIG_SetModule(clientdata, pointer) SWIG_Ruby_SetModule(pointer)
|
55
|
+
/* From rubyapi.swg */
|
40
56
|
|
57
|
+
#ifdef __cplusplus
|
58
|
+
extern "C" {
|
59
|
+
#endif
|
41
60
|
|
42
|
-
|
61
|
+
WXRB_EXPORT_FLAG VALUE
|
62
|
+
SWIG_Ruby_AppendOutput(VALUE target, VALUE o)
|
63
|
+
{
|
64
|
+
if (NIL_P(target))
|
65
|
+
{
|
66
|
+
target = o;
|
67
|
+
}
|
68
|
+
else
|
69
|
+
{
|
70
|
+
if (TYPE(target) != T_ARRAY)
|
71
|
+
{
|
72
|
+
VALUE o2 = target;
|
73
|
+
target = rb_ary_new();
|
74
|
+
rb_ary_push(target, o2);
|
75
|
+
}
|
76
|
+
rb_ary_push(target, o);
|
77
|
+
}
|
78
|
+
return target;
|
79
|
+
}
|
43
80
|
|
44
|
-
#
|
45
|
-
|
46
|
-
#
|
81
|
+
#ifdef __cplusplus
|
82
|
+
}
|
83
|
+
#endif
|
47
84
|
|
85
|
+
/*
|
86
|
+
* The following macros are used for providing the correct type of a
|
87
|
+
* function pointer to the Ruby C API.
|
88
|
+
*
|
89
|
+
* Starting with Ruby 2.7 these macros act transparently due to Ruby's moving
|
90
|
+
* moving away from ANYARGS and instead employing strict function signatures.
|
91
|
+
*
|
92
|
+
* Note: In case of C (not C++) the macros are transparent even before
|
93
|
+
* Ruby 2.7 due to the fact that the Ruby C API used function declarators
|
94
|
+
* with empty parentheses, which allows for an unspecified number of
|
95
|
+
* arguments.
|
96
|
+
*
|
97
|
+
* PROTECTFUNC(f) is used for the function pointer argument of the Ruby
|
98
|
+
* C API function rb_protect().
|
99
|
+
*
|
100
|
+
* VALUEFUNC(f) is used for the function pointer argument(s) of Ruby C API
|
101
|
+
* functions like rb_define_method() and rb_define_singleton_method().
|
102
|
+
*
|
103
|
+
* VOIDFUNC(f) is used to typecast a C function that implements either
|
104
|
+
* the "mark" or "free" stuff for a Ruby Data object, so that it can be
|
105
|
+
* passed as an argument to Ruby C API functions like Data_Wrap_Struct()
|
106
|
+
* and Data_Make_Struct().
|
107
|
+
*
|
108
|
+
* SWIG_RUBY_VOID_ANYARGS_FUNC(f) is used for the function pointer
|
109
|
+
* argument(s) of Ruby C API functions like rb_define_virtual_variable().
|
110
|
+
*
|
111
|
+
* SWIG_RUBY_INT_ANYARGS_FUNC(f) is used for the function pointer
|
112
|
+
* argument(s) of Ruby C API functions like st_foreach().
|
113
|
+
*/
|
114
|
+
#if defined(__cplusplus) && RUBY_API_VERSION_CODE < 20700
|
115
|
+
# define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
|
116
|
+
# define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
|
117
|
+
# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
|
118
|
+
# define SWIG_RUBY_VOID_ANYARGS_FUNC(f) ((void (*)(ANYARGS))(f))
|
119
|
+
# define SWIG_RUBY_INT_ANYARGS_FUNC(f) ((int (*)(ANYARGS))(f))
|
120
|
+
#else
|
121
|
+
# define PROTECTFUNC(f) (f)
|
122
|
+
# define VALUEFUNC(f) (f)
|
123
|
+
# define VOIDFUNC(f) (f)
|
124
|
+
# define SWIG_RUBY_VOID_ANYARGS_FUNC(f) (f)
|
125
|
+
# define SWIG_RUBY_INT_ANYARGS_FUNC(f) (f)
|
126
|
+
#endif
|
48
127
|
|
49
|
-
|
128
|
+
#define SWIG_MangleStr(value) SWIG_Ruby_MangleStr(value)
|
129
|
+
#define SWIG_CheckConvert(value, ty) SWIG_Ruby_CheckConvert(value, ty)
|
50
130
|
|
51
|
-
|
52
|
-
#define SWIG_define_class(ty) SWIG_Ruby_define_class(ty)
|
53
|
-
#define SWIG_NewClassInstance(value, ty) SWIG_Ruby_NewClassInstance(value, ty)
|
54
|
-
#define SWIG_MangleStr(value) SWIG_Ruby_MangleStr(value)
|
55
|
-
#define SWIG_CheckConvert(value, ty) SWIG_Ruby_CheckConvert(value, ty)
|
131
|
+
static VALUE _mSWIG = Qnil;
|
56
132
|
|
57
133
|
#include "assert.h"
|
58
134
|
|
@@ -64,7 +140,8 @@
|
|
64
140
|
extern "C" {
|
65
141
|
#endif
|
66
142
|
|
67
|
-
typedef struct
|
143
|
+
typedef struct WXRB_EXPORT_FLAG swig_class
|
144
|
+
{
|
68
145
|
VALUE klass;
|
69
146
|
VALUE mImpl;
|
70
147
|
void (*mark)(void *);
|
@@ -72,7 +149,6 @@ typedef struct {
|
|
72
149
|
int trackObjects;
|
73
150
|
} swig_class;
|
74
151
|
|
75
|
-
|
76
152
|
/* Global pointer used to keep some internal SWIG stuff */
|
77
153
|
static VALUE _cSWIG_Pointer = Qnil;
|
78
154
|
static VALUE swig_runtime_data_type_pointer = Qnil;
|
@@ -83,9 +159,9 @@ static ID swig_call_id = 0;
|
|
83
159
|
|
84
160
|
/*
|
85
161
|
If your swig extension is to be run within an embedded ruby and has
|
86
|
-
director callbacks, you should set -DRUBY_EMBEDDED during compilation.
|
87
|
-
This will reset ruby's stack frame on each entry point from the main
|
88
|
-
program the first time a virtual director function is invoked (in a
|
162
|
+
director callbacks, you should set -DRUBY_EMBEDDED during compilation.
|
163
|
+
This will reset ruby's stack frame on each entry point from the main
|
164
|
+
program the first time a virtual director function is invoked (in a
|
89
165
|
non-recursive way).
|
90
166
|
If this is not done, you run the risk of Ruby trashing the stack.
|
91
167
|
*/
|
@@ -111,36 +187,43 @@ static ID swig_call_id = 0;
|
|
111
187
|
#endif /* RUBY_EMBEDDED */
|
112
188
|
|
113
189
|
|
114
|
-
SWIGRUNTIME VALUE
|
115
|
-
getExceptionClass(void)
|
190
|
+
SWIGRUNTIME VALUE
|
191
|
+
getExceptionClass(void)
|
192
|
+
{
|
116
193
|
static int init = 0;
|
117
194
|
static VALUE rubyExceptionClass ;
|
118
|
-
if (!init)
|
195
|
+
if (!init)
|
196
|
+
{
|
119
197
|
init = 1;
|
120
198
|
rubyExceptionClass = rb_const_get(_mSWIG, rb_intern("Exception"));
|
121
199
|
}
|
122
200
|
return rubyExceptionClass;
|
123
|
-
}
|
201
|
+
}
|
124
202
|
|
125
203
|
/* This code checks to see if the Ruby object being raised as part
|
126
204
|
of an exception inherits from the Ruby class Exception. If so,
|
127
205
|
the object is simply returned. If not, then a new Ruby exception
|
128
206
|
object is created and that will be returned to Ruby.*/
|
129
|
-
|
130
|
-
SWIG_Ruby_ExceptionType(swig_type_info *desc, VALUE obj)
|
207
|
+
WXRB_EXPORT_FLAG VALUE
|
208
|
+
SWIG_Ruby_ExceptionType(swig_type_info *desc, VALUE obj)
|
209
|
+
{
|
131
210
|
VALUE exceptionClass = getExceptionClass();
|
132
|
-
if (rb_obj_is_kind_of(obj, exceptionClass))
|
211
|
+
if (rb_obj_is_kind_of(obj, exceptionClass))
|
212
|
+
{
|
133
213
|
return obj;
|
134
|
-
}
|
214
|
+
}
|
215
|
+
else
|
216
|
+
{
|
135
217
|
return rb_exc_new3(rb_eRuntimeError, rb_obj_as_string(obj));
|
136
218
|
}
|
137
219
|
}
|
138
220
|
|
139
221
|
/* Initialize Ruby runtime support */
|
140
|
-
|
222
|
+
WXRB_EXPORT_FLAG void
|
141
223
|
SWIG_Ruby_InitRuntime(void)
|
142
224
|
{
|
143
|
-
if (_mSWIG == Qnil)
|
225
|
+
if (_mSWIG == Qnil)
|
226
|
+
{
|
144
227
|
_mSWIG = rb_define_module("SWIG");
|
145
228
|
swig_call_id = rb_intern("call");
|
146
229
|
swig_arity_id = rb_intern("arity");
|
@@ -148,12 +231,13 @@ SWIG_Ruby_InitRuntime(void)
|
|
148
231
|
}
|
149
232
|
|
150
233
|
/* Define Ruby class for C type */
|
151
|
-
|
234
|
+
WXRB_EXPORT_FLAG void
|
152
235
|
SWIG_Ruby_define_class(swig_type_info *type)
|
153
236
|
{
|
154
237
|
char *klass_name = (char *) malloc(4 + strlen(type->name) + 1);
|
155
238
|
sprintf(klass_name, "TYPE%s", type->name);
|
156
|
-
if (NIL_P(_cSWIG_Pointer))
|
239
|
+
if (NIL_P(_cSWIG_Pointer))
|
240
|
+
{
|
157
241
|
_cSWIG_Pointer = rb_define_class_under(_mSWIG, "Pointer", rb_cObject);
|
158
242
|
rb_undef_method(CLASS_OF(_cSWIG_Pointer), "new");
|
159
243
|
}
|
@@ -162,10 +246,10 @@ SWIG_Ruby_define_class(swig_type_info *type)
|
|
162
246
|
}
|
163
247
|
|
164
248
|
/* Create a new pointer object */
|
165
|
-
|
249
|
+
WXRB_EXPORT_FLAG VALUE
|
166
250
|
SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
|
167
251
|
{
|
168
|
-
int own = flags & SWIG_POINTER_OWN;
|
252
|
+
int own = flags & SWIG_POINTER_OWN;
|
169
253
|
int track;
|
170
254
|
char *klass_name;
|
171
255
|
swig_class *sklass;
|
@@ -176,38 +260,47 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
|
|
176
260
|
return Qnil;
|
177
261
|
|
178
262
|
assert(type);
|
179
|
-
if (type->clientdata)
|
263
|
+
if (type->clientdata)
|
264
|
+
{
|
180
265
|
sklass = (swig_class *) type->clientdata;
|
181
|
-
|
266
|
+
|
182
267
|
/* Are we tracking this class and have we already returned this Ruby object? */
|
183
268
|
track = sklass->trackObjects;
|
184
|
-
if (track)
|
269
|
+
if (track)
|
270
|
+
{
|
185
271
|
obj = SWIG_RubyInstanceFor(ptr);
|
186
272
|
|
187
273
|
/* Check the object's type and make sure it has the correct type.
|
188
|
-
It might not in cases where methods do things like
|
274
|
+
It might not in cases where methods do things like
|
189
275
|
downcast methods. */
|
190
|
-
if (obj != Qnil)
|
276
|
+
if (obj != Qnil)
|
277
|
+
{
|
278
|
+
// wxRuby : Note that we also track non-SWIG types so the return
|
279
|
+
// value might be nil
|
191
280
|
VALUE value = rb_iv_get(obj, "@__swigtype__");
|
192
|
-
|
193
|
-
|
194
|
-
if (
|
281
|
+
|
282
|
+
// wxRuby : allow returning tracked objects of derived classes
|
283
|
+
if (!NIL_P(value) && rb_obj_is_kind_of(obj, sklass->klass))
|
284
|
+
{
|
195
285
|
return obj;
|
196
286
|
}
|
197
287
|
}
|
198
288
|
}
|
199
289
|
|
200
290
|
/* Create a new Ruby object */
|
201
|
-
obj = Data_Wrap_Struct(sklass->klass, VOIDFUNC(sklass->mark),
|
202
|
-
( own ? VOIDFUNC(sklass->destroy) :
|
291
|
+
obj = Data_Wrap_Struct(sklass->klass, VOIDFUNC(sklass->mark),
|
292
|
+
( own ? VOIDFUNC(sklass->destroy) :
|
203
293
|
(track ? VOIDFUNC(SWIG_RubyRemoveTracking) : 0 )
|
204
294
|
), ptr);
|
205
295
|
|
206
296
|
/* If tracking is on for this class then track this object. */
|
207
|
-
if (track)
|
297
|
+
if (track)
|
298
|
+
{
|
208
299
|
SWIG_RubyAddTracking(ptr, obj);
|
209
300
|
}
|
210
|
-
}
|
301
|
+
}
|
302
|
+
else
|
303
|
+
{
|
211
304
|
klass_name = (char *) malloc(4 + strlen(type->name) + 1);
|
212
305
|
sprintf(klass_name, "TYPE%s", type->name);
|
213
306
|
klass = rb_const_get(_mSWIG, rb_intern(klass_name));
|
@@ -220,7 +313,7 @@ SWIG_Ruby_NewPointerObj(void *ptr, swig_type_info *type, int flags)
|
|
220
313
|
}
|
221
314
|
|
222
315
|
/* Create a new class instance (always owned) */
|
223
|
-
|
316
|
+
WXRB_EXPORT_FLAG VALUE
|
224
317
|
SWIG_Ruby_NewClassInstance(VALUE klass, swig_type_info *type)
|
225
318
|
{
|
226
319
|
VALUE obj;
|
@@ -231,7 +324,7 @@ SWIG_Ruby_NewClassInstance(VALUE klass, swig_type_info *type)
|
|
231
324
|
}
|
232
325
|
|
233
326
|
/* Get type mangle from class name */
|
234
|
-
|
327
|
+
WXRB_EXPORT_FLAG char *
|
235
328
|
SWIG_Ruby_MangleStr(VALUE obj)
|
236
329
|
{
|
237
330
|
VALUE stype = rb_iv_get(obj, "@__swigtype__");
|
@@ -241,15 +334,18 @@ SWIG_Ruby_MangleStr(VALUE obj)
|
|
241
334
|
}
|
242
335
|
|
243
336
|
/* Acquire a pointer value */
|
244
|
-
typedef struct
|
337
|
+
typedef struct WXRB_EXPORT_FLAG swig_ruby_owntype
|
338
|
+
{
|
245
339
|
void (*datafree)(void *);
|
246
340
|
int own;
|
247
341
|
} swig_ruby_owntype;
|
248
342
|
|
249
|
-
|
250
|
-
SWIG_Ruby_AcquirePtr(VALUE obj, swig_ruby_owntype own)
|
343
|
+
WXRB_EXPORT_FLAG swig_ruby_owntype
|
344
|
+
SWIG_Ruby_AcquirePtr(VALUE obj, swig_ruby_owntype own)
|
345
|
+
{
|
251
346
|
swig_ruby_owntype oldown = {0, 0};
|
252
|
-
if (TYPE(obj) == T_DATA && !RTYPEDDATA_P(obj))
|
347
|
+
if (TYPE(obj) == T_DATA && !RTYPEDDATA_P(obj))
|
348
|
+
{
|
253
349
|
oldown.datafree = RDATA(obj)->dfree;
|
254
350
|
RDATA(obj)->dfree = own.datafree;
|
255
351
|
}
|
@@ -257,7 +353,7 @@ SWIG_Ruby_AcquirePtr(VALUE obj, swig_ruby_owntype own) {
|
|
257
353
|
}
|
258
354
|
|
259
355
|
/* Convert a pointer value */
|
260
|
-
|
356
|
+
WXRB_EXPORT_FLAG int
|
261
357
|
SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags, swig_ruby_owntype *own)
|
262
358
|
{
|
263
359
|
char *c;
|
@@ -265,71 +361,94 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags,
|
|
265
361
|
void *vptr = 0;
|
266
362
|
|
267
363
|
/* Grab the pointer */
|
268
|
-
if (NIL_P(obj))
|
364
|
+
if (NIL_P(obj))
|
365
|
+
{
|
269
366
|
if (ptr)
|
270
367
|
*ptr = 0;
|
271
368
|
return (flags & SWIG_POINTER_NO_NULL) ? SWIG_NullReferenceError : SWIG_OK;
|
272
|
-
}
|
273
|
-
|
369
|
+
}
|
370
|
+
else
|
371
|
+
{
|
372
|
+
if (TYPE(obj) != T_DATA || (TYPE(obj) == T_DATA && RTYPEDDATA_P(obj)))
|
373
|
+
{
|
274
374
|
return SWIG_ERROR;
|
275
375
|
}
|
276
376
|
Data_Get_Struct(obj, void, vptr);
|
277
377
|
}
|
278
|
-
|
279
|
-
if (own)
|
378
|
+
|
379
|
+
if (own)
|
380
|
+
{
|
280
381
|
own->datafree = RDATA(obj)->dfree;
|
281
382
|
own->own = 0;
|
282
383
|
}
|
283
384
|
|
284
385
|
/* Check to see if the input object is giving up ownership
|
285
386
|
of the underlying C struct or C++ object. If so then we
|
286
|
-
need to reset the destructor since the Ruby object no
|
287
|
-
longer owns the underlying C++ object.*/
|
288
|
-
if (flags & SWIG_POINTER_DISOWN)
|
387
|
+
need to reset the destructor since the Ruby object no
|
388
|
+
longer owns the underlying C++ object.*/
|
389
|
+
if (flags & SWIG_POINTER_DISOWN)
|
390
|
+
{
|
289
391
|
/* Is tracking on for this class? */
|
290
392
|
int track = 0;
|
291
|
-
if (ty && ty->clientdata)
|
393
|
+
if (ty && ty->clientdata)
|
394
|
+
{
|
292
395
|
swig_class *sklass = (swig_class *) ty->clientdata;
|
293
396
|
track = sklass->trackObjects;
|
294
397
|
}
|
295
398
|
|
296
|
-
if (track)
|
399
|
+
if (track)
|
400
|
+
{
|
297
401
|
/* We are tracking objects for this class. Thus we change the destructor
|
298
402
|
* to SWIG_RubyRemoveTracking. This allows us to
|
299
403
|
* remove the mapping from the C++ to Ruby object
|
300
404
|
* when the Ruby object is garbage collected. If we don't
|
301
|
-
* do this, then it is possible we will return a reference
|
405
|
+
* do this, then it is possible we will return a reference
|
302
406
|
* to a Ruby object that no longer exists thereby crashing Ruby. */
|
303
407
|
RDATA(obj)->dfree = SWIG_RubyRemoveTracking;
|
304
|
-
}
|
408
|
+
}
|
409
|
+
else
|
410
|
+
{
|
305
411
|
RDATA(obj)->dfree = 0;
|
306
412
|
}
|
307
413
|
}
|
308
414
|
|
309
415
|
/* Do type-checking if type info was provided */
|
310
|
-
if (ty)
|
311
|
-
|
312
|
-
|
313
|
-
|
416
|
+
if (ty)
|
417
|
+
{
|
418
|
+
if (ty->clientdata)
|
419
|
+
{
|
420
|
+
if (rb_obj_is_kind_of(obj, ((swig_class *) (ty->clientdata))->klass))
|
421
|
+
{
|
422
|
+
if (vptr == 0)
|
423
|
+
{
|
314
424
|
/* The object has already been deleted */
|
315
425
|
return SWIG_ObjectPreviouslyDeletedError;
|
316
426
|
}
|
317
427
|
}
|
318
428
|
}
|
319
|
-
if ((c = SWIG_MangleStr(obj)) == NULL)
|
429
|
+
if ((c = SWIG_MangleStr(obj)) == NULL)
|
430
|
+
{
|
320
431
|
return SWIG_ERROR;
|
321
432
|
}
|
322
433
|
tc = SWIG_TypeCheck(c, ty);
|
323
|
-
if (!tc)
|
434
|
+
if (!tc)
|
435
|
+
{
|
324
436
|
return SWIG_ERROR;
|
325
|
-
}
|
326
|
-
|
327
|
-
|
437
|
+
}
|
438
|
+
else
|
439
|
+
{
|
440
|
+
if (ptr)
|
441
|
+
{
|
442
|
+
if (tc->type == ty)
|
443
|
+
{
|
328
444
|
*ptr = vptr;
|
329
|
-
}
|
445
|
+
}
|
446
|
+
else
|
447
|
+
{
|
330
448
|
int newmemory = 0;
|
331
449
|
*ptr = SWIG_TypeCast(tc, vptr, &newmemory);
|
332
|
-
if (newmemory == SWIG_CAST_NEW_MEMORY)
|
450
|
+
if (newmemory == SWIG_CAST_NEW_MEMORY)
|
451
|
+
{
|
333
452
|
assert(own); /* badly formed typemap which will lead to a memory leak - it must set and use own to delete *ptr */
|
334
453
|
if (own)
|
335
454
|
own->own = own->own | SWIG_CAST_NEW_MEMORY;
|
@@ -337,16 +456,18 @@ SWIG_Ruby_ConvertPtrAndOwn(VALUE obj, void **ptr, swig_type_info *ty, int flags,
|
|
337
456
|
}
|
338
457
|
}
|
339
458
|
}
|
340
|
-
}
|
459
|
+
}
|
460
|
+
else
|
461
|
+
{
|
341
462
|
if (ptr)
|
342
463
|
*ptr = vptr;
|
343
464
|
}
|
344
|
-
|
465
|
+
|
345
466
|
return SWIG_OK;
|
346
467
|
}
|
347
468
|
|
348
469
|
/* Check convert */
|
349
|
-
|
470
|
+
WXRB_EXPORT_FLAG int
|
350
471
|
SWIG_Ruby_CheckConvert(VALUE obj, swig_type_info *ty)
|
351
472
|
{
|
352
473
|
char *c = SWIG_MangleStr(obj);
|
@@ -354,8 +475,9 @@ SWIG_Ruby_CheckConvert(VALUE obj, swig_type_info *ty)
|
|
354
475
|
return SWIG_TypeCheck(c,ty) != 0;
|
355
476
|
}
|
356
477
|
|
357
|
-
|
358
|
-
SWIG_Ruby_NewPackedObj(void *ptr, int sz, swig_type_info *type)
|
478
|
+
WXRB_EXPORT_FLAG VALUE
|
479
|
+
SWIG_Ruby_NewPackedObj(void *ptr, int sz, swig_type_info *type)
|
480
|
+
{
|
359
481
|
char result[1024];
|
360
482
|
char *r = result;
|
361
483
|
if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
|
@@ -366,8 +488,9 @@ SWIG_Ruby_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
|
|
366
488
|
}
|
367
489
|
|
368
490
|
/* Convert a packed pointer value */
|
369
|
-
|
370
|
-
SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty)
|
491
|
+
WXRB_EXPORT_FLAG int
|
492
|
+
SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty)
|
493
|
+
{
|
371
494
|
swig_cast_info *tc;
|
372
495
|
const char *c;
|
373
496
|
|
@@ -377,7 +500,8 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
|
|
377
500
|
if (*c != '_') goto type_error;
|
378
501
|
c++;
|
379
502
|
c = SWIG_UnpackData(c, ptr, sz);
|
380
|
-
if (ty)
|
503
|
+
if (ty)
|
504
|
+
{
|
381
505
|
tc = SWIG_TypeCheck(c, ty);
|
382
506
|
if (!tc) goto type_error;
|
383
507
|
}
|
@@ -387,7 +511,7 @@ SWIG_Ruby_ConvertPacked(VALUE obj, void *ptr, int sz, swig_type_info *ty) {
|
|
387
511
|
return SWIG_ERROR;
|
388
512
|
}
|
389
513
|
|
390
|
-
|
514
|
+
WXRB_EXPORT_FLAG swig_module_info *
|
391
515
|
SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
|
392
516
|
{
|
393
517
|
VALUE pointer;
|
@@ -396,10 +520,11 @@ SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
|
|
396
520
|
|
397
521
|
/* temporarily disable warnings, since the pointer check causes warnings with 'ruby -w' */
|
398
522
|
rb_gv_set("VERBOSE", Qfalse);
|
399
|
-
|
523
|
+
|
400
524
|
/* first check if pointer already created */
|
401
525
|
pointer = rb_gv_get("$swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME);
|
402
|
-
if (pointer != Qnil)
|
526
|
+
if (pointer != Qnil)
|
527
|
+
{
|
403
528
|
Data_Get_Struct(pointer, swig_module_info, ret);
|
404
529
|
}
|
405
530
|
|
@@ -408,7 +533,7 @@ SWIG_Ruby_GetModule(void *SWIGUNUSEDPARM(clientdata))
|
|
408
533
|
return ret;
|
409
534
|
}
|
410
535
|
|
411
|
-
|
536
|
+
WXRB_EXPORT_FLAG void
|
412
537
|
SWIG_Ruby_SetModule(swig_module_info *pointer)
|
413
538
|
{
|
414
539
|
/* register a new class */
|
@@ -426,7 +551,7 @@ SWIG_Ruby_SetModule(swig_module_info *pointer)
|
|
426
551
|
$result = SWIG_Ruby_isCallable( $input );
|
427
552
|
}
|
428
553
|
*/
|
429
|
-
|
554
|
+
WXRB_EXPORT_FLAG
|
430
555
|
int SWIG_Ruby_isCallable( VALUE proc )
|
431
556
|
{
|
432
557
|
if ( rb_respond_to( proc, swig_call_id ) )
|
@@ -439,7 +564,7 @@ int SWIG_Ruby_isCallable( VALUE proc )
|
|
439
564
|
Valid arities will be that equal to minimal or those < 0
|
440
565
|
which indicate a variable number of parameters at the end.
|
441
566
|
*/
|
442
|
-
|
567
|
+
WXRB_EXPORT_FLAG
|
443
568
|
int SWIG_Ruby_arity( VALUE proc, int minimal )
|
444
569
|
{
|
445
570
|
if ( rb_respond_to( proc, swig_arity_id ) )
|