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.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/ext/wxruby3/include/wxruby-runtime.h +3 -0
  3. data/ext/wxruby3/swig/common.i +22 -0
  4. data/ext/wxruby3/swig/custom/director.swg +296 -0
  5. data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
  6. data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
  7. data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
  8. data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
  9. data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
  10. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
  11. data/ext/wxruby3/swig/wx.i +50 -30
  12. data/lib/wx/core/const.rb +83 -0
  13. data/lib/wx/doc/const.rb +66 -66
  14. data/lib/wx/doc/event.rb +0 -6
  15. data/lib/wx/doc/functions.rb +9 -9
  16. data/lib/wx/doc/window.rb +5 -0
  17. data/lib/wx/keyword_defs.rb +43 -6
  18. data/lib/wx/version.rb +1 -1
  19. data/rakelib/lib/config/macosx.rb +1 -1
  20. data/rakelib/lib/core/include/funcall.inc +33 -14
  21. data/rakelib/lib/core/include/swigdirector.inc +384 -0
  22. data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
  23. data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
  24. data/rakelib/lib/core/include/swigrun.inc +700 -0
  25. data/rakelib/lib/core/package.rb +5 -2
  26. data/rakelib/lib/core/parameter.rb +3 -0
  27. data/rakelib/lib/director/accelerator.rb +1 -1
  28. data/rakelib/lib/director/animation.rb +1 -1
  29. data/rakelib/lib/director/animation_ctrl.rb +20 -0
  30. data/rakelib/lib/director/app.rb +23 -5
  31. data/rakelib/lib/director/art_provider.rb +1 -1
  32. data/rakelib/lib/director/data_object_simple_base.rb +1 -2
  33. data/rakelib/lib/director/dialog.rb +5 -0
  34. data/rakelib/lib/director/dialup_event.rb +44 -0
  35. data/rakelib/lib/director/dialup_manager.rb +45 -0
  36. data/rakelib/lib/director/event.rb +20 -2
  37. data/rakelib/lib/director/file_ctrl.rb +35 -0
  38. data/rakelib/lib/director/file_ctrl_event.rb +26 -0
  39. data/rakelib/lib/director/gdicommon.rb +19 -1
  40. data/rakelib/lib/director/grid_cell_editor.rb +6 -6
  41. data/rakelib/lib/director/help_controller.rb +1 -1
  42. data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
  43. data/rakelib/lib/director/pgeditor.rb +2 -2
  44. data/rakelib/lib/director/pgproperties.rb +2 -2
  45. data/rakelib/lib/director/richtext_buffer.rb +1 -1
  46. data/rakelib/lib/director/richtext_ctrl.rb +1 -1
  47. data/rakelib/lib/director/sash_event.rb +42 -0
  48. data/rakelib/lib/director/sizer.rb +64 -1
  49. data/rakelib/lib/director/sizer_item.rb +22 -0
  50. data/rakelib/lib/director/task_bar_icon.rb +1 -1
  51. data/rakelib/lib/director/tree_ctrl.rb +19 -44
  52. data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
  53. data/rakelib/lib/generate/doc/events.yaml +10 -4
  54. data/rakelib/lib/generate/doc/static_box.yaml +8 -0
  55. data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
  56. data/rakelib/lib/generate/doc.rb +14 -3
  57. data/rakelib/lib/generate/interface.rb +4 -3
  58. data/rakelib/lib/specs/interfaces.rb +5 -1
  59. data/rakelib/lib/swig_runner.rb +4 -50
  60. data/rakelib/lib/typemap/common.rb +24 -9
  61. data/rakelib/lib/typemap/data_format.rb +1 -1
  62. data/rakelib/lib/typemap/data_object_data.rb +2 -2
  63. data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
  64. data/rakelib/lib/typemap/points_list.rb +5 -7
  65. data/rakelib/lib/util/string.rb +10 -8
  66. data/samples/text/richtext.rb +0 -30
  67. data/tests/test_app_exit_exception.rb +36 -0
  68. data/tests/test_app_init_exception.rb +20 -0
  69. data/tests/test_book_controls.rb +29 -0
  70. data/tests/test_exceptions.rb +41 -0
  71. data/tests/test_sizer.rb +43 -0
  72. data/tests/test_std_controls.rb +36 -0
  73. metadata +25 -4
  74. data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
@@ -107,7 +107,7 @@ module WXRuby3
107
107
  @ld.sub!(/-o\s*\Z/, '')
108
108
 
109
109
  @extra_cflags.concat %w[-Wno-unused-function -Wno-conversion-null -Wno-sometimes-uninitialized
110
- -Wno-overloaded-virtual -Wno-deprecated-copy]
110
+ -Wno-overloaded-virtual -Wno-deprecated-copy -Wno-format-security]
111
111
  @extra_cflags << ' -Wno-deprecated-declarations' unless @no_deprecated
112
112
 
113
113
  # create a .dylib binary
@@ -11,18 +11,38 @@
11
11
 
12
12
  typedef VALUE (*RUBY_INVOKE_FUNC) (VALUE);
13
13
 
14
+ VALUE rb_exc_set_backtrace(VALUE, VALUE);
15
+ VALUE rb_get_backtrace(VALUE);
16
+
17
+ namespace Swig
18
+ {
19
+ class DirectorRubyException : public DirectorException
20
+ {
21
+ public:
22
+ DirectorRubyException(VALUE error, VALUE rcvr, ID fn_id)
23
+ : DirectorException(Qnil)
24
+ {
25
+ VALUE msg = rb_sprintf("Caught exception in SWIG director method for %s#%s", rb_class2name(CLASS_OF(rcvr)), rb_id2name(fn_id));
26
+ this->swig_msg = StringValuePtr(msg);
27
+ swig_error = rb_exc_new_str(rb_eRuntimeError, msg);
28
+ VALUE bt = rb_funcall(error, rb_intern("backtrace"), 0);
29
+ rb_funcall(swig_error, rb_intern("set_backtrace"), 1, bt);
30
+ }
31
+ };
32
+ }
33
+
14
34
  class WXRuby_RBFuncall
15
35
  {
16
36
  public:
17
- WXRuby_RBFuncall (ID fnid, bool abort_on_ex=true)
37
+ WXRuby_RBFuncall (ID fnid, bool throw_on_ex=true)
18
38
  : fn_id_ (fnid),
19
- abort_on_ex_ (abort_on_ex),
39
+ throw_on_ex_ (throw_on_ex),
20
40
  ex_caught_ (false)
21
41
  {
22
42
  }
23
- WXRuby_RBFuncall (const char* fn, bool abort_on_ex=true)
43
+ WXRuby_RBFuncall (const char* fn, bool throw_on_ex=true)
24
44
  : fn_id_ (rb_intern (fn)),
25
- abort_on_ex_ (abort_on_ex),
45
+ throw_on_ex_ (throw_on_ex),
26
46
  ex_caught_ (false)
27
47
  {
28
48
  }
@@ -43,15 +63,18 @@ public:
43
63
 
44
64
  bool has_caught_exception () { return this->ex_caught_; }
45
65
 
46
- VALUE get_exception () { return rb_gv_get ("$!"); }
66
+ VALUE get_exception () { return rb_errinfo(); }
47
67
 
48
68
  ID id () { return this->fn_id_; }
49
69
 
50
70
  protected:
51
71
  struct FuncArgs
52
72
  {
73
+ FuncArgs(VALUE rcvr) : receiver_(rcvr) {}
53
74
  virtual ~FuncArgs () {}
54
75
  virtual VALUE rb_invoke (ID fnid) const = 0;
76
+
77
+ VALUE receiver_;
55
78
  };
56
79
 
57
80
  VALUE _invoke (const FuncArgs& fa)
@@ -65,13 +88,11 @@ protected:
65
88
  &invoke_state);
66
89
  if (invoke_state)
67
90
  {
68
- if (this->abort_on_ex_)
91
+ if (this->throw_on_ex_)
69
92
  {
70
93
  // handle exception
71
94
  VALUE rexc = this->get_exception ();
72
- VALUE msg = rb_eval_string ("$!.message+\"\\n\"+$!.backtrace.join(\"\\n\")");
73
- const char *exc_name = rb_obj_classname(rexc);
74
- wxLogFatalError("%s : %s", exc_name, StringValuePtr(msg));
95
+ throw Swig::DirectorRubyException(rexc, fa.receiver_, this->fn_id_);
75
96
  }
76
97
  else
77
98
  {
@@ -88,7 +109,7 @@ protected:
88
109
  struct FuncArgArray : public FuncArgs
89
110
  {
90
111
  FuncArgArray (VALUE rcvr, VALUE args)
91
- : receiver_ (rcvr), args_ (args) {}
112
+ : FuncArgs (rcvr), args_ (args) {}
92
113
  virtual ~FuncArgArray () {}
93
114
 
94
115
  virtual VALUE rb_invoke (ID fnid) const
@@ -96,14 +117,13 @@ protected:
96
117
  return rb_apply (this->receiver_, fnid, this->args_);
97
118
  }
98
119
 
99
- VALUE receiver_;
100
120
  VALUE args_;
101
121
  };
102
122
 
103
123
  struct FuncArgList : public FuncArgs
104
124
  {
105
125
  FuncArgList (VALUE rcvr, int argc, VALUE* args)
106
- : receiver_ (rcvr), argc_ (argc), args_ (args) {}
126
+ : FuncArgs (rcvr), argc_ (argc), args_ (args) {}
107
127
  virtual ~FuncArgList () {}
108
128
 
109
129
  virtual VALUE rb_invoke (ID fnid) const
@@ -111,7 +131,6 @@ protected:
111
131
  return rb_funcall2 (this->receiver_, fnid, this->argc_, this->args_);
112
132
  }
113
133
 
114
- VALUE receiver_;
115
134
  int argc_;
116
135
  VALUE* args_;
117
136
  };
@@ -138,7 +157,7 @@ protected:
138
157
 
139
158
  private:
140
159
  ID fn_id_;
141
- bool abort_on_ex_;
160
+ bool throw_on_ex_;
142
161
  bool ex_caught_;
143
162
  };
144
163
 
@@ -0,0 +1,384 @@
1
+ // Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ // SWIG director classes
6
+
7
+ #include <string>
8
+ #include <iostream>
9
+ #include <exception>
10
+ #include <map>
11
+
12
+ namespace Swig
13
+ {
14
+
15
+ /* memory handler */
16
+ struct WXRB_EXPORT_FLAG GCItem
17
+ {
18
+ virtual ~GCItem();
19
+
20
+ virtual swig_ruby_owntype get_own() const;
21
+ };
22
+
23
+ GCItem::~GCItem() {}
24
+
25
+ swig_ruby_owntype GCItem::get_own() const
26
+ {
27
+ swig_ruby_owntype own = {0, 0};
28
+ return own;
29
+ }
30
+
31
+ struct WXRB_EXPORT_FLAG GCItem_var
32
+ {
33
+ GCItem_var(GCItem *item = 0) : _item(item) {}
34
+
35
+ GCItem_var& operator=(GCItem *item);
36
+
37
+ ~GCItem_var()
38
+ {
39
+ delete _item;
40
+ }
41
+
42
+ GCItem *operator->() const
43
+ {
44
+ return _item;
45
+ }
46
+
47
+ private:
48
+ GCItem *_item;
49
+ };
50
+
51
+ GCItem_var& GCItem_var::operator=(GCItem *item)
52
+ {
53
+ GCItem *tmp = _item;
54
+ _item = item;
55
+ delete tmp;
56
+ return *this;
57
+ }
58
+
59
+ template <typename Type>
60
+ struct GCItem_T : GCItem
61
+ {
62
+ GCItem_T(Type *ptr) : _ptr(ptr) {}
63
+
64
+ virtual ~GCItem_T()
65
+ {
66
+ delete _ptr;
67
+ }
68
+
69
+ private:
70
+ Type *_ptr;
71
+ };
72
+
73
+ struct WXRB_EXPORT_FLAG GCItem_Object : GCItem
74
+ {
75
+ GCItem_Object(swig_ruby_owntype own) : _own(own) {}
76
+
77
+ virtual ~GCItem_Object() {}
78
+
79
+ swig_ruby_owntype get_own() const
80
+ {
81
+ return _own;
82
+ }
83
+
84
+ private:
85
+ swig_ruby_owntype _own;
86
+ };
87
+
88
+ template <typename Type>
89
+ struct GCArray_T : GCItem
90
+ {
91
+ GCArray_T(Type *ptr) : _ptr(ptr) {}
92
+
93
+ virtual ~GCArray_T()
94
+ {
95
+ delete[] _ptr;
96
+ }
97
+
98
+ private:
99
+ Type *_ptr;
100
+ };
101
+
102
+ /* body args */
103
+ struct body_args
104
+ {
105
+ VALUE recv;
106
+ ID id;
107
+ int argc;
108
+ VALUE *argv;
109
+ };
110
+
111
+ /* Base class for director exceptions */
112
+ class WXRB_EXPORT_FLAG DirectorException : public std::exception
113
+ {
114
+ protected:
115
+ VALUE swig_error;
116
+ std::string swig_msg;
117
+ protected:
118
+ DirectorException(VALUE error) : swig_error(error) {}
119
+
120
+ DirectorException(VALUE error, const char *hdr, const char *msg ="");
121
+
122
+ void setup_error(VALUE error);
123
+
124
+ public:
125
+ virtual ~DirectorException() throw();
126
+
127
+ VALUE getType() const
128
+ {
129
+ return CLASS_OF(swig_error);
130
+ }
131
+
132
+ VALUE getError() const
133
+ {
134
+ return swig_error;
135
+ }
136
+
137
+ /* Deprecated, use what() instead */
138
+ const std::string& getMessage() const
139
+ {
140
+ return swig_msg;
141
+ }
142
+
143
+ const char *what() const throw()
144
+ {
145
+ return swig_msg.c_str();
146
+ }
147
+ };
148
+
149
+ DirectorException::DirectorException(VALUE error, const char *hdr, const char *msg)
150
+ : swig_msg(hdr)
151
+ {
152
+ if (msg[0])
153
+ {
154
+ swig_msg += " ";
155
+ swig_msg += msg;
156
+ }
157
+ this->setup_error(error);
158
+ }
159
+
160
+ DirectorException::~DirectorException() throw()
161
+ {}
162
+
163
+
164
+ void DirectorException::setup_error(VALUE error)
165
+ {
166
+ if (swig_msg.size())
167
+ {
168
+ VALUE str = rb_str_new(swig_msg.data(), swig_msg.size());
169
+ swig_error = rb_exc_new3(error, str);
170
+ }
171
+ else
172
+ {
173
+ swig_error = error;
174
+ }
175
+ }
176
+
177
+ /* Type mismatch in the return value from a Ruby method call */
178
+ class WXRB_EXPORT_FLAG DirectorTypeMismatchException : public DirectorException
179
+ {
180
+ public:
181
+ DirectorTypeMismatchException(VALUE error, const char *msg="")
182
+ : DirectorException(error, "SWIG director type mismatch", msg)
183
+ {}
184
+
185
+ DirectorTypeMismatchException(const char *msg="")
186
+ : DirectorException(rb_eTypeError, "SWIG director type mismatch", msg)
187
+ {}
188
+
189
+ DirectorTypeMismatchException(VALUE self, const char *method, VALUE error, const char *msg="");
190
+
191
+ static inline void raise(VALUE error, const char *msg)
192
+ {
193
+ throw DirectorTypeMismatchException(error, msg);
194
+ }
195
+
196
+ static inline void raise(const char *msg)
197
+ {
198
+ throw DirectorTypeMismatchException(msg);
199
+ }
200
+
201
+ static inline void raise(VALUE self, const char* method, VALUE error, const char *msg)
202
+ {
203
+ throw DirectorTypeMismatchException(self, method, error, msg);
204
+ }
205
+ };
206
+
207
+
208
+ DirectorTypeMismatchException::DirectorTypeMismatchException(VALUE self, const char *method, VALUE error, const char *msg)
209
+ : DirectorException(Qnil)
210
+ {
211
+ this->swig_msg = "SWIG director type mismatch ";
212
+ this->swig_msg += msg;
213
+ this->swig_msg += " returned from ";
214
+ this->swig_msg += rb_class2name(CLASS_OF(self));
215
+ this->swig_msg += "#";
216
+ this->swig_msg += method;
217
+ this->setup_error(rb_eTypeError);
218
+ }
219
+
220
+ /* Any Ruby exception that occurs during a director method call */
221
+ class WXRB_EXPORT_FLAG DirectorMethodException : public DirectorException
222
+ {
223
+ public:
224
+ DirectorMethodException(VALUE error)
225
+ : DirectorException(error)
226
+ {}
227
+
228
+ DirectorMethodException(const char *msg = "")
229
+ : DirectorException(rb_eRuntimeError, "SWIG director method error.", msg)
230
+ {}
231
+
232
+ static void raise(VALUE error)
233
+ {
234
+ throw DirectorMethodException(error);
235
+ }
236
+ };
237
+
238
+ /* Attempted to call a pure virtual method via a director method */
239
+ class WXRB_EXPORT_FLAG DirectorPureVirtualException : public DirectorException
240
+ {
241
+ public:
242
+ DirectorPureVirtualException(const char *msg = "")
243
+ : DirectorException(rb_eRuntimeError, "SWIG director pure virtual method called", msg)
244
+ {}
245
+
246
+ static void raise(const char *msg)
247
+ {
248
+ throw DirectorPureVirtualException(msg);
249
+ }
250
+ };
251
+
252
+ /* Simple thread abstraction for pthreads on win32 */
253
+ #ifdef __THREAD__
254
+ # define __PTHREAD__
255
+ # if defined(_WIN32) || defined(__WIN32__)
256
+ # define pthread_mutex_lock EnterCriticalSection
257
+ # define pthread_mutex_unlock LeaveCriticalSection
258
+ # define pthread_mutex_t CRITICAL_SECTION
259
+ # define SWIG_MUTEX_INIT(var) var
260
+ # else
261
+ # include <pthread.h>
262
+ # define SWIG_MUTEX_INIT(var) var = PTHREAD_MUTEX_INITIALIZER
263
+ # endif
264
+ #endif
265
+
266
+ #ifdef __PTHREAD__
267
+ struct Guard
268
+ {
269
+ pthread_mutex_t *_mutex;
270
+
271
+ Guard(pthread_mutex_t &mutex) : _mutex(&mutex)
272
+ {
273
+ pthread_mutex_lock(_mutex);
274
+ }
275
+
276
+ ~Guard()
277
+ {
278
+ pthread_mutex_unlock(_mutex);
279
+ }
280
+ };
281
+ # define SWIG_GUARD(mutex) Guard _guard(mutex)
282
+ #else
283
+ # define SWIG_GUARD(mutex)
284
+ #endif
285
+
286
+ /* director base class */
287
+ class WXRB_EXPORT_FLAG Director
288
+ {
289
+ private:
290
+ /* pointer to the wrapped Ruby object */
291
+ VALUE swig_self;
292
+ /* flag indicating whether the object is owned by Ruby or c++ */
293
+ mutable bool swig_disown_flag;
294
+
295
+ public:
296
+ /* wrap a Ruby object. */
297
+ Director(VALUE self);
298
+
299
+ /* discard our reference at destruction */
300
+ virtual ~Director();
301
+
302
+ /* return a pointer to the wrapped Ruby object */
303
+ VALUE swig_get_self() const
304
+ {
305
+ return swig_self;
306
+ }
307
+
308
+ /* acquire ownership of the wrapped Ruby object (the sense of "disown" is from Ruby) */
309
+ void swig_disown() const
310
+ {
311
+ if (!swig_disown_flag)
312
+ {
313
+ swig_disown_flag = true;
314
+ }
315
+ }
316
+
317
+ /* ownership management */
318
+ private:
319
+ typedef std::map<void *, GCItem_var> swig_ownership_map;
320
+ mutable swig_ownership_map swig_owner;
321
+ #ifdef __PTHREAD__
322
+ static pthread_mutex_t swig_mutex_own;
323
+ #endif
324
+
325
+ public:
326
+ template <typename Type>
327
+ void swig_acquire_ownership_array(Type *vptr) const
328
+ {
329
+ if (vptr)
330
+ {
331
+ SWIG_GUARD(swig_mutex_own);
332
+ swig_owner[vptr] = new GCArray_T<Type>(vptr);
333
+ }
334
+ }
335
+
336
+ template <typename Type>
337
+ void swig_acquire_ownership(Type *vptr) const
338
+ {
339
+ if (vptr)
340
+ {
341
+ SWIG_GUARD(swig_mutex_own);
342
+ swig_owner[vptr] = new GCItem_T<Type>(vptr);
343
+ }
344
+ }
345
+
346
+ void swig_acquire_ownership_obj(void *vptr, swig_ruby_owntype own) const;
347
+
348
+ swig_ruby_owntype swig_release_ownership(void *vptr) const;
349
+ };
350
+
351
+ Director::Director(VALUE self)
352
+ : swig_self(self), swig_disown_flag(false)
353
+ {}
354
+
355
+ /* discard our reference at destruction */
356
+ Director::~Director()
357
+ {}
358
+
359
+ void Director::swig_acquire_ownership_obj(void *vptr, swig_ruby_owntype own) const
360
+ {
361
+ if (vptr && own.datafree)
362
+ {
363
+ SWIG_GUARD(swig_mutex_own);
364
+ swig_owner[vptr] = new GCItem_Object(own);
365
+ }
366
+ }
367
+
368
+ swig_ruby_owntype Director::swig_release_ownership(void *vptr) const
369
+ {
370
+ swig_ruby_owntype own = {0, 0};
371
+ if (vptr)
372
+ {
373
+ SWIG_GUARD(swig_mutex_own);
374
+ swig_ownership_map::iterator iter = swig_owner.find(vptr);
375
+ if (iter != swig_owner.end())
376
+ {
377
+ own.datafree = iter->second->get_own().datafree;
378
+ swig_owner.erase(iter);
379
+ }
380
+ }
381
+ return own;
382
+ }
383
+
384
+ }
@@ -0,0 +1,161 @@
1
+ // Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ // SWIG Ruby error handling
6
+
7
+ /* Define some additional error types */
8
+ #define SWIG_ObjectPreviouslyDeletedError -100
9
+
10
+
11
+ /* Define custom exceptions for errors that do not map to existing Ruby
12
+ exceptions. Note this only works for C++ since a global cannot be
13
+ initialized by a function in C. For C, fallback to rb_eRuntimeError.*/
14
+
15
+ WXRB_EXPORT_FLAG VALUE
16
+ getNullReferenceError(void)
17
+ {
18
+ static int init = 0;
19
+ static VALUE rb_eNullReferenceError ;
20
+ if (!init)
21
+ {
22
+ init = 1;
23
+ rb_eNullReferenceError = rb_define_class("NullReferenceError", rb_eRuntimeError);
24
+ }
25
+ return rb_eNullReferenceError;
26
+ }
27
+
28
+ WXRB_EXPORT_FLAG VALUE
29
+ getObjectPreviouslyDeletedError(void)
30
+ {
31
+ static int init = 0;
32
+ static VALUE rb_eObjectPreviouslyDeleted ;
33
+ if (!init)
34
+ {
35
+ init = 1;
36
+ rb_eObjectPreviouslyDeleted = rb_define_class("ObjectPreviouslyDeleted", rb_eRuntimeError);
37
+ }
38
+ return rb_eObjectPreviouslyDeleted;
39
+ }
40
+
41
+
42
+ WXRB_EXPORT_FLAG VALUE
43
+ SWIG_Ruby_ErrorType(int SWIG_code)
44
+ {
45
+ VALUE type;
46
+ switch (SWIG_code)
47
+ {
48
+ case SWIG_MemoryError:
49
+ type = rb_eNoMemError;
50
+ break;
51
+ case SWIG_IOError:
52
+ type = rb_eIOError;
53
+ break;
54
+ case SWIG_RuntimeError:
55
+ type = rb_eRuntimeError;
56
+ break;
57
+ case SWIG_IndexError:
58
+ type = rb_eIndexError;
59
+ break;
60
+ case SWIG_TypeError:
61
+ type = rb_eTypeError;
62
+ break;
63
+ case SWIG_DivisionByZero:
64
+ type = rb_eZeroDivError;
65
+ break;
66
+ case SWIG_OverflowError:
67
+ type = rb_eRangeError;
68
+ break;
69
+ case SWIG_SyntaxError:
70
+ type = rb_eSyntaxError;
71
+ break;
72
+ case SWIG_ValueError:
73
+ type = rb_eArgError;
74
+ break;
75
+ case SWIG_SystemError:
76
+ type = rb_eFatal;
77
+ break;
78
+ case SWIG_AttributeError:
79
+ type = rb_eRuntimeError;
80
+ break;
81
+ case SWIG_NullReferenceError:
82
+ type = getNullReferenceError();
83
+ break;
84
+ case SWIG_ObjectPreviouslyDeletedError:
85
+ type = getObjectPreviouslyDeletedError();
86
+ break;
87
+ case SWIG_UnknownError:
88
+ type = rb_eRuntimeError;
89
+ break;
90
+ default:
91
+ type = rb_eRuntimeError;
92
+ }
93
+ return type;
94
+ }
95
+
96
+
97
+ /* This function is called when a user inputs a wrong argument to
98
+ a method.
99
+ */
100
+ WXRB_EXPORT_FLAG
101
+ const char* Ruby_Format_TypeError( const char* msg,
102
+ const char* type,
103
+ const char* name,
104
+ const int argn,
105
+ VALUE input )
106
+ {
107
+ char buf[128];
108
+ VALUE str;
109
+ VALUE asStr;
110
+ if ( msg && *msg )
111
+ {
112
+ str = rb_str_new2(msg);
113
+ }
114
+ else
115
+ {
116
+ str = rb_str_new(NULL, 0);
117
+ }
118
+
119
+ str = rb_str_cat2( str, "Expected argument " );
120
+ sprintf( buf, "%d of type ", argn-1 );
121
+ str = rb_str_cat2( str, buf );
122
+ str = rb_str_cat2( str, type );
123
+ str = rb_str_cat2( str, ", but got " );
124
+ str = rb_str_cat2( str, rb_obj_classname(input) );
125
+ str = rb_str_cat2( str, " " );
126
+ asStr = rb_inspect(input);
127
+ if ( RSTRING_LEN(asStr) > 30 )
128
+ {
129
+ str = rb_str_cat( str, StringValuePtr(asStr), 30 );
130
+ str = rb_str_cat2( str, "..." );
131
+ }
132
+ else
133
+ {
134
+ str = rb_str_append( str, asStr );
135
+ }
136
+
137
+ if ( name )
138
+ {
139
+ str = rb_str_cat2( str, "\n\tin SWIG method '" );
140
+ str = rb_str_cat2( str, name );
141
+ str = rb_str_cat2( str, "'" );
142
+ }
143
+
144
+ return StringValuePtr( str );
145
+ }
146
+
147
+ /* This function is called when an overloaded method fails */
148
+ WXRB_EXPORT_FLAG
149
+ void Ruby_Format_OverloadedError(
150
+ const int argc,
151
+ const int maxargs,
152
+ const char* method,
153
+ const char* prototypes
154
+ )
155
+ {
156
+ const char* msg = "Wrong # of arguments";
157
+ if ( argc <= maxargs ) msg = "Wrong arguments";
158
+ rb_raise(rb_eArgError,"%s for overloaded method '%s'.\n"
159
+ "Possible C/C++ prototypes are:\n%s",
160
+ msg, method, prototypes);
161
+ }