rice 3.0.0 → 4.0.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 (237) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/Gemfile +3 -0
  5. data/README.md +44 -1025
  6. data/Rakefile +95 -12
  7. data/include/rice/rice.hpp +7766 -0
  8. data/lib/mkmf-rice.rb +127 -0
  9. data/lib/version.rb +3 -0
  10. data/rice/Address_Registration_Guard.ipp +75 -32
  11. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  12. data/rice/Arg.hpp +80 -4
  13. data/rice/Arg.ipp +51 -0
  14. data/rice/Constructor.hpp +12 -14
  15. data/rice/Data_Object.ipp +234 -107
  16. data/rice/Data_Object_defn.hpp +77 -117
  17. data/rice/Data_Type.hpp +1 -2
  18. data/rice/Data_Type.ipp +251 -295
  19. data/rice/Data_Type_defn.hpp +175 -243
  20. data/rice/Director.hpp +11 -6
  21. data/rice/Enum.hpp +54 -104
  22. data/rice/Enum.ipp +104 -230
  23. data/rice/Exception.hpp +2 -8
  24. data/rice/Exception.ipp +65 -0
  25. data/rice/Exception_defn.hpp +46 -47
  26. data/rice/Identifier.hpp +28 -28
  27. data/rice/Identifier.ipp +23 -27
  28. data/rice/Return.hpp +39 -0
  29. data/rice/Return.ipp +33 -0
  30. data/rice/detail/Exception_Handler.ipp +22 -62
  31. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  32. data/rice/detail/Iterator.hpp +18 -88
  33. data/rice/detail/Iterator.ipp +47 -0
  34. data/rice/detail/Jump_Tag.hpp +21 -0
  35. data/rice/detail/MethodInfo.hpp +44 -0
  36. data/rice/detail/MethodInfo.ipp +78 -0
  37. data/rice/detail/NativeAttribute.hpp +53 -0
  38. data/rice/detail/NativeAttribute.ipp +83 -0
  39. data/rice/detail/NativeFunction.hpp +69 -0
  40. data/rice/detail/NativeFunction.ipp +248 -0
  41. data/rice/detail/RubyFunction.hpp +39 -0
  42. data/rice/detail/RubyFunction.ipp +92 -0
  43. data/rice/detail/Type.hpp +29 -0
  44. data/rice/detail/Type.ipp +138 -0
  45. data/rice/detail/TypeRegistry.hpp +50 -0
  46. data/rice/detail/TypeRegistry.ipp +106 -0
  47. data/rice/detail/Wrapper.hpp +51 -0
  48. data/rice/detail/Wrapper.ipp +151 -0
  49. data/rice/detail/default_allocation_func.hpp +8 -19
  50. data/rice/detail/default_allocation_func.ipp +9 -8
  51. data/rice/detail/from_ruby.hpp +2 -37
  52. data/rice/detail/from_ruby.ipp +1020 -46
  53. data/rice/detail/from_ruby_defn.hpp +38 -0
  54. data/rice/detail/function_traits.hpp +124 -0
  55. data/rice/detail/method_data.hpp +23 -15
  56. data/rice/detail/method_data.ipp +53 -0
  57. data/rice/detail/rice_traits.hpp +116 -0
  58. data/rice/detail/ruby.hpp +9 -46
  59. data/rice/detail/to_ruby.hpp +3 -17
  60. data/rice/detail/to_ruby.ipp +409 -31
  61. data/rice/detail/to_ruby_defn.hpp +48 -0
  62. data/rice/forward_declares.ipp +82 -0
  63. data/rice/global_function.hpp +16 -20
  64. data/rice/global_function.ipp +8 -17
  65. data/rice/rice.hpp +59 -0
  66. data/rice/ruby_mark.hpp +5 -3
  67. data/rice/ruby_try_catch.hpp +4 -4
  68. data/rice/stl.hpp +11 -0
  69. data/sample/callbacks/extconf.rb +3 -0
  70. data/sample/callbacks/sample_callbacks.cpp +10 -13
  71. data/sample/enum/extconf.rb +3 -0
  72. data/sample/enum/sample_enum.cpp +3 -17
  73. data/sample/enum/test.rb +2 -2
  74. data/sample/inheritance/animals.cpp +8 -24
  75. data/sample/inheritance/extconf.rb +3 -0
  76. data/sample/inheritance/test.rb +1 -1
  77. data/sample/map/extconf.rb +3 -0
  78. data/sample/map/map.cpp +10 -18
  79. data/sample/map/test.rb +1 -1
  80. data/test/embed_ruby.cpp +18 -5
  81. data/test/ext/t1/extconf.rb +3 -0
  82. data/test/ext/t1/t1.cpp +1 -3
  83. data/test/ext/t2/extconf.rb +3 -0
  84. data/test/ext/t2/t2.cpp +1 -1
  85. data/test/extconf.rb +23 -0
  86. data/test/ruby/test_callbacks_sample.rb +28 -0
  87. data/test/ruby/test_multiple_extensions.rb +18 -0
  88. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  89. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  90. data/test/test_Address_Registration_Guard.cpp +23 -10
  91. data/test/test_Array.cpp +129 -73
  92. data/test/test_Attribute.cpp +147 -0
  93. data/test/test_Builtin_Object.cpp +34 -14
  94. data/test/test_Class.cpp +149 -275
  95. data/test/test_Constructor.cpp +10 -9
  96. data/test/test_Data_Object.cpp +133 -192
  97. data/test/test_Data_Type.cpp +322 -252
  98. data/test/test_Director.cpp +54 -41
  99. data/test/test_Enum.cpp +228 -103
  100. data/test/test_Exception.cpp +5 -6
  101. data/test/test_Hash.cpp +31 -30
  102. data/test/test_Identifier.cpp +4 -5
  103. data/test/test_Inheritance.cpp +221 -0
  104. data/test/test_Iterator.cpp +161 -0
  105. data/test/test_Jump_Tag.cpp +1 -1
  106. data/test/test_Keep_Alive.cpp +161 -0
  107. data/test/test_Memory_Management.cpp +2 -4
  108. data/test/test_Module.cpp +167 -110
  109. data/test/test_Object.cpp +41 -21
  110. data/test/test_Ownership.cpp +275 -0
  111. data/test/test_Self.cpp +205 -0
  112. data/test/test_Stl_Optional.cpp +90 -0
  113. data/test/test_Stl_Pair.cpp +144 -0
  114. data/test/test_Stl_SmartPointer.cpp +200 -0
  115. data/test/test_Stl_String.cpp +74 -0
  116. data/test/test_Stl_Vector.cpp +652 -0
  117. data/test/test_String.cpp +1 -2
  118. data/test/test_Struct.cpp +29 -39
  119. data/test/test_Symbol.cpp +1 -2
  120. data/test/test_To_From_Ruby.cpp +249 -285
  121. data/test/test_global_functions.cpp +39 -19
  122. data/test/unittest.hpp +0 -4
  123. metadata +63 -139
  124. data/Doxyfile +0 -2268
  125. data/Makefile.am +0 -26
  126. data/Makefile.in +0 -931
  127. data/README.mingw +0 -8
  128. data/aclocal.m4 +0 -1085
  129. data/ax_cxx_compile_stdcxx.m4 +0 -951
  130. data/bootstrap +0 -8
  131. data/config.guess +0 -1421
  132. data/config.sub +0 -1807
  133. data/configure +0 -7792
  134. data/configure.ac +0 -55
  135. data/depcomp +0 -791
  136. data/doxygen.ac +0 -314
  137. data/doxygen.am +0 -186
  138. data/extconf.rb +0 -70
  139. data/install-sh +0 -501
  140. data/missing +0 -215
  141. data/post-autoconf.rb +0 -22
  142. data/post-automake.rb +0 -28
  143. data/rice/Address_Registration_Guard.cpp +0 -22
  144. data/rice/Arg_impl.hpp +0 -129
  145. data/rice/Arg_operators.cpp +0 -21
  146. data/rice/Arg_operators.hpp +0 -19
  147. data/rice/Array.hpp +0 -214
  148. data/rice/Array.ipp +0 -256
  149. data/rice/Builtin_Object.hpp +0 -8
  150. data/rice/Builtin_Object.ipp +0 -50
  151. data/rice/Builtin_Object_defn.hpp +0 -50
  152. data/rice/Class.cpp +0 -57
  153. data/rice/Class.hpp +0 -8
  154. data/rice/Class.ipp +0 -6
  155. data/rice/Class_defn.hpp +0 -84
  156. data/rice/Data_Type.cpp +0 -54
  157. data/rice/Data_Type_fwd.hpp +0 -12
  158. data/rice/Director.cpp +0 -13
  159. data/rice/Exception.cpp +0 -54
  160. data/rice/Exception_Base.hpp +0 -8
  161. data/rice/Exception_Base.ipp +0 -13
  162. data/rice/Exception_Base_defn.hpp +0 -27
  163. data/rice/Hash.hpp +0 -230
  164. data/rice/Hash.ipp +0 -329
  165. data/rice/Identifier.cpp +0 -8
  166. data/rice/Jump_Tag.hpp +0 -24
  167. data/rice/Makefile.am +0 -121
  168. data/rice/Makefile.in +0 -884
  169. data/rice/Module.cpp +0 -84
  170. data/rice/Module.hpp +0 -8
  171. data/rice/Module.ipp +0 -6
  172. data/rice/Module_defn.hpp +0 -88
  173. data/rice/Module_impl.hpp +0 -281
  174. data/rice/Module_impl.ipp +0 -345
  175. data/rice/Object.cpp +0 -169
  176. data/rice/Object.hpp +0 -8
  177. data/rice/Object.ipp +0 -33
  178. data/rice/Object_defn.hpp +0 -214
  179. data/rice/Require_Guard.hpp +0 -21
  180. data/rice/String.cpp +0 -89
  181. data/rice/String.hpp +0 -91
  182. data/rice/Struct.cpp +0 -117
  183. data/rice/Struct.hpp +0 -162
  184. data/rice/Struct.ipp +0 -26
  185. data/rice/Symbol.cpp +0 -25
  186. data/rice/Symbol.hpp +0 -66
  187. data/rice/Symbol.ipp +0 -44
  188. data/rice/config.hpp +0 -47
  189. data/rice/config.hpp.in +0 -46
  190. data/rice/detail/Arguments.hpp +0 -118
  191. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  192. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  193. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  194. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  195. data/rice/detail/Caster.hpp +0 -103
  196. data/rice/detail/Not_Copyable.hpp +0 -25
  197. data/rice/detail/Wrapped_Function.hpp +0 -33
  198. data/rice/detail/cfp.hpp +0 -24
  199. data/rice/detail/cfp.ipp +0 -51
  200. data/rice/detail/check_ruby_type.cpp +0 -27
  201. data/rice/detail/check_ruby_type.hpp +0 -23
  202. data/rice/detail/creation_funcs.hpp +0 -37
  203. data/rice/detail/creation_funcs.ipp +0 -36
  204. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  205. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  206. data/rice/detail/demangle.cpp +0 -56
  207. data/rice/detail/demangle.hpp +0 -19
  208. data/rice/detail/env.hpp +0 -11
  209. data/rice/detail/method_data.cpp +0 -92
  210. data/rice/detail/node.hpp +0 -13
  211. data/rice/detail/protect.cpp +0 -29
  212. data/rice/detail/protect.hpp +0 -34
  213. data/rice/detail/ruby_version_code.hpp +0 -6
  214. data/rice/detail/ruby_version_code.hpp.in +0 -6
  215. data/rice/detail/st.hpp +0 -22
  216. data/rice/detail/win32.hpp +0 -16
  217. data/rice/detail/wrap_function.hpp +0 -66
  218. data/rice/protect.hpp +0 -38
  219. data/rice/protect.ipp +0 -1134
  220. data/rice/rubypp.rb +0 -97
  221. data/rice/to_from_ruby.hpp +0 -8
  222. data/rice/to_from_ruby.ipp +0 -418
  223. data/rice/to_from_ruby_defn.hpp +0 -70
  224. data/ruby.ac +0 -135
  225. data/ruby/Makefile.am +0 -1
  226. data/ruby/Makefile.in +0 -628
  227. data/ruby/lib/Makefile.am +0 -3
  228. data/ruby/lib/Makefile.in +0 -506
  229. data/ruby/lib/mkmf-rice.rb.in +0 -217
  230. data/ruby/lib/version.rb +0 -3
  231. data/sample/Makefile.am +0 -53
  232. data/sample/Makefile.in +0 -495
  233. data/test/Makefile.am +0 -73
  234. data/test/Makefile.in +0 -1219
  235. data/test/ext/Makefile.am +0 -41
  236. data/test/ext/Makefile.in +0 -483
  237. data/test/test_rice.rb +0 -45
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Builtin_Object__hpp_
2
- #define Rice__Builtin_Object__hpp_
3
-
4
- #include "Builtin_Object_defn.hpp"
5
- #include "Builtin_Object.ipp"
6
-
7
- #endif // Rice__Builtin_Object__hpp_
8
-
@@ -1,50 +0,0 @@
1
- #ifndef Rice__Builtin_Object__ipp_
2
- #define Rice__Builtin_Object__ipp_
3
-
4
- #include "Object.hpp"
5
- #include "protect.hpp"
6
- #include "detail/check_ruby_type.hpp"
7
-
8
- #include <algorithm>
9
-
10
- namespace Rice
11
- {
12
-
13
- namespace detail
14
- {
15
- inline VALUE check_type(Object value, int type)
16
- {
17
- rb_check_type(value, type);
18
- return Qnil;
19
- }
20
- }
21
-
22
- template<int Builtin_Type>
23
- inline Builtin_Object<Builtin_Type>::
24
- Builtin_Object(Object value)
25
- : Object(value)
26
- , obj_((RObject*)(value.value()))
27
- {
28
- protect(detail::check_type, value, Builtin_Type);
29
- }
30
-
31
- template<int Builtin_Type>
32
- inline Builtin_Object<Builtin_Type>::
33
- Builtin_Object(Builtin_Object<Builtin_Type> const & other)
34
- : Object(other.value())
35
- , obj_(other.obj_)
36
- {
37
- }
38
-
39
- template<int Builtin_Type>
40
- inline void Builtin_Object<Builtin_Type>::
41
- swap(Builtin_Object<Builtin_Type> & ref)
42
- {
43
- std::swap(obj_, ref.obj_);
44
- Object::swap(ref);
45
- }
46
-
47
- } // namespace Rice
48
-
49
- #endif // Rice__Builtin_Object__ipp_
50
-
@@ -1,50 +0,0 @@
1
- #ifndef Rice__Builtin_Object_defn__hpp_
2
- #define Rice__Builtin_Object_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "detail/ruby.hpp"
6
-
7
- namespace Rice
8
- {
9
-
10
- //! A smartpointer-like wrapper for Ruby builtin objects.
11
- /*! A builtin object is one of Ruby's internal types, e.g. RArray or
12
- * RString. Every builtin type structure has a corresponding integer
13
- * type number (e.g T_ARRAY for RArray or T_STRING for RString). This
14
- * class is a wrapper for those types of objects, primarily useful as a
15
- * base class for other wrapper classes like Array and Hash.
16
- */
17
- template<int Builtin_Type>
18
- class Builtin_Object
19
- : public Object
20
- {
21
- public:
22
- //! Wrap an already allocated Ruby object.
23
- /*! Checks to see if the object is an object of type Builtin_Type; a
24
- * C++ exception is thrown if this is not the case.
25
- * \param value the object to be wrapped.
26
- */
27
- Builtin_Object(Object value);
28
-
29
- //! Make a copy of a Builtin_Object
30
- /*! \param other the Builtin_Object to be copied.
31
- */
32
- Builtin_Object(Builtin_Object const & other);
33
-
34
- RObject & operator*() const { return *obj_; } //!< Return a reference to obj_
35
- RObject * operator->() const { return obj_; } //!< Return a pointer to obj_
36
- RObject * get() const { return obj_; } //!< Return a pointer to obj_
37
-
38
- //! Swap with another builtin object of the same type
39
- /*! \param ref the object with which to swap.
40
- */
41
- void swap(Builtin_Object<Builtin_Type> & ref);
42
-
43
- private:
44
- RObject * obj_;
45
- };
46
-
47
- } // namespace Rice
48
-
49
- #endif // Rice__Builtin_Object_defn__hpp_
50
-
data/rice/Class.cpp DELETED
@@ -1,57 +0,0 @@
1
- #include "Class.hpp"
2
- #include "Exception.hpp"
3
- #include "detail/creation_funcs.hpp"
4
-
5
- Rice::Class::
6
- Class()
7
- : Module_impl<Module, Class>()
8
- {
9
- }
10
-
11
- Rice::Class::
12
- Class(VALUE v)
13
- : Module_impl<Module, Class>(v)
14
- {
15
- if(::rb_type(v) != T_CLASS)
16
- {
17
- throw Exception(
18
- rb_eTypeError,
19
- "Expected a Class but got a %s",
20
- rb_class2name(CLASS_OF(v))); // TODO: might raise an exception
21
- }
22
- }
23
-
24
- Rice::Class & Rice::Class::
25
- undef_creation_funcs()
26
- {
27
- detail::undef_creation_funcs(*this);
28
- return *this;
29
- }
30
-
31
- Rice::Class Rice::
32
- define_class_under(
33
- Rice::Object module,
34
- char const * name,
35
- Rice::Object superclass)
36
- {
37
- VALUE v = rb_define_class_under(module, name, superclass);
38
- return Class(v);
39
- }
40
-
41
- Rice::Class Rice::
42
- define_class(
43
- char const * name,
44
- Rice::Object superclass)
45
- {
46
- VALUE v = rb_define_class(name, superclass);
47
- return Class(v);
48
- }
49
-
50
- Rice::Class Rice::
51
- anonymous_class(
52
- Rice::Object superclass)
53
- {
54
- VALUE v = Class(rb_cClass).call("new");
55
- return Class(v);
56
- }
57
-
data/rice/Class.hpp DELETED
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Class__hpp_
2
- #define Rice__Class__hpp_
3
-
4
- #include "Class_defn.hpp"
5
- #include "Class.ipp"
6
-
7
- #endif // Rice__Class__hpp_
8
-
data/rice/Class.ipp DELETED
@@ -1,6 +0,0 @@
1
- #ifndef Rice__Class__ipp_
2
- #define Rice__Class__ipp_
3
-
4
- #include "Module.ipp"
5
-
6
- #endif // Rice__Class__ipp_
data/rice/Class_defn.hpp DELETED
@@ -1,84 +0,0 @@
1
- #ifndef Rice__Class_defn__hpp_
2
- #define Rice__Class_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
- #include "Module_impl.hpp"
6
- #include "Module_defn.hpp"
7
- #include "to_from_ruby_defn.hpp"
8
- #include "Identifier.hpp"
9
-
10
- /*!
11
- * \example inheritance/animals.cpp
12
- * \example callbacks/sample_callbacks.cpp
13
- */
14
-
15
- namespace Rice
16
- {
17
-
18
- //! A helper for defining a Class and its methods.
19
- /*! This class provides a C++-style interface to ruby's Class class and
20
- * for defining methods on that class.
21
- */
22
- class Class
23
- : public Module_impl<Module, Class>
24
- {
25
- public:
26
- //! Default construct a new class wrapper and initialize it to
27
- //! rb_cObject.
28
- Class();
29
-
30
- //! Construct a new class wrapper from a ruby object of type T_CLASS.
31
- Class(VALUE v);
32
-
33
- //! Disallow creation of an instance from Ruby code.
34
- /*! Undefines the singleton method allocate (or new, if using a
35
- * version of ruby prior to 1.7) and the instance method initialize.
36
- */
37
- Class & undef_creation_funcs();
38
- };
39
-
40
- //! Define a new class in the namespace given by module.
41
- /*! \param module the Module in which to define the class.
42
- * \param name the name of the class.
43
- * \param superclass the base class to use.
44
- * \return the new class.
45
- */
46
- Class define_class_under(
47
- Object module,
48
- char const * name,
49
- Object superclass = rb_cObject);
50
-
51
- //! Define a new class in the default namespace.
52
- /*! \param name the name of the class.
53
- * \param superclass the base class to use.
54
- * \return the new class.
55
- */
56
- Class define_class(
57
- char const * name,
58
- Object superclass = rb_cObject);
59
-
60
- //! Create a new anonymous class.
61
- /*! \param superclass the base class to use.
62
- * \return the new class.
63
- */
64
- Class anonymous_class(
65
- Object superclass = rb_cObject);
66
-
67
- } // namespace Rice
68
-
69
- template<>
70
- inline
71
- Rice::Class from_ruby<Rice::Class>(Rice::Object x)
72
- {
73
- return Rice::Class(x);
74
- }
75
-
76
- template<>
77
- inline
78
- Rice::Object to_ruby<Rice::Class>(Rice::Class const & x)
79
- {
80
- return x;
81
- }
82
-
83
- #endif // Rice__Class_defn__hpp_
84
-
data/rice/Data_Type.cpp DELETED
@@ -1,54 +0,0 @@
1
- #include "Data_Type.hpp"
2
-
3
- Rice::Data_Type_Base::Casters * Rice::Data_Type_Base::casters_ = 0;
4
-
5
- Rice::Data_Type_Base::
6
- Data_Type_Base()
7
- : Module_impl<Class, Data_Type_Base>()
8
- {
9
- }
10
-
11
- Rice::Data_Type_Base::
12
- Data_Type_Base(VALUE v)
13
- : Module_impl<Class, Data_Type_Base>(v)
14
- {
15
- }
16
-
17
- Rice::Data_Type_Base::
18
- ~Data_Type_Base()
19
- {
20
- }
21
-
22
- Rice::Data_Type_Base::Casters &
23
- Rice::Data_Type_Base::
24
- casters()
25
- {
26
- // Initialize the casters_ if it is null
27
- if (!casters_)
28
- {
29
- // First, see if it has been previously registered with the
30
- // interpreter (possibly by another extension)
31
- Class object(rb_cObject);
32
- Object casters_object(object.attr_get("__rice_casters__"));
33
-
34
- if (casters_object.is_nil())
35
- {
36
- // If it is unset, then set it for the first time
37
- Data_Object<Casters> casters(
38
- new Casters,
39
- rb_cObject);
40
- object.iv_set("__rice_casters__", casters);
41
- casters_ = casters.get();
42
- }
43
- else
44
- {
45
- // If it is set, then use the existing value
46
- Data_Object<Casters> casters(
47
- casters_object);
48
- casters_ = casters.get();
49
- }
50
- }
51
-
52
- return *casters_;
53
- }
54
-
@@ -1,12 +0,0 @@
1
- #ifndef Rice__Data_Type_fwd__hpp_
2
- #define Rice__Data_Type_fwd__hpp_
3
-
4
- namespace Rice
5
- {
6
-
7
- template<typename T>
8
- class Data_Type;
9
-
10
- } // Rice
11
-
12
- #endif // Rice__Data_Type_fwd__hpp_
data/rice/Director.cpp DELETED
@@ -1,13 +0,0 @@
1
- #include "Director.hpp"
2
-
3
- namespace Rice {
4
-
5
- Director::Director(Object self) {
6
- self_ = self;
7
- }
8
-
9
- void Director::raisePureVirtual() const {
10
- rb_raise(rb_eNotImpError, "Cannot call super() into a pure-virtual C++ method");
11
- }
12
-
13
- }
data/rice/Exception.cpp DELETED
@@ -1,54 +0,0 @@
1
- #include "Exception.hpp"
2
- #include "protect.hpp"
3
- #include "to_from_ruby.hpp"
4
- #include "detail/ruby.hpp"
5
-
6
- #include <stdarg.h>
7
- #define va_init_list(a,b) va_start(a,b)
8
-
9
- Rice::Exception::
10
- Exception(VALUE e)
11
- : Exception_Base(e)
12
- , message_(Qnil)
13
- , message_guard_(&message_)
14
- {
15
- }
16
-
17
- Rice::Exception::
18
- Exception(Exception const & other)
19
- : Exception_Base(other)
20
- , message_(other.message_)
21
- , message_guard_(&message_)
22
- {
23
- }
24
-
25
- Rice::Exception::
26
- Exception(Object exc, char const * fmt, ...)
27
- : Exception_Base(Qnil)
28
- , message_(Qnil)
29
- , message_guard_(&message_)
30
- {
31
- va_list args;
32
- char buf[BUFSIZ];
33
-
34
- va_init_list(args, fmt);
35
- vsnprintf(buf, BUFSIZ, fmt, args);
36
- buf[BUFSIZ - 1] = '\0';
37
- va_end(args);
38
-
39
- set_value(protect(rb_exc_new2, exc, buf));
40
- }
41
-
42
- Rice::String Rice::Exception::
43
- message() const
44
- {
45
- return protect(rb_funcall, value(), rb_intern("message"), 0);
46
- }
47
-
48
- char const * Rice::Exception::
49
- what() const throw()
50
- {
51
- message_ = message();
52
- return from_ruby<char const *>(message_);
53
- }
54
-
@@ -1,8 +0,0 @@
1
- #ifndef Rice__Exception_Base__hpp_
2
- #define Rice__Exception_Base__hpp_
3
-
4
- #include "Exception_Base_defn.hpp"
5
- #include "Exception_Base.ipp"
6
-
7
- #endif // Rice__Exception_Base__hpp_
8
-
@@ -1,13 +0,0 @@
1
- #include "Object.hpp"
2
-
3
- inline Rice::Exception_Base::
4
- Exception_Base(VALUE v)
5
- : Object(v)
6
- {
7
- }
8
-
9
- inline Rice::Exception_Base::
10
- ~Exception_Base() throw()
11
- {
12
- }
13
-
@@ -1,27 +0,0 @@
1
- #ifndef Rice__Exception_Base_defn__hpp_
2
- #define Rice__Exception_Base_defn__hpp_
3
-
4
- #include "Object_defn.hpp"
5
-
6
- namespace Rice
7
- {
8
-
9
- //! An abstract interface for Exception
10
- /*! This class exists to prevent a circular reference between
11
- * Exception.hpp and ruby_try_catch.hpp
12
- */
13
- class Exception_Base
14
- : public std::exception
15
- , public Object
16
- {
17
- public:
18
- Exception_Base(VALUE v);
19
-
20
- virtual ~Exception_Base() throw() = 0;
21
-
22
- virtual char const * what() const throw() = 0;
23
- };
24
-
25
- } // Rice
26
-
27
- #endif // Rice__Exception_Base_defn__hpp_