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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b5236fc5965ca7cb7f44f6ffa69c74af04529217c2ac85178b04b719781407c
|
4
|
+
data.tar.gz: 745d4f4b7b6168a764d47dfa640128666a57922bf90c9d43757a7726ae4d3c75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 613f0bce684a98834ddc99031b1dbe0cb4aa04448d8f88aa20dd1cf71c938d3539e0e26ec46a096373a83fc2c542f73d9163ca0e1be2428c3854a583f3e974da
|
7
|
+
data.tar.gz: 888271b35ed4a18bd776c8249ae5bc83ec51ec7930d1b58954e829da508ceb500fcf14e0340009a0410c2e009a5ffbf99109a5a22a447ca52b00982d722800e3
|
@@ -62,6 +62,9 @@ WXRUBY_EXPORT bool GC_IsWindowDeleted(void *ptr);
|
|
62
62
|
WXRUBY_EXPORT swig_type_info* wxRuby_GetSwigTypeForClass(VALUE cls);
|
63
63
|
WXRUBY_EXPORT swig_type_info* wxRuby_GetSwigTypeForClassName(const char* clsname);
|
64
64
|
WXRUBY_EXPORT void wxRuby_SetSwigTypeForClass(VALUE cls, swig_type_info* ty);
|
65
|
+
// and wx class names -> Ruby class
|
66
|
+
WXRUBY_EXPORT void wxRuby_SetRbClassForWxName(const wxString& wx_name, VALUE cls);
|
67
|
+
WXRUBY_EXPORT VALUE wxRuby_GetRbClassForWxName(const wxString& wx_name);
|
65
68
|
|
66
69
|
// Common wrapping functions
|
67
70
|
WXRUBY_EXPORT VALUE wxRuby_WrapWxObjectInRuby(wxObject* obj);
|
data/ext/wxruby3/swig/common.i
CHANGED
@@ -13,6 +13,28 @@
|
|
13
13
|
%feature("compactdefaultargs");
|
14
14
|
%feature("flatnested");
|
15
15
|
|
16
|
+
%exception {
|
17
|
+
try {
|
18
|
+
$action
|
19
|
+
}
|
20
|
+
catch (const Swig::DirectorException& swigex) {
|
21
|
+
if (rb_obj_is_kind_of(swigex.getError(), rb_eException))
|
22
|
+
{
|
23
|
+
rb_exc_raise(swigex.getError());
|
24
|
+
}
|
25
|
+
else
|
26
|
+
{
|
27
|
+
rb_raise(swigex.getError(), swigex.what());
|
28
|
+
}
|
29
|
+
}
|
30
|
+
catch (const std::exception& ex) {
|
31
|
+
rb_raise(rb_eRuntimeError, "Unexpected C++ exception: %s", ex.what());
|
32
|
+
}
|
33
|
+
catch (...) {
|
34
|
+
rb_raise(rb_eRuntimeError, "Unexpected UNKNOWN exception");
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
16
38
|
%begin %{
|
17
39
|
/*
|
18
40
|
* Since SWIG does not provide readily usable export macros
|
@@ -0,0 +1,296 @@
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
2
|
+
* director.swg
|
3
|
+
*
|
4
|
+
* This file contains support for director classes so that Ruby proxy
|
5
|
+
* methods can be called from C++.
|
6
|
+
*
|
7
|
+
* Customized for wxRuby3.
|
8
|
+
* Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
9
|
+
*
|
10
|
+
* This software is released under the MIT license.
|
11
|
+
* ----------------------------------------------------------------------------- */
|
12
|
+
|
13
|
+
// fixed
|
14
|
+
#ifndef SWIG_DIRECTOR_NOUEH
|
15
|
+
#define SWIG_DIRECTOR_NOUEH
|
16
|
+
#endif
|
17
|
+
|
18
|
+
#include <string>
|
19
|
+
#include <iostream>
|
20
|
+
#include <exception>
|
21
|
+
#include <map>
|
22
|
+
|
23
|
+
# define SWIG_DIRECTOR_CAST(ARG) dynamic_cast<Swig::Director *>(ARG)
|
24
|
+
|
25
|
+
namespace Swig {
|
26
|
+
|
27
|
+
/* memory handler */
|
28
|
+
struct WXRUBY_EXPORT GCItem
|
29
|
+
{
|
30
|
+
virtual ~GCItem();
|
31
|
+
|
32
|
+
virtual swig_ruby_owntype get_own() const;
|
33
|
+
};
|
34
|
+
|
35
|
+
struct WXRUBY_EXPORT GCItem_var
|
36
|
+
{
|
37
|
+
GCItem_var(GCItem *item = 0) : _item(item) {}
|
38
|
+
|
39
|
+
GCItem_var& operator=(GCItem *item);
|
40
|
+
|
41
|
+
~GCItem_var()
|
42
|
+
{
|
43
|
+
delete _item;
|
44
|
+
}
|
45
|
+
|
46
|
+
GCItem *operator->() const
|
47
|
+
{
|
48
|
+
return _item;
|
49
|
+
}
|
50
|
+
|
51
|
+
private:
|
52
|
+
GCItem *_item;
|
53
|
+
};
|
54
|
+
|
55
|
+
template <typename Type>
|
56
|
+
struct GCItem_T : GCItem
|
57
|
+
{
|
58
|
+
GCItem_T(Type *ptr) : _ptr(ptr) {}
|
59
|
+
|
60
|
+
virtual ~GCItem_T()
|
61
|
+
{
|
62
|
+
delete _ptr;
|
63
|
+
}
|
64
|
+
|
65
|
+
private:
|
66
|
+
Type *_ptr;
|
67
|
+
};
|
68
|
+
|
69
|
+
struct WXRUBY_EXPORT GCItem_Object : GCItem
|
70
|
+
{
|
71
|
+
GCItem_Object(swig_ruby_owntype own) : _own(own) {}
|
72
|
+
|
73
|
+
virtual ~GCItem_Object() {}
|
74
|
+
|
75
|
+
swig_ruby_owntype get_own() const
|
76
|
+
{
|
77
|
+
return _own;
|
78
|
+
}
|
79
|
+
|
80
|
+
private:
|
81
|
+
swig_ruby_owntype _own;
|
82
|
+
};
|
83
|
+
|
84
|
+
template <typename Type>
|
85
|
+
struct GCArray_T : GCItem
|
86
|
+
{
|
87
|
+
GCArray_T(Type *ptr) : _ptr(ptr) {}
|
88
|
+
|
89
|
+
virtual ~GCArray_T()
|
90
|
+
{
|
91
|
+
delete[] _ptr;
|
92
|
+
}
|
93
|
+
|
94
|
+
private:
|
95
|
+
Type *_ptr;
|
96
|
+
};
|
97
|
+
|
98
|
+
/* Base class for director exceptions */
|
99
|
+
class WXRUBY_EXPORT DirectorException : public std::exception
|
100
|
+
{
|
101
|
+
protected:
|
102
|
+
VALUE swig_error;
|
103
|
+
std::string swig_msg;
|
104
|
+
protected:
|
105
|
+
DirectorException(VALUE error) : swig_error(error) {}
|
106
|
+
|
107
|
+
DirectorException(VALUE error, const char *hdr, const char *msg ="");
|
108
|
+
|
109
|
+
void setup_error(VALUE error);
|
110
|
+
|
111
|
+
public:
|
112
|
+
virtual ~DirectorException() throw();
|
113
|
+
|
114
|
+
VALUE getType() const
|
115
|
+
{
|
116
|
+
return CLASS_OF(swig_error);
|
117
|
+
}
|
118
|
+
|
119
|
+
VALUE getError() const
|
120
|
+
{
|
121
|
+
return swig_error;
|
122
|
+
}
|
123
|
+
|
124
|
+
/* Deprecated, use what() instead */
|
125
|
+
const std::string& getMessage() const
|
126
|
+
{
|
127
|
+
return swig_msg;
|
128
|
+
}
|
129
|
+
|
130
|
+
const char *what() const throw()
|
131
|
+
{
|
132
|
+
return swig_msg.c_str();
|
133
|
+
}
|
134
|
+
};
|
135
|
+
|
136
|
+
/* Type mismatch in the return value from a Ruby method call */
|
137
|
+
class WXRUBY_EXPORT DirectorTypeMismatchException : public DirectorException
|
138
|
+
{
|
139
|
+
public:
|
140
|
+
DirectorTypeMismatchException(VALUE error, const char *msg="")
|
141
|
+
: DirectorException(error, "SWIG director type mismatch", msg)
|
142
|
+
{}
|
143
|
+
|
144
|
+
DirectorTypeMismatchException(const char *msg="")
|
145
|
+
: DirectorException(rb_eTypeError, "SWIG director type mismatch", msg)
|
146
|
+
{}
|
147
|
+
|
148
|
+
DirectorTypeMismatchException(VALUE self, const char *method, VALUE error, const char *msg="");
|
149
|
+
|
150
|
+
static inline void raise(VALUE error, const char *msg)
|
151
|
+
{
|
152
|
+
throw DirectorTypeMismatchException(error, msg);
|
153
|
+
}
|
154
|
+
|
155
|
+
static inline void raise(const char *msg)
|
156
|
+
{
|
157
|
+
throw DirectorTypeMismatchException(msg);
|
158
|
+
}
|
159
|
+
|
160
|
+
static inline void raise(VALUE self, const char* method, VALUE error, const char *msg)
|
161
|
+
{
|
162
|
+
throw DirectorTypeMismatchException(self, method, error, msg);
|
163
|
+
}
|
164
|
+
};
|
165
|
+
|
166
|
+
/* Any Ruby exception that occurs during a director method call */
|
167
|
+
class WXRUBY_EXPORT DirectorMethodException : public DirectorException
|
168
|
+
{
|
169
|
+
public:
|
170
|
+
DirectorMethodException(VALUE error)
|
171
|
+
: DirectorException(error)
|
172
|
+
{}
|
173
|
+
|
174
|
+
DirectorMethodException(const char *msg = "")
|
175
|
+
: DirectorException(rb_eRuntimeError, "SWIG director method error.", msg)
|
176
|
+
{}
|
177
|
+
|
178
|
+
static void raise(VALUE error)
|
179
|
+
{
|
180
|
+
throw DirectorMethodException(error);
|
181
|
+
}
|
182
|
+
};
|
183
|
+
|
184
|
+
/* Attempted to call a pure virtual method via a director method */
|
185
|
+
class WXRUBY_EXPORT DirectorPureVirtualException : public DirectorException
|
186
|
+
{
|
187
|
+
public:
|
188
|
+
DirectorPureVirtualException(const char *msg = "")
|
189
|
+
: DirectorException(rb_eRuntimeError, "SWIG director pure virtual method called", msg)
|
190
|
+
{}
|
191
|
+
|
192
|
+
static void raise(const char *msg)
|
193
|
+
{
|
194
|
+
throw DirectorPureVirtualException(msg);
|
195
|
+
}
|
196
|
+
};
|
197
|
+
|
198
|
+
/* Simple thread abstraction for pthreads on win32 */
|
199
|
+
#ifdef __THREAD__
|
200
|
+
# define __PTHREAD__
|
201
|
+
# if defined(_WIN32) || defined(__WIN32__)
|
202
|
+
# define pthread_mutex_lock EnterCriticalSection
|
203
|
+
# define pthread_mutex_unlock LeaveCriticalSection
|
204
|
+
# define pthread_mutex_t CRITICAL_SECTION
|
205
|
+
# define SWIG_MUTEX_INIT(var) var
|
206
|
+
# else
|
207
|
+
# include <pthread.h>
|
208
|
+
# define SWIG_MUTEX_INIT(var) var = PTHREAD_MUTEX_INITIALIZER
|
209
|
+
# endif
|
210
|
+
#endif
|
211
|
+
|
212
|
+
#ifdef __PTHREAD__
|
213
|
+
struct Guard
|
214
|
+
{
|
215
|
+
pthread_mutex_t *_mutex;
|
216
|
+
|
217
|
+
Guard(pthread_mutex_t &mutex) : _mutex(&mutex)
|
218
|
+
{
|
219
|
+
pthread_mutex_lock(_mutex);
|
220
|
+
}
|
221
|
+
|
222
|
+
~Guard()
|
223
|
+
{
|
224
|
+
pthread_mutex_unlock(_mutex);
|
225
|
+
}
|
226
|
+
};
|
227
|
+
# define SWIG_GUARD(mutex) Guard _guard(mutex)
|
228
|
+
#else
|
229
|
+
# define SWIG_GUARD(mutex)
|
230
|
+
#endif
|
231
|
+
|
232
|
+
/* director base class */
|
233
|
+
class WXRUBY_EXPORT Director
|
234
|
+
{
|
235
|
+
private:
|
236
|
+
/* pointer to the wrapped Ruby object */
|
237
|
+
VALUE swig_self;
|
238
|
+
/* flag indicating whether the object is owned by Ruby or c++ */
|
239
|
+
mutable bool swig_disown_flag;
|
240
|
+
|
241
|
+
public:
|
242
|
+
/* wrap a Ruby object. */
|
243
|
+
Director(VALUE self);
|
244
|
+
|
245
|
+
/* discard our reference at destruction */
|
246
|
+
virtual ~Director();
|
247
|
+
|
248
|
+
/* return a pointer to the wrapped Ruby object */
|
249
|
+
VALUE swig_get_self() const
|
250
|
+
{
|
251
|
+
return swig_self;
|
252
|
+
}
|
253
|
+
|
254
|
+
/* acquire ownership of the wrapped Ruby object (the sense of "disown" is from Ruby) */
|
255
|
+
void swig_disown() const
|
256
|
+
{
|
257
|
+
if (!swig_disown_flag)
|
258
|
+
{
|
259
|
+
swig_disown_flag = true;
|
260
|
+
}
|
261
|
+
}
|
262
|
+
|
263
|
+
/* ownership management */
|
264
|
+
private:
|
265
|
+
typedef std::map<void *, GCItem_var> swig_ownership_map;
|
266
|
+
mutable swig_ownership_map swig_owner;
|
267
|
+
#ifdef __PTHREAD__
|
268
|
+
static pthread_mutex_t swig_mutex_own;
|
269
|
+
#endif
|
270
|
+
|
271
|
+
public:
|
272
|
+
template <typename Type>
|
273
|
+
void swig_acquire_ownership_array(Type *vptr) const
|
274
|
+
{
|
275
|
+
if (vptr)
|
276
|
+
{
|
277
|
+
SWIG_GUARD(swig_mutex_own);
|
278
|
+
swig_owner[vptr] = new GCArray_T<Type>(vptr);
|
279
|
+
}
|
280
|
+
}
|
281
|
+
|
282
|
+
template <typename Type>
|
283
|
+
void swig_acquire_ownership(Type *vptr) const
|
284
|
+
{
|
285
|
+
if (vptr)
|
286
|
+
{
|
287
|
+
SWIG_GUARD(swig_mutex_own);
|
288
|
+
swig_owner[vptr] = new GCItem_T<Type>(vptr);
|
289
|
+
}
|
290
|
+
}
|
291
|
+
|
292
|
+
void swig_acquire_ownership_obj(void *vptr, swig_ruby_owntype own) const;
|
293
|
+
|
294
|
+
swig_ruby_owntype swig_release_ownership(void *vptr) const;
|
295
|
+
};
|
296
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
2
|
+
* Ruby API portion that goes into the runtime
|
3
|
+
*
|
4
|
+
* Customized for wxRuby3.
|
5
|
+
* Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
6
|
+
*
|
7
|
+
* This software is released under the MIT license.
|
8
|
+
* ----------------------------------------------------------------------------- */
|
9
|
+
|
10
|
+
#ifdef __cplusplus
|
11
|
+
extern "C" {
|
12
|
+
#endif
|
13
|
+
|
14
|
+
WXRUBY_EXPORT VALUE
|
15
|
+
SWIG_Ruby_AppendOutput(VALUE target, VALUE o);
|
16
|
+
|
17
|
+
#ifdef __cplusplus
|
18
|
+
}
|
19
|
+
#endif
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
2
|
+
* error manipulation
|
3
|
+
*
|
4
|
+
* Customized for wxRuby3.
|
5
|
+
* Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
6
|
+
*
|
7
|
+
* This software is released under the MIT license.
|
8
|
+
* ----------------------------------------------------------------------------- */
|
9
|
+
|
10
|
+
|
11
|
+
/* Define some additional error types */
|
12
|
+
#define SWIG_ObjectPreviouslyDeletedError -100
|
13
|
+
|
14
|
+
|
15
|
+
/* Define custom exceptions for errors that do not map to existing Ruby
|
16
|
+
exceptions. Note this only works for C++ since a global cannot be
|
17
|
+
initialized by a function in C. For C, fallback to rb_eRuntimeError.*/
|
18
|
+
|
19
|
+
WXRUBY_EXPORT VALUE
|
20
|
+
getNullReferenceError(void);
|
21
|
+
|
22
|
+
WXRUBY_EXPORT VALUE
|
23
|
+
getObjectPreviouslyDeletedError(void);
|
24
|
+
|
25
|
+
WXRUBY_EXPORT VALUE
|
26
|
+
SWIG_Ruby_ErrorType(int SWIG_code);
|
27
|
+
|
28
|
+
/* This function is called when a user inputs a wrong argument to
|
29
|
+
a method.
|
30
|
+
*/
|
31
|
+
WXRUBY_EXPORT
|
32
|
+
const char* Ruby_Format_TypeError( const char* msg,
|
33
|
+
const char* type,
|
34
|
+
const char* name,
|
35
|
+
const int argn,
|
36
|
+
VALUE input );
|
37
|
+
|
38
|
+
/* This function is called when an overloaded method fails */
|
39
|
+
WXRUBY_EXPORT
|
40
|
+
void Ruby_Format_OverloadedError(
|
41
|
+
const int argc,
|
42
|
+
const int maxargs,
|
43
|
+
const char* method,
|
44
|
+
const char* prototypes
|
45
|
+
);
|
@@ -0,0 +1,192 @@
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
2
|
+
* rubyhead.swg
|
3
|
+
*
|
4
|
+
* Customized for wxRuby3.
|
5
|
+
* Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
6
|
+
*
|
7
|
+
* This software is released under the MIT license.
|
8
|
+
* ----------------------------------------------------------------------------- */
|
9
|
+
#if __GNUC__ >= 7
|
10
|
+
#pragma GCC diagnostic push
|
11
|
+
#if defined(__cplusplus)
|
12
|
+
#pragma GCC diagnostic ignored "-Wregister"
|
13
|
+
#if __GNUC__ >= 10
|
14
|
+
#pragma GCC diagnostic ignored "-Wvolatile"
|
15
|
+
#if __GNUC__ >= 11
|
16
|
+
#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion"
|
17
|
+
#endif
|
18
|
+
#endif
|
19
|
+
#endif
|
20
|
+
#endif
|
21
|
+
|
22
|
+
#include <ruby.h>
|
23
|
+
#include <ruby/version.h> /* For RUBY_API_VERSION_CODE */
|
24
|
+
|
25
|
+
#if __GNUC__ >= 7
|
26
|
+
#pragma GCC diagnostic pop
|
27
|
+
#endif
|
28
|
+
|
29
|
+
/* Ruby 1.9.1 has a "memoisation optimisation" when compiling with GCC which
|
30
|
+
* breaks using rb_intern as an lvalue, as SWIG does. We work around this
|
31
|
+
* issue for now by disabling this.
|
32
|
+
* https://sourceforge.net/tracker/?func=detail&aid=2859614&group_id=1645&atid=101645
|
33
|
+
*/
|
34
|
+
#ifdef rb_intern
|
35
|
+
# undef rb_intern
|
36
|
+
#endif
|
37
|
+
|
38
|
+
/* Remove global macros defined in Ruby's win32.h */
|
39
|
+
#ifdef write
|
40
|
+
# undef write
|
41
|
+
#endif
|
42
|
+
#ifdef read
|
43
|
+
# undef read
|
44
|
+
#endif
|
45
|
+
#ifdef bind
|
46
|
+
# undef bind
|
47
|
+
#endif
|
48
|
+
#ifdef close
|
49
|
+
# undef close
|
50
|
+
#endif
|
51
|
+
#ifdef connect
|
52
|
+
# undef connect
|
53
|
+
#endif
|
54
|
+
|
55
|
+
|
56
|
+
/* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */
|
57
|
+
#ifndef NUM2LL
|
58
|
+
#define NUM2LL(x) NUM2LONG((x))
|
59
|
+
#endif
|
60
|
+
#ifndef LL2NUM
|
61
|
+
#define LL2NUM(x) INT2NUM((long) (x))
|
62
|
+
#endif
|
63
|
+
#ifndef ULL2NUM
|
64
|
+
#define ULL2NUM(x) UINT2NUM((unsigned long) (x))
|
65
|
+
#endif
|
66
|
+
|
67
|
+
/* Ruby 1.7 doesn't (yet) define NUM2ULL() */
|
68
|
+
#ifndef NUM2ULL
|
69
|
+
#ifdef HAVE_LONG_LONG
|
70
|
+
#define NUM2ULL(x) rb_num2ull((x))
|
71
|
+
#else
|
72
|
+
#define NUM2ULL(x) NUM2ULONG(x)
|
73
|
+
#endif
|
74
|
+
#endif
|
75
|
+
|
76
|
+
/* RSTRING_LEN, etc are new in Ruby 1.9, but ->ptr and ->len no longer work */
|
77
|
+
/* Define these for older versions so we can just write code the new way */
|
78
|
+
#ifndef RSTRING_LEN
|
79
|
+
# define RSTRING_LEN(x) RSTRING(x)->len
|
80
|
+
#endif
|
81
|
+
#ifndef RSTRING_PTR
|
82
|
+
# define RSTRING_PTR(x) RSTRING(x)->ptr
|
83
|
+
#endif
|
84
|
+
#ifndef RSTRING_END
|
85
|
+
# define RSTRING_END(x) (RSTRING_PTR(x) + RSTRING_LEN(x))
|
86
|
+
#endif
|
87
|
+
#ifndef RARRAY_LEN
|
88
|
+
# define RARRAY_LEN(x) RARRAY(x)->len
|
89
|
+
#endif
|
90
|
+
#ifndef RARRAY_PTR
|
91
|
+
# define RARRAY_PTR(x) RARRAY(x)->ptr
|
92
|
+
#endif
|
93
|
+
#ifndef RFLOAT_VALUE
|
94
|
+
# define RFLOAT_VALUE(x) RFLOAT(x)->value
|
95
|
+
#endif
|
96
|
+
#ifndef DOUBLE2NUM
|
97
|
+
# define DOUBLE2NUM(x) rb_float_new(x)
|
98
|
+
#endif
|
99
|
+
#ifndef RHASH_TBL
|
100
|
+
# define RHASH_TBL(x) (RHASH(x)->tbl)
|
101
|
+
#endif
|
102
|
+
#ifndef RHASH_ITER_LEV
|
103
|
+
# define RHASH_ITER_LEV(x) (RHASH(x)->iter_lev)
|
104
|
+
#endif
|
105
|
+
#ifndef RHASH_IFNONE
|
106
|
+
# define RHASH_IFNONE(x) (RHASH(x)->ifnone)
|
107
|
+
#endif
|
108
|
+
#ifndef RHASH_SIZE
|
109
|
+
# define RHASH_SIZE(x) (RHASH(x)->tbl->num_entries)
|
110
|
+
#endif
|
111
|
+
#ifndef RHASH_EMPTY_P
|
112
|
+
# define RHASH_EMPTY_P(x) (RHASH_SIZE(x) == 0)
|
113
|
+
#endif
|
114
|
+
#ifndef RSTRUCT_LEN
|
115
|
+
# define RSTRUCT_LEN(x) RSTRUCT(x)->len
|
116
|
+
#endif
|
117
|
+
#ifndef RSTRUCT_PTR
|
118
|
+
# define RSTRUCT_PTR(x) RSTRUCT(x)->ptr
|
119
|
+
#endif
|
120
|
+
#ifndef RTYPEDDATA_P
|
121
|
+
# define RTYPEDDATA_P(x) (TYPE(x) != T_DATA)
|
122
|
+
#endif
|
123
|
+
|
124
|
+
|
125
|
+
|
126
|
+
/*
|
127
|
+
* The following macros are used for providing the correct type of a
|
128
|
+
* function pointer to the Ruby C API.
|
129
|
+
*
|
130
|
+
* Starting with Ruby 2.7 these macros act transparently due to Ruby's moving
|
131
|
+
* moving away from ANYARGS and instead employing strict function signatures.
|
132
|
+
*
|
133
|
+
* Note: In case of C (not C++) the macros are transparent even before
|
134
|
+
* Ruby 2.7 due to the fact that the Ruby C API used function declarators
|
135
|
+
* with empty parentheses, which allows for an unspecified number of
|
136
|
+
* arguments.
|
137
|
+
*
|
138
|
+
* PROTECTFUNC(f) is used for the function pointer argument of the Ruby
|
139
|
+
* C API function rb_protect().
|
140
|
+
*
|
141
|
+
* VALUEFUNC(f) is used for the function pointer argument(s) of Ruby C API
|
142
|
+
* functions like rb_define_method() and rb_define_singleton_method().
|
143
|
+
*
|
144
|
+
* VOIDFUNC(f) is used to typecast a C function that implements either
|
145
|
+
* the "mark" or "free" stuff for a Ruby Data object, so that it can be
|
146
|
+
* passed as an argument to Ruby C API functions like Data_Wrap_Struct()
|
147
|
+
* and Data_Make_Struct().
|
148
|
+
*
|
149
|
+
* SWIG_RUBY_VOID_ANYARGS_FUNC(f) is used for the function pointer
|
150
|
+
* argument(s) of Ruby C API functions like rb_define_virtual_variable().
|
151
|
+
*
|
152
|
+
* SWIG_RUBY_INT_ANYARGS_FUNC(f) is used for the function pointer
|
153
|
+
* argument(s) of Ruby C API functions like st_foreach().
|
154
|
+
*/
|
155
|
+
#if defined(__cplusplus) && RUBY_API_VERSION_CODE < 20700
|
156
|
+
# define PROTECTFUNC(f) ((VALUE (*)(VALUE)) f)
|
157
|
+
# define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
|
158
|
+
# define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
|
159
|
+
# define SWIG_RUBY_VOID_ANYARGS_FUNC(f) ((void (*)(ANYARGS))(f))
|
160
|
+
# define SWIG_RUBY_INT_ANYARGS_FUNC(f) ((int (*)(ANYARGS))(f))
|
161
|
+
#else
|
162
|
+
# define PROTECTFUNC(f) (f)
|
163
|
+
# define VALUEFUNC(f) (f)
|
164
|
+
# define VOIDFUNC(f) (f)
|
165
|
+
# define SWIG_RUBY_VOID_ANYARGS_FUNC(f) (f)
|
166
|
+
# define SWIG_RUBY_INT_ANYARGS_FUNC(f) (f)
|
167
|
+
#endif
|
168
|
+
|
169
|
+
/* Don't use for expressions have side effect */
|
170
|
+
#ifndef RB_STRING_VALUE
|
171
|
+
#define RB_STRING_VALUE(s) (TYPE(s) == T_STRING ? (s) : (*(volatile VALUE *)&(s) = rb_str_to_str(s)))
|
172
|
+
#endif
|
173
|
+
#ifndef StringValue
|
174
|
+
#define StringValue(s) RB_STRING_VALUE(s)
|
175
|
+
#endif
|
176
|
+
#ifndef StringValuePtr
|
177
|
+
#define StringValuePtr(s) RSTRING_PTR(RB_STRING_VALUE(s))
|
178
|
+
#endif
|
179
|
+
#ifndef StringValueLen
|
180
|
+
#define StringValueLen(s) RSTRING_LEN(RB_STRING_VALUE(s))
|
181
|
+
#endif
|
182
|
+
#ifndef SafeStringValue
|
183
|
+
#define SafeStringValue(v) do {\
|
184
|
+
StringValue(v);\
|
185
|
+
rb_check_safe_str(v);\
|
186
|
+
} while (0)
|
187
|
+
#endif
|
188
|
+
|
189
|
+
#ifndef HAVE_RB_DEFINE_ALLOC_FUNC
|
190
|
+
#define rb_define_alloc_func(klass, func) rb_define_singleton_method((klass), "new", VALUEFUNC((func)), -1)
|
191
|
+
#define rb_undef_alloc_func(klass) rb_undef_method(CLASS_OF((klass)), "new")
|
192
|
+
#endif
|