rice 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/COPYING +2 -2
  2. data/Doxyfile +1 -1
  3. data/Makefile.in +8 -3
  4. data/Rakefile +3 -3
  5. data/config.guess +30 -49
  6. data/config.sub +4 -22
  7. data/configure +319 -104
  8. data/configure.ac +6 -2
  9. data/doxygen.ac +2 -2
  10. data/extconf.rb +22 -0
  11. data/post-autoconf.rb +3 -3
  12. data/post-automake.rb +2 -2
  13. data/rice/Array.ipp +7 -6
  14. data/rice/Critical_Guard.hpp +6 -0
  15. data/rice/Critical_Guard.ipp +6 -0
  16. data/rice/Data_Object.hpp +1 -120
  17. data/rice/Data_Object.ipp +5 -1
  18. data/rice/Data_Object_defn.hpp +132 -0
  19. data/rice/Data_Type.ipp +18 -2
  20. data/rice/Enum.ipp +3 -3
  21. data/rice/Exception.hpp +1 -61
  22. data/rice/Exception_Base.hpp +2 -24
  23. data/rice/Exception_Base.ipp +2 -0
  24. data/rice/Exception_Base_defn.hpp +27 -0
  25. data/rice/Exception_defn.hpp +69 -0
  26. data/rice/Hash.hpp +5 -1
  27. data/rice/Hash.ipp +7 -7
  28. data/rice/Makefile.am +20 -3
  29. data/rice/Makefile.in +39 -4
  30. data/rice/Module.cpp +11 -3
  31. data/rice/Module_impl.hpp +20 -9
  32. data/rice/Module_impl.ipp +84 -87
  33. data/rice/Object.cpp +1 -1
  34. data/rice/VM.cpp +14 -1
  35. data/rice/VM.hpp +6 -1
  36. data/rice/config.hpp +24 -3
  37. data/rice/config.hpp.in +21 -0
  38. data/rice/detail/Auto_Function_Wrapper.hpp +97 -65
  39. data/rice/detail/Auto_Function_Wrapper.ipp +160 -128
  40. data/rice/detail/Auto_Member_Function_Wrapper.hpp +96 -64
  41. data/rice/detail/Auto_Member_Function_Wrapper.ipp +160 -128
  42. data/rice/detail/Exception_Handler.hpp +2 -112
  43. data/rice/detail/Exception_Handler.ipp +68 -0
  44. data/rice/detail/Exception_Handler_defn.hpp +96 -0
  45. data/rice/detail/Iterator.hpp +93 -0
  46. data/rice/detail/check_ruby_type.cpp +8 -2
  47. data/rice/detail/creation_funcs.ipp +2 -2
  48. data/rice/detail/define_method_and_auto_wrap.hpp +4 -2
  49. data/rice/detail/define_method_and_auto_wrap.ipp +14 -5
  50. data/rice/detail/env.hpp +4 -0
  51. data/rice/detail/method_data.cpp +362 -75
  52. data/rice/detail/method_data.cpp.rpp +301 -0
  53. data/rice/detail/method_data.hpp +6 -18
  54. data/rice/detail/mininode.cpp +1220 -0
  55. data/rice/detail/mininode.cpp.rpp +62 -0
  56. data/rice/detail/mininode.hpp +320 -0
  57. data/rice/detail/mininode.hpp.rpp +119 -0
  58. data/rice/detail/protect.cpp +4 -2
  59. data/rice/detail/ruby.hpp +44 -18
  60. data/rice/detail/ruby_version_code.hpp +6 -0
  61. data/rice/detail/ruby_version_code.hpp.in +6 -0
  62. data/rice/detail/rubysig.hpp +6 -0
  63. data/rice/detail/st.hpp +6 -2
  64. data/rice/detail/wrap_function.hpp +50 -48
  65. data/rice/detail/wrap_function.ipp +48 -48
  66. data/rice/generate_code.rb +43 -293
  67. data/rice/global_function.hpp +10 -4
  68. data/rice/global_function.ipp +1 -2
  69. data/rice/ruby_mark.hpp +13 -0
  70. data/rice/ruby_try_catch.hpp +1 -1
  71. data/rice/rubypp.rb +97 -0
  72. data/rice/to_from_ruby.ipp +3 -3
  73. data/ruby.ac +44 -8
  74. data/ruby/Makefile.in +2 -0
  75. data/ruby/lib/Makefile.in +2 -0
  76. data/ruby/lib/mkmf-rice.rb.in +4 -1
  77. data/ruby/lib/version.rb +3 -0
  78. data/sample/Makefile.am +2 -2
  79. data/sample/Makefile.in +4 -2
  80. data/test/Makefile.am +2 -1
  81. data/test/Makefile.in +7 -2
  82. data/test/test_Array.cpp +2 -2
  83. data/test/test_Class.cpp +4 -1
  84. data/test/test_Critical_Guard.cpp +4 -0
  85. data/test/test_Data_Object.cpp +43 -3
  86. data/test/test_Hash.cpp +3 -3
  87. data/test/test_String.cpp +8 -8
  88. data/test/test_VM.cpp +1 -1
  89. data/test/test_global_functions.cpp +45 -0
  90. data/test/test_rice.rb +5 -0
  91. metadata +115 -98
  92. data/rice/detail/Iterator_Definer.hpp +0 -98
@@ -21,10 +21,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
21
21
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
22
22
  Auto_Member_Function_Wrapper(
23
23
  Func func,
24
- Exception_Handler const * handler)
24
+ Data_Object<Exception_Handler> handler)
25
25
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
26
26
  , func_(func)
27
- , handler_(handler ? handler : new Default_Exception_Handler)
27
+ , handler_(handler)
28
+ , handler_guard_(&handler_)
28
29
  {
29
30
  }
30
31
 
@@ -35,9 +36,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
35
36
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> * wrapper = 0;
36
37
  try
37
38
  {
38
- void * data = detail::method_data();
39
+ Data_Object<Wrapped_Function> data(detail::method_data());
39
40
  wrapper =
40
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data;
41
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data.get();
41
42
  Self_T * obj = from_ruby<Self_T *>(self);
42
43
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14)); Arg15_T arg15(from_ruby<Arg15_T>(ruby_arg15));
43
44
  Func func = wrapper->func_;
@@ -64,10 +65,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
64
65
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T>::
65
66
  Auto_Member_Function_Wrapper(
66
67
  Func func,
67
- Exception_Handler const * handler)
68
+ Data_Object<Exception_Handler> handler)
68
69
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
69
70
  , func_(func)
70
- , handler_(handler ? handler : new Default_Exception_Handler)
71
+ , handler_(handler)
72
+ , handler_guard_(&handler_)
71
73
  {
72
74
  }
73
75
 
@@ -78,9 +80,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
78
80
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> * wrapper = 0;
79
81
  try
80
82
  {
81
- void * data = detail::method_data();
83
+ Data_Object<Wrapped_Function> data(detail::method_data());
82
84
  wrapper =
83
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data;
85
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T, Arg15_T> *)data.get();
84
86
  Self_T * obj = from_ruby<Self_T *>(self);
85
87
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14)); Arg15_T arg15(from_ruby<Arg15_T>(ruby_arg15));
86
88
  Func func = wrapper->func_;
@@ -109,10 +111,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
109
111
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
110
112
  Auto_Member_Function_Wrapper(
111
113
  Func func,
112
- Exception_Handler const * handler)
114
+ Data_Object<Exception_Handler> handler)
113
115
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
114
116
  , func_(func)
115
- , handler_(handler ? handler : new Default_Exception_Handler)
117
+ , handler_(handler)
118
+ , handler_guard_(&handler_)
116
119
  {
117
120
  }
118
121
 
@@ -123,9 +126,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
123
126
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> * wrapper = 0;
124
127
  try
125
128
  {
126
- void * data = detail::method_data();
129
+ Data_Object<Wrapped_Function> data(detail::method_data());
127
130
  wrapper =
128
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data;
131
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data.get();
129
132
  Self_T * obj = from_ruby<Self_T *>(self);
130
133
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14));
131
134
  Func func = wrapper->func_;
@@ -152,10 +155,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
152
155
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T>::
153
156
  Auto_Member_Function_Wrapper(
154
157
  Func func,
155
- Exception_Handler const * handler)
158
+ Data_Object<Exception_Handler> handler)
156
159
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
157
160
  , func_(func)
158
- , handler_(handler ? handler : new Default_Exception_Handler)
161
+ , handler_(handler)
162
+ , handler_guard_(&handler_)
159
163
  {
160
164
  }
161
165
 
@@ -166,9 +170,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
166
170
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> * wrapper = 0;
167
171
  try
168
172
  {
169
- void * data = detail::method_data();
173
+ Data_Object<Wrapped_Function> data(detail::method_data());
170
174
  wrapper =
171
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data;
175
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T, Arg14_T> *)data.get();
172
176
  Self_T * obj = from_ruby<Self_T *>(self);
173
177
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13)); Arg14_T arg14(from_ruby<Arg14_T>(ruby_arg14));
174
178
  Func func = wrapper->func_;
@@ -197,10 +201,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
197
201
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
198
202
  Auto_Member_Function_Wrapper(
199
203
  Func func,
200
- Exception_Handler const * handler)
204
+ Data_Object<Exception_Handler> handler)
201
205
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
202
206
  , func_(func)
203
- , handler_(handler ? handler : new Default_Exception_Handler)
207
+ , handler_(handler)
208
+ , handler_guard_(&handler_)
204
209
  {
205
210
  }
206
211
 
@@ -211,9 +216,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
211
216
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> * wrapper = 0;
212
217
  try
213
218
  {
214
- void * data = detail::method_data();
219
+ Data_Object<Wrapped_Function> data(detail::method_data());
215
220
  wrapper =
216
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data;
221
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data.get();
217
222
  Self_T * obj = from_ruby<Self_T *>(self);
218
223
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13));
219
224
  Func func = wrapper->func_;
@@ -240,10 +245,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
240
245
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T>::
241
246
  Auto_Member_Function_Wrapper(
242
247
  Func func,
243
- Exception_Handler const * handler)
248
+ Data_Object<Exception_Handler> handler)
244
249
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
245
250
  , func_(func)
246
- , handler_(handler ? handler : new Default_Exception_Handler)
251
+ , handler_(handler)
252
+ , handler_guard_(&handler_)
247
253
  {
248
254
  }
249
255
 
@@ -254,9 +260,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
254
260
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> * wrapper = 0;
255
261
  try
256
262
  {
257
- void * data = detail::method_data();
263
+ Data_Object<Wrapped_Function> data(detail::method_data());
258
264
  wrapper =
259
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data;
265
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T, Arg13_T> *)data.get();
260
266
  Self_T * obj = from_ruby<Self_T *>(self);
261
267
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12)); Arg13_T arg13(from_ruby<Arg13_T>(ruby_arg13));
262
268
  Func func = wrapper->func_;
@@ -285,10 +291,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
285
291
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
286
292
  Auto_Member_Function_Wrapper(
287
293
  Func func,
288
- Exception_Handler const * handler)
294
+ Data_Object<Exception_Handler> handler)
289
295
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
290
296
  , func_(func)
291
- , handler_(handler ? handler : new Default_Exception_Handler)
297
+ , handler_(handler)
298
+ , handler_guard_(&handler_)
292
299
  {
293
300
  }
294
301
 
@@ -299,9 +306,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
299
306
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> * wrapper = 0;
300
307
  try
301
308
  {
302
- void * data = detail::method_data();
309
+ Data_Object<Wrapped_Function> data(detail::method_data());
303
310
  wrapper =
304
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data;
311
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data.get();
305
312
  Self_T * obj = from_ruby<Self_T *>(self);
306
313
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12));
307
314
  Func func = wrapper->func_;
@@ -328,10 +335,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
328
335
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T>::
329
336
  Auto_Member_Function_Wrapper(
330
337
  Func func,
331
- Exception_Handler const * handler)
338
+ Data_Object<Exception_Handler> handler)
332
339
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
333
340
  , func_(func)
334
- , handler_(handler ? handler : new Default_Exception_Handler)
341
+ , handler_(handler)
342
+ , handler_guard_(&handler_)
335
343
  {
336
344
  }
337
345
 
@@ -342,9 +350,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
342
350
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> * wrapper = 0;
343
351
  try
344
352
  {
345
- void * data = detail::method_data();
353
+ Data_Object<Wrapped_Function> data(detail::method_data());
346
354
  wrapper =
347
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data;
355
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T, Arg12_T> *)data.get();
348
356
  Self_T * obj = from_ruby<Self_T *>(self);
349
357
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11)); Arg12_T arg12(from_ruby<Arg12_T>(ruby_arg12));
350
358
  Func func = wrapper->func_;
@@ -373,10 +381,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
373
381
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
374
382
  Auto_Member_Function_Wrapper(
375
383
  Func func,
376
- Exception_Handler const * handler)
384
+ Data_Object<Exception_Handler> handler)
377
385
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
378
386
  , func_(func)
379
- , handler_(handler ? handler : new Default_Exception_Handler)
387
+ , handler_(handler)
388
+ , handler_guard_(&handler_)
380
389
  {
381
390
  }
382
391
 
@@ -387,9 +396,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
387
396
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> * wrapper = 0;
388
397
  try
389
398
  {
390
- void * data = detail::method_data();
399
+ Data_Object<Wrapped_Function> data(detail::method_data());
391
400
  wrapper =
392
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data;
401
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data.get();
393
402
  Self_T * obj = from_ruby<Self_T *>(self);
394
403
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11));
395
404
  Func func = wrapper->func_;
@@ -416,10 +425,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
416
425
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T>::
417
426
  Auto_Member_Function_Wrapper(
418
427
  Func func,
419
- Exception_Handler const * handler)
428
+ Data_Object<Exception_Handler> handler)
420
429
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
421
430
  , func_(func)
422
- , handler_(handler ? handler : new Default_Exception_Handler)
431
+ , handler_(handler)
432
+ , handler_guard_(&handler_)
423
433
  {
424
434
  }
425
435
 
@@ -430,9 +440,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
430
440
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> * wrapper = 0;
431
441
  try
432
442
  {
433
- void * data = detail::method_data();
443
+ Data_Object<Wrapped_Function> data(detail::method_data());
434
444
  wrapper =
435
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data;
445
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T, Arg11_T> *)data.get();
436
446
  Self_T * obj = from_ruby<Self_T *>(self);
437
447
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10)); Arg11_T arg11(from_ruby<Arg11_T>(ruby_arg11));
438
448
  Func func = wrapper->func_;
@@ -461,10 +471,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
461
471
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
462
472
  Auto_Member_Function_Wrapper(
463
473
  Func func,
464
- Exception_Handler const * handler)
474
+ Data_Object<Exception_Handler> handler)
465
475
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
466
476
  , func_(func)
467
- , handler_(handler ? handler : new Default_Exception_Handler)
477
+ , handler_(handler)
478
+ , handler_guard_(&handler_)
468
479
  {
469
480
  }
470
481
 
@@ -475,9 +486,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
475
486
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> * wrapper = 0;
476
487
  try
477
488
  {
478
- void * data = detail::method_data();
489
+ Data_Object<Wrapped_Function> data(detail::method_data());
479
490
  wrapper =
480
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data;
491
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data.get();
481
492
  Self_T * obj = from_ruby<Self_T *>(self);
482
493
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10));
483
494
  Func func = wrapper->func_;
@@ -504,10 +515,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
504
515
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T>::
505
516
  Auto_Member_Function_Wrapper(
506
517
  Func func,
507
- Exception_Handler const * handler)
518
+ Data_Object<Exception_Handler> handler)
508
519
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
509
520
  , func_(func)
510
- , handler_(handler ? handler : new Default_Exception_Handler)
521
+ , handler_(handler)
522
+ , handler_guard_(&handler_)
511
523
  {
512
524
  }
513
525
 
@@ -518,9 +530,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
518
530
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> * wrapper = 0;
519
531
  try
520
532
  {
521
- void * data = detail::method_data();
533
+ Data_Object<Wrapped_Function> data(detail::method_data());
522
534
  wrapper =
523
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data;
535
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T, Arg10_T> *)data.get();
524
536
  Self_T * obj = from_ruby<Self_T *>(self);
525
537
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9)); Arg10_T arg10(from_ruby<Arg10_T>(ruby_arg10));
526
538
  Func func = wrapper->func_;
@@ -549,10 +561,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
549
561
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
550
562
  Auto_Member_Function_Wrapper(
551
563
  Func func,
552
- Exception_Handler const * handler)
564
+ Data_Object<Exception_Handler> handler)
553
565
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
554
566
  , func_(func)
555
- , handler_(handler ? handler : new Default_Exception_Handler)
567
+ , handler_(handler)
568
+ , handler_guard_(&handler_)
556
569
  {
557
570
  }
558
571
 
@@ -563,9 +576,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
563
576
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> * wrapper = 0;
564
577
  try
565
578
  {
566
- void * data = detail::method_data();
579
+ Data_Object<Wrapped_Function> data(detail::method_data());
567
580
  wrapper =
568
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data;
581
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data.get();
569
582
  Self_T * obj = from_ruby<Self_T *>(self);
570
583
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9));
571
584
  Func func = wrapper->func_;
@@ -592,10 +605,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
592
605
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T>::
593
606
  Auto_Member_Function_Wrapper(
594
607
  Func func,
595
- Exception_Handler const * handler)
608
+ Data_Object<Exception_Handler> handler)
596
609
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
597
610
  , func_(func)
598
- , handler_(handler ? handler : new Default_Exception_Handler)
611
+ , handler_(handler)
612
+ , handler_guard_(&handler_)
599
613
  {
600
614
  }
601
615
 
@@ -606,9 +620,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
606
620
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> * wrapper = 0;
607
621
  try
608
622
  {
609
- void * data = detail::method_data();
623
+ Data_Object<Wrapped_Function> data(detail::method_data());
610
624
  wrapper =
611
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data;
625
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T, Arg9_T> *)data.get();
612
626
  Self_T * obj = from_ruby<Self_T *>(self);
613
627
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8)); Arg9_T arg9(from_ruby<Arg9_T>(ruby_arg9));
614
628
  Func func = wrapper->func_;
@@ -637,10 +651,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
637
651
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
638
652
  Auto_Member_Function_Wrapper(
639
653
  Func func,
640
- Exception_Handler const * handler)
654
+ Data_Object<Exception_Handler> handler)
641
655
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
642
656
  , func_(func)
643
- , handler_(handler ? handler : new Default_Exception_Handler)
657
+ , handler_(handler)
658
+ , handler_guard_(&handler_)
644
659
  {
645
660
  }
646
661
 
@@ -651,9 +666,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
651
666
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> * wrapper = 0;
652
667
  try
653
668
  {
654
- void * data = detail::method_data();
669
+ Data_Object<Wrapped_Function> data(detail::method_data());
655
670
  wrapper =
656
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data;
671
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data.get();
657
672
  Self_T * obj = from_ruby<Self_T *>(self);
658
673
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8));
659
674
  Func func = wrapper->func_;
@@ -680,10 +695,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
680
695
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T>::
681
696
  Auto_Member_Function_Wrapper(
682
697
  Func func,
683
- Exception_Handler const * handler)
698
+ Data_Object<Exception_Handler> handler)
684
699
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
685
700
  , func_(func)
686
- , handler_(handler ? handler : new Default_Exception_Handler)
701
+ , handler_(handler)
702
+ , handler_guard_(&handler_)
687
703
  {
688
704
  }
689
705
 
@@ -694,9 +710,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
694
710
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> * wrapper = 0;
695
711
  try
696
712
  {
697
- void * data = detail::method_data();
713
+ Data_Object<Wrapped_Function> data(detail::method_data());
698
714
  wrapper =
699
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data;
715
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T, Arg8_T> *)data.get();
700
716
  Self_T * obj = from_ruby<Self_T *>(self);
701
717
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7)); Arg8_T arg8(from_ruby<Arg8_T>(ruby_arg8));
702
718
  Func func = wrapper->func_;
@@ -725,10 +741,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
725
741
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
726
742
  Auto_Member_Function_Wrapper(
727
743
  Func func,
728
- Exception_Handler const * handler)
744
+ Data_Object<Exception_Handler> handler)
729
745
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
730
746
  , func_(func)
731
- , handler_(handler ? handler : new Default_Exception_Handler)
747
+ , handler_(handler)
748
+ , handler_guard_(&handler_)
732
749
  {
733
750
  }
734
751
 
@@ -739,9 +756,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
739
756
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> * wrapper = 0;
740
757
  try
741
758
  {
742
- void * data = detail::method_data();
759
+ Data_Object<Wrapped_Function> data(detail::method_data());
743
760
  wrapper =
744
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data;
761
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data.get();
745
762
  Self_T * obj = from_ruby<Self_T *>(self);
746
763
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7));
747
764
  Func func = wrapper->func_;
@@ -768,10 +785,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
768
785
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T>::
769
786
  Auto_Member_Function_Wrapper(
770
787
  Func func,
771
- Exception_Handler const * handler)
788
+ Data_Object<Exception_Handler> handler)
772
789
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
773
790
  , func_(func)
774
- , handler_(handler ? handler : new Default_Exception_Handler)
791
+ , handler_(handler)
792
+ , handler_guard_(&handler_)
775
793
  {
776
794
  }
777
795
 
@@ -782,9 +800,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
782
800
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> * wrapper = 0;
783
801
  try
784
802
  {
785
- void * data = detail::method_data();
803
+ Data_Object<Wrapped_Function> data(detail::method_data());
786
804
  wrapper =
787
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data;
805
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T, Arg7_T> *)data.get();
788
806
  Self_T * obj = from_ruby<Self_T *>(self);
789
807
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6)); Arg7_T arg7(from_ruby<Arg7_T>(ruby_arg7));
790
808
  Func func = wrapper->func_;
@@ -813,10 +831,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
813
831
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
814
832
  Auto_Member_Function_Wrapper(
815
833
  Func func,
816
- Exception_Handler const * handler)
834
+ Data_Object<Exception_Handler> handler)
817
835
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
818
836
  , func_(func)
819
- , handler_(handler ? handler : new Default_Exception_Handler)
837
+ , handler_(handler)
838
+ , handler_guard_(&handler_)
820
839
  {
821
840
  }
822
841
 
@@ -827,9 +846,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
827
846
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> * wrapper = 0;
828
847
  try
829
848
  {
830
- void * data = detail::method_data();
849
+ Data_Object<Wrapped_Function> data(detail::method_data());
831
850
  wrapper =
832
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data;
851
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data.get();
833
852
  Self_T * obj = from_ruby<Self_T *>(self);
834
853
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6));
835
854
  Func func = wrapper->func_;
@@ -856,10 +875,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
856
875
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T>::
857
876
  Auto_Member_Function_Wrapper(
858
877
  Func func,
859
- Exception_Handler const * handler)
878
+ Data_Object<Exception_Handler> handler)
860
879
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
861
880
  , func_(func)
862
- , handler_(handler ? handler : new Default_Exception_Handler)
881
+ , handler_(handler)
882
+ , handler_guard_(&handler_)
863
883
  {
864
884
  }
865
885
 
@@ -870,9 +890,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
870
890
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> * wrapper = 0;
871
891
  try
872
892
  {
873
- void * data = detail::method_data();
893
+ Data_Object<Wrapped_Function> data(detail::method_data());
874
894
  wrapper =
875
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data;
895
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T, Arg6_T> *)data.get();
876
896
  Self_T * obj = from_ruby<Self_T *>(self);
877
897
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5)); Arg6_T arg6(from_ruby<Arg6_T>(ruby_arg6));
878
898
  Func func = wrapper->func_;
@@ -901,10 +921,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
901
921
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
902
922
  Auto_Member_Function_Wrapper(
903
923
  Func func,
904
- Exception_Handler const * handler)
924
+ Data_Object<Exception_Handler> handler)
905
925
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
906
926
  , func_(func)
907
- , handler_(handler ? handler : new Default_Exception_Handler)
927
+ , handler_(handler)
928
+ , handler_guard_(&handler_)
908
929
  {
909
930
  }
910
931
 
@@ -915,9 +936,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
915
936
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> * wrapper = 0;
916
937
  try
917
938
  {
918
- void * data = detail::method_data();
939
+ Data_Object<Wrapped_Function> data(detail::method_data());
919
940
  wrapper =
920
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data;
941
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data.get();
921
942
  Self_T * obj = from_ruby<Self_T *>(self);
922
943
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5));
923
944
  Func func = wrapper->func_;
@@ -944,10 +965,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
944
965
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T>::
945
966
  Auto_Member_Function_Wrapper(
946
967
  Func func,
947
- Exception_Handler const * handler)
968
+ Data_Object<Exception_Handler> handler)
948
969
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
949
970
  , func_(func)
950
- , handler_(handler ? handler : new Default_Exception_Handler)
971
+ , handler_(handler)
972
+ , handler_guard_(&handler_)
951
973
  {
952
974
  }
953
975
 
@@ -958,9 +980,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
958
980
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> * wrapper = 0;
959
981
  try
960
982
  {
961
- void * data = detail::method_data();
983
+ Data_Object<Wrapped_Function> data(detail::method_data());
962
984
  wrapper =
963
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data;
985
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T, Arg5_T> *)data.get();
964
986
  Self_T * obj = from_ruby<Self_T *>(self);
965
987
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4)); Arg5_T arg5(from_ruby<Arg5_T>(ruby_arg5));
966
988
  Func func = wrapper->func_;
@@ -989,10 +1011,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
989
1011
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
990
1012
  Auto_Member_Function_Wrapper(
991
1013
  Func func,
992
- Exception_Handler const * handler)
1014
+ Data_Object<Exception_Handler> handler)
993
1015
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
994
1016
  , func_(func)
995
- , handler_(handler ? handler : new Default_Exception_Handler)
1017
+ , handler_(handler)
1018
+ , handler_guard_(&handler_)
996
1019
  {
997
1020
  }
998
1021
 
@@ -1003,9 +1026,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
1003
1026
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> * wrapper = 0;
1004
1027
  try
1005
1028
  {
1006
- void * data = detail::method_data();
1029
+ Data_Object<Wrapped_Function> data(detail::method_data());
1007
1030
  wrapper =
1008
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data;
1031
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data.get();
1009
1032
  Self_T * obj = from_ruby<Self_T *>(self);
1010
1033
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4));
1011
1034
  Func func = wrapper->func_;
@@ -1032,10 +1055,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
1032
1055
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T>::
1033
1056
  Auto_Member_Function_Wrapper(
1034
1057
  Func func,
1035
- Exception_Handler const * handler)
1058
+ Data_Object<Exception_Handler> handler)
1036
1059
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1037
1060
  , func_(func)
1038
- , handler_(handler ? handler : new Default_Exception_Handler)
1061
+ , handler_(handler)
1062
+ , handler_guard_(&handler_)
1039
1063
  {
1040
1064
  }
1041
1065
 
@@ -1046,9 +1070,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3, VALUE ruby_a
1046
1070
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> * wrapper = 0;
1047
1071
  try
1048
1072
  {
1049
- void * data = detail::method_data();
1073
+ Data_Object<Wrapped_Function> data(detail::method_data());
1050
1074
  wrapper =
1051
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data;
1075
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T, Arg4_T> *)data.get();
1052
1076
  Self_T * obj = from_ruby<Self_T *>(self);
1053
1077
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3)); Arg4_T arg4(from_ruby<Arg4_T>(ruby_arg4));
1054
1078
  Func func = wrapper->func_;
@@ -1077,10 +1101,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
1077
1101
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T>::
1078
1102
  Auto_Member_Function_Wrapper(
1079
1103
  Func func,
1080
- Exception_Handler const * handler)
1104
+ Data_Object<Exception_Handler> handler)
1081
1105
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1082
1106
  , func_(func)
1083
- , handler_(handler ? handler : new Default_Exception_Handler)
1107
+ , handler_(handler)
1108
+ , handler_guard_(&handler_)
1084
1109
  {
1085
1110
  }
1086
1111
 
@@ -1091,9 +1116,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3)
1091
1116
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T> * wrapper = 0;
1092
1117
  try
1093
1118
  {
1094
- void * data = detail::method_data();
1119
+ Data_Object<Wrapped_Function> data(detail::method_data());
1095
1120
  wrapper =
1096
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T> *)data;
1121
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T, Arg3_T> *)data.get();
1097
1122
  Self_T * obj = from_ruby<Self_T *>(self);
1098
1123
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3));
1099
1124
  Func func = wrapper->func_;
@@ -1120,10 +1145,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T, typ
1120
1145
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T>::
1121
1146
  Auto_Member_Function_Wrapper(
1122
1147
  Func func,
1123
- Exception_Handler const * handler)
1148
+ Data_Object<Exception_Handler> handler)
1124
1149
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1125
1150
  , func_(func)
1126
- , handler_(handler ? handler : new Default_Exception_Handler)
1151
+ , handler_(handler)
1152
+ , handler_guard_(&handler_)
1127
1153
  {
1128
1154
  }
1129
1155
 
@@ -1134,9 +1160,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2, VALUE ruby_arg3)
1134
1160
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T> * wrapper = 0;
1135
1161
  try
1136
1162
  {
1137
- void * data = detail::method_data();
1163
+ Data_Object<Wrapped_Function> data(detail::method_data());
1138
1164
  wrapper =
1139
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T> *)data;
1165
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T, Arg3_T> *)data.get();
1140
1166
  Self_T * obj = from_ruby<Self_T *>(self);
1141
1167
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2)); Arg3_T arg3(from_ruby<Arg3_T>(ruby_arg3));
1142
1168
  Func func = wrapper->func_;
@@ -1165,10 +1191,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T, type
1165
1191
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T>::
1166
1192
  Auto_Member_Function_Wrapper(
1167
1193
  Func func,
1168
- Exception_Handler const * handler)
1194
+ Data_Object<Exception_Handler> handler)
1169
1195
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1170
1196
  , func_(func)
1171
- , handler_(handler ? handler : new Default_Exception_Handler)
1197
+ , handler_(handler)
1198
+ , handler_guard_(&handler_)
1172
1199
  {
1173
1200
  }
1174
1201
 
@@ -1179,9 +1206,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2)
1179
1206
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T> * wrapper = 0;
1180
1207
  try
1181
1208
  {
1182
- void * data = detail::method_data();
1209
+ Data_Object<Wrapped_Function> data(detail::method_data());
1183
1210
  wrapper =
1184
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T> *)data;
1211
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T, Arg2_T> *)data.get();
1185
1212
  Self_T * obj = from_ruby<Self_T *>(self);
1186
1213
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2));
1187
1214
  Func func = wrapper->func_;
@@ -1208,10 +1235,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T, typename Arg2_T>
1208
1235
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T>::
1209
1236
  Auto_Member_Function_Wrapper(
1210
1237
  Func func,
1211
- Exception_Handler const * handler)
1238
+ Data_Object<Exception_Handler> handler)
1212
1239
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1213
1240
  , func_(func)
1214
- , handler_(handler ? handler : new Default_Exception_Handler)
1241
+ , handler_(handler)
1242
+ , handler_guard_(&handler_)
1215
1243
  {
1216
1244
  }
1217
1245
 
@@ -1222,9 +1250,9 @@ call(VALUE self, VALUE ruby_arg1, VALUE ruby_arg2)
1222
1250
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T> * wrapper = 0;
1223
1251
  try
1224
1252
  {
1225
- void * data = detail::method_data();
1253
+ Data_Object<Wrapped_Function> data(detail::method_data());
1226
1254
  wrapper =
1227
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T> *)data;
1255
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T, Arg2_T> *)data.get();
1228
1256
  Self_T * obj = from_ruby<Self_T *>(self);
1229
1257
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1)); Arg2_T arg2(from_ruby<Arg2_T>(ruby_arg2));
1230
1258
  Func func = wrapper->func_;
@@ -1253,10 +1281,11 @@ template<typename Func_T, typename Ret_T, typename Self_T, typename Arg1_T>
1253
1281
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T>::
1254
1282
  Auto_Member_Function_Wrapper(
1255
1283
  Func func,
1256
- Exception_Handler const * handler)
1284
+ Data_Object<Exception_Handler> handler)
1257
1285
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1258
1286
  , func_(func)
1259
- , handler_(handler ? handler : new Default_Exception_Handler)
1287
+ , handler_(handler)
1288
+ , handler_guard_(&handler_)
1260
1289
  {
1261
1290
  }
1262
1291
 
@@ -1267,9 +1296,9 @@ call(VALUE self, VALUE ruby_arg1)
1267
1296
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T> * wrapper = 0;
1268
1297
  try
1269
1298
  {
1270
- void * data = detail::method_data();
1299
+ Data_Object<Wrapped_Function> data(detail::method_data());
1271
1300
  wrapper =
1272
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T> *)data;
1301
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T, Arg1_T> *)data.get();
1273
1302
  Self_T * obj = from_ruby<Self_T *>(self);
1274
1303
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1));
1275
1304
  Func func = wrapper->func_;
@@ -1296,10 +1325,11 @@ template<typename Func_T, typename Self_T, typename Arg1_T>
1296
1325
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T>::
1297
1326
  Auto_Member_Function_Wrapper(
1298
1327
  Func func,
1299
- Exception_Handler const * handler)
1328
+ Data_Object<Exception_Handler> handler)
1300
1329
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1301
1330
  , func_(func)
1302
- , handler_(handler ? handler : new Default_Exception_Handler)
1331
+ , handler_(handler)
1332
+ , handler_guard_(&handler_)
1303
1333
  {
1304
1334
  }
1305
1335
 
@@ -1310,9 +1340,9 @@ call(VALUE self, VALUE ruby_arg1)
1310
1340
  Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T> * wrapper = 0;
1311
1341
  try
1312
1342
  {
1313
- void * data = detail::method_data();
1343
+ Data_Object<Wrapped_Function> data(detail::method_data());
1314
1344
  wrapper =
1315
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T> *)data;
1345
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T, Arg1_T> *)data.get();
1316
1346
  Self_T * obj = from_ruby<Self_T *>(self);
1317
1347
  Arg1_T arg1(from_ruby<Arg1_T>(ruby_arg1));
1318
1348
  Func func = wrapper->func_;
@@ -1341,10 +1371,11 @@ template<typename Func_T, typename Ret_T, typename Self_T>
1341
1371
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T>::
1342
1372
  Auto_Member_Function_Wrapper(
1343
1373
  Func func,
1344
- Exception_Handler const * handler)
1374
+ Data_Object<Exception_Handler> handler)
1345
1375
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1346
1376
  , func_(func)
1347
- , handler_(handler ? handler : new Default_Exception_Handler)
1377
+ , handler_(handler)
1378
+ , handler_guard_(&handler_)
1348
1379
  {
1349
1380
  }
1350
1381
 
@@ -1355,9 +1386,9 @@ call(VALUE self)
1355
1386
  Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T> * wrapper = 0;
1356
1387
  try
1357
1388
  {
1358
- void * data = detail::method_data();
1389
+ Data_Object<Wrapped_Function> data(detail::method_data());
1359
1390
  wrapper =
1360
- (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T> *)data;
1391
+ (Auto_Member_Function_Wrapper<Func_T, Ret_T, Self_T> *)data.get();
1361
1392
  Self_T * obj = from_ruby<Self_T *>(self);
1362
1393
 
1363
1394
  Func func = wrapper->func_;
@@ -1384,10 +1415,11 @@ template<typename Func_T, typename Self_T>
1384
1415
  Auto_Member_Function_Wrapper<Func_T, void, Self_T>::
1385
1416
  Auto_Member_Function_Wrapper(
1386
1417
  Func func,
1387
- Exception_Handler const * handler)
1418
+ Data_Object<Exception_Handler> handler)
1388
1419
  : Wrapped_Function(RUBY_METHOD_FUNC(call), Num_Args)
1389
1420
  , func_(func)
1390
- , handler_(handler ? handler : new Default_Exception_Handler)
1421
+ , handler_(handler)
1422
+ , handler_guard_(&handler_)
1391
1423
  {
1392
1424
  }
1393
1425
 
@@ -1398,9 +1430,9 @@ call(VALUE self)
1398
1430
  Auto_Member_Function_Wrapper<Func_T, void, Self_T> * wrapper = 0;
1399
1431
  try
1400
1432
  {
1401
- void * data = detail::method_data();
1433
+ Data_Object<Wrapped_Function> data(detail::method_data());
1402
1434
  wrapper =
1403
- (Auto_Member_Function_Wrapper<Func_T, void, Self_T> *)data;
1435
+ (Auto_Member_Function_Wrapper<Func_T, void, Self_T> *)data.get();
1404
1436
  Self_T * obj = from_ruby<Self_T *>(self);
1405
1437
 
1406
1438
  Func func = wrapper->func_;