rice 1.0.2 → 1.1.0

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 (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_;