rice 3.0.0 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +121 -0
- data/CONTRIBUTORS.md +19 -0
- data/Gemfile +3 -0
- data/README.md +44 -1025
- data/Rakefile +95 -12
- data/include/rice/rice.hpp +7766 -0
- data/include/rice/stl.hpp +1113 -0
- data/lib/mkmf-rice.rb +127 -0
- data/lib/version.rb +3 -0
- data/rice/Address_Registration_Guard.ipp +75 -32
- data/rice/Address_Registration_Guard_defn.hpp +60 -56
- data/rice/Arg.hpp +80 -4
- data/rice/Arg.ipp +51 -0
- data/rice/Constructor.hpp +12 -14
- data/rice/Data_Object.ipp +234 -107
- data/rice/Data_Object_defn.hpp +77 -117
- data/rice/Data_Type.hpp +1 -2
- data/rice/Data_Type.ipp +251 -295
- data/rice/Data_Type_defn.hpp +175 -243
- data/rice/Director.hpp +11 -6
- data/rice/Enum.hpp +54 -104
- data/rice/Enum.ipp +104 -230
- data/rice/Exception.hpp +2 -8
- data/rice/Exception.ipp +65 -0
- data/rice/Exception_defn.hpp +46 -47
- data/rice/Identifier.hpp +28 -28
- data/rice/Identifier.ipp +23 -27
- data/rice/Return.hpp +39 -0
- data/rice/Return.ipp +33 -0
- data/rice/detail/Exception_Handler.ipp +22 -62
- data/rice/detail/Exception_Handler_defn.hpp +76 -91
- data/rice/detail/Iterator.hpp +18 -88
- data/rice/detail/Iterator.ipp +47 -0
- data/rice/detail/Jump_Tag.hpp +21 -0
- data/rice/detail/MethodInfo.hpp +44 -0
- data/rice/detail/MethodInfo.ipp +78 -0
- data/rice/detail/NativeAttribute.hpp +53 -0
- data/rice/detail/NativeAttribute.ipp +83 -0
- data/rice/detail/NativeFunction.hpp +69 -0
- data/rice/detail/NativeFunction.ipp +248 -0
- data/rice/detail/RubyFunction.hpp +39 -0
- data/rice/detail/RubyFunction.ipp +92 -0
- data/rice/detail/Type.hpp +29 -0
- data/rice/detail/Type.ipp +138 -0
- data/rice/detail/TypeRegistry.hpp +50 -0
- data/rice/detail/TypeRegistry.ipp +106 -0
- data/rice/detail/Wrapper.hpp +51 -0
- data/rice/detail/Wrapper.ipp +151 -0
- data/rice/detail/default_allocation_func.hpp +8 -19
- data/rice/detail/default_allocation_func.ipp +9 -8
- data/rice/detail/from_ruby.hpp +2 -37
- data/rice/detail/from_ruby.ipp +1020 -46
- data/rice/detail/from_ruby_defn.hpp +38 -0
- data/rice/detail/function_traits.hpp +124 -0
- data/rice/detail/method_data.hpp +23 -15
- data/rice/detail/method_data.ipp +53 -0
- data/rice/detail/rice_traits.hpp +116 -0
- data/rice/detail/ruby.hpp +9 -46
- data/rice/detail/to_ruby.hpp +3 -17
- data/rice/detail/to_ruby.ipp +409 -31
- data/rice/detail/to_ruby_defn.hpp +48 -0
- data/rice/forward_declares.ipp +82 -0
- data/rice/global_function.hpp +16 -20
- data/rice/global_function.ipp +8 -17
- data/rice/rice.hpp +59 -0
- data/rice/ruby_mark.hpp +5 -3
- data/rice/ruby_try_catch.hpp +4 -4
- data/rice/stl.hpp +11 -0
- data/sample/callbacks/extconf.rb +3 -0
- data/sample/callbacks/sample_callbacks.cpp +10 -13
- data/sample/enum/extconf.rb +3 -0
- data/sample/enum/sample_enum.cpp +3 -17
- data/sample/enum/test.rb +2 -2
- data/sample/inheritance/animals.cpp +8 -24
- data/sample/inheritance/extconf.rb +3 -0
- data/sample/inheritance/test.rb +1 -1
- data/sample/map/extconf.rb +3 -0
- data/sample/map/map.cpp +10 -18
- data/sample/map/test.rb +1 -1
- data/test/embed_ruby.cpp +18 -5
- data/test/ext/t1/extconf.rb +3 -0
- data/test/ext/t1/t1.cpp +1 -3
- data/test/ext/t2/extconf.rb +3 -0
- data/test/ext/t2/t2.cpp +1 -1
- data/test/extconf.rb +23 -0
- data/test/ruby/test_callbacks_sample.rb +28 -0
- data/test/ruby/test_multiple_extensions.rb +18 -0
- data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
- data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
- data/test/test_Address_Registration_Guard.cpp +23 -10
- data/test/test_Array.cpp +129 -73
- data/test/test_Attribute.cpp +147 -0
- data/test/test_Builtin_Object.cpp +34 -14
- data/test/test_Class.cpp +149 -275
- data/test/test_Constructor.cpp +10 -9
- data/test/test_Data_Object.cpp +133 -192
- data/test/test_Data_Type.cpp +322 -252
- data/test/test_Director.cpp +54 -41
- data/test/test_Enum.cpp +228 -103
- data/test/test_Exception.cpp +5 -6
- data/test/test_Hash.cpp +31 -30
- data/test/test_Identifier.cpp +4 -5
- data/test/test_Inheritance.cpp +221 -0
- data/test/test_Iterator.cpp +161 -0
- data/test/test_Jump_Tag.cpp +1 -1
- data/test/test_Keep_Alive.cpp +161 -0
- data/test/test_Memory_Management.cpp +2 -4
- data/test/test_Module.cpp +167 -110
- data/test/test_Object.cpp +41 -21
- data/test/test_Ownership.cpp +275 -0
- data/test/test_Self.cpp +205 -0
- data/test/test_Stl_Optional.cpp +90 -0
- data/test/test_Stl_Pair.cpp +144 -0
- data/test/test_Stl_SmartPointer.cpp +200 -0
- data/test/test_Stl_String.cpp +74 -0
- data/test/test_Stl_Vector.cpp +652 -0
- data/test/test_String.cpp +1 -2
- data/test/test_Struct.cpp +29 -39
- data/test/test_Symbol.cpp +1 -2
- data/test/test_To_From_Ruby.cpp +249 -285
- data/test/test_global_functions.cpp +39 -19
- data/test/unittest.hpp +0 -4
- metadata +70 -141
- data/Doxyfile +0 -2268
- data/Makefile.am +0 -26
- data/Makefile.in +0 -931
- data/README.mingw +0 -8
- data/aclocal.m4 +0 -1085
- data/ax_cxx_compile_stdcxx.m4 +0 -951
- data/bootstrap +0 -8
- data/config.guess +0 -1421
- data/config.sub +0 -1807
- data/configure +0 -7792
- data/configure.ac +0 -55
- data/depcomp +0 -791
- data/doxygen.ac +0 -314
- data/doxygen.am +0 -186
- data/extconf.rb +0 -70
- data/install-sh +0 -501
- data/missing +0 -215
- data/post-autoconf.rb +0 -22
- data/post-automake.rb +0 -28
- data/rice/Address_Registration_Guard.cpp +0 -22
- data/rice/Arg_impl.hpp +0 -129
- data/rice/Arg_operators.cpp +0 -21
- data/rice/Arg_operators.hpp +0 -19
- data/rice/Array.hpp +0 -214
- data/rice/Array.ipp +0 -256
- data/rice/Builtin_Object.hpp +0 -8
- data/rice/Builtin_Object.ipp +0 -50
- data/rice/Builtin_Object_defn.hpp +0 -50
- data/rice/Class.cpp +0 -57
- data/rice/Class.hpp +0 -8
- data/rice/Class.ipp +0 -6
- data/rice/Class_defn.hpp +0 -84
- data/rice/Data_Type.cpp +0 -54
- data/rice/Data_Type_fwd.hpp +0 -12
- data/rice/Director.cpp +0 -13
- data/rice/Exception.cpp +0 -54
- data/rice/Exception_Base.hpp +0 -8
- data/rice/Exception_Base.ipp +0 -13
- data/rice/Exception_Base_defn.hpp +0 -27
- data/rice/Hash.hpp +0 -230
- data/rice/Hash.ipp +0 -329
- data/rice/Identifier.cpp +0 -8
- data/rice/Jump_Tag.hpp +0 -24
- data/rice/Makefile.am +0 -121
- data/rice/Makefile.in +0 -884
- data/rice/Module.cpp +0 -84
- data/rice/Module.hpp +0 -8
- data/rice/Module.ipp +0 -6
- data/rice/Module_defn.hpp +0 -88
- data/rice/Module_impl.hpp +0 -281
- data/rice/Module_impl.ipp +0 -345
- data/rice/Object.cpp +0 -169
- data/rice/Object.hpp +0 -8
- data/rice/Object.ipp +0 -33
- data/rice/Object_defn.hpp +0 -214
- data/rice/Require_Guard.hpp +0 -21
- data/rice/String.cpp +0 -89
- data/rice/String.hpp +0 -91
- data/rice/Struct.cpp +0 -117
- data/rice/Struct.hpp +0 -162
- data/rice/Struct.ipp +0 -26
- data/rice/Symbol.cpp +0 -25
- data/rice/Symbol.hpp +0 -66
- data/rice/Symbol.ipp +0 -44
- data/rice/config.hpp +0 -47
- data/rice/config.hpp.in +0 -46
- data/rice/detail/Arguments.hpp +0 -118
- data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
- data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
- data/rice/detail/Caster.hpp +0 -103
- data/rice/detail/Not_Copyable.hpp +0 -25
- data/rice/detail/Wrapped_Function.hpp +0 -33
- data/rice/detail/cfp.hpp +0 -24
- data/rice/detail/cfp.ipp +0 -51
- data/rice/detail/check_ruby_type.cpp +0 -27
- data/rice/detail/check_ruby_type.hpp +0 -23
- data/rice/detail/creation_funcs.hpp +0 -37
- data/rice/detail/creation_funcs.ipp +0 -36
- data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
- data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
- data/rice/detail/demangle.cpp +0 -56
- data/rice/detail/demangle.hpp +0 -19
- data/rice/detail/env.hpp +0 -11
- data/rice/detail/method_data.cpp +0 -92
- data/rice/detail/node.hpp +0 -13
- data/rice/detail/protect.cpp +0 -29
- data/rice/detail/protect.hpp +0 -34
- data/rice/detail/ruby_version_code.hpp +0 -6
- data/rice/detail/ruby_version_code.hpp.in +0 -6
- data/rice/detail/st.hpp +0 -22
- data/rice/detail/win32.hpp +0 -16
- data/rice/detail/wrap_function.hpp +0 -66
- data/rice/protect.hpp +0 -38
- data/rice/protect.ipp +0 -1134
- data/rice/rubypp.rb +0 -97
- data/rice/to_from_ruby.hpp +0 -8
- data/rice/to_from_ruby.ipp +0 -418
- data/rice/to_from_ruby_defn.hpp +0 -70
- data/ruby/Makefile.am +0 -1
- data/ruby/Makefile.in +0 -628
- data/ruby/lib/Makefile.am +0 -3
- data/ruby/lib/Makefile.in +0 -506
- data/ruby/lib/mkmf-rice.rb.in +0 -217
- data/ruby/lib/version.rb +0 -3
- data/ruby.ac +0 -135
- data/sample/Makefile.am +0 -53
- data/sample/Makefile.in +0 -495
- data/test/Makefile.am +0 -73
- data/test/Makefile.in +0 -1219
- data/test/ext/Makefile.am +0 -41
- data/test/ext/Makefile.in +0 -483
- data/test/test_rice.rb +0 -45
data/rice/detail/Caster.hpp
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__Caster__hpp_
|
|
2
|
-
#define Rice__detail__Caster__hpp_
|
|
3
|
-
|
|
4
|
-
#include "../Module.hpp"
|
|
5
|
-
#include <stdexcept>
|
|
6
|
-
|
|
7
|
-
namespace Rice
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
namespace detail
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
class Abstract_Caster
|
|
14
|
-
{
|
|
15
|
-
public:
|
|
16
|
-
virtual void * cast_to_base(void * derived, Module type) const = 0;
|
|
17
|
-
virtual ~Abstract_Caster() { }
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
template<typename Derived_T, typename Base_T>
|
|
21
|
-
class Caster
|
|
22
|
-
: public Abstract_Caster
|
|
23
|
-
{
|
|
24
|
-
public:
|
|
25
|
-
Caster(Abstract_Caster * base_caster, Module type)
|
|
26
|
-
: base_caster_(base_caster)
|
|
27
|
-
, type_(type)
|
|
28
|
-
{
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
protected:
|
|
32
|
-
virtual void * cast_to_base(void * derived, Module type) const
|
|
33
|
-
{
|
|
34
|
-
if(type.value() == type_.value())
|
|
35
|
-
{
|
|
36
|
-
Derived_T * d(static_cast<Derived_T *>(derived));
|
|
37
|
-
return static_cast<Base_T *>(d);
|
|
38
|
-
}
|
|
39
|
-
else
|
|
40
|
-
{
|
|
41
|
-
if(base_caster_)
|
|
42
|
-
{
|
|
43
|
-
return base_caster_->cast_to_base(derived, type);
|
|
44
|
-
}
|
|
45
|
-
else
|
|
46
|
-
{
|
|
47
|
-
std::string s = "bad cast. No caster found for ";
|
|
48
|
-
s += type_.name().str();
|
|
49
|
-
throw std::runtime_error(s);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
private:
|
|
55
|
-
Abstract_Caster * base_caster_;
|
|
56
|
-
Module type_;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
template<typename To_T, typename From_T>
|
|
60
|
-
class Implicit_Caster
|
|
61
|
-
: public Abstract_Caster
|
|
62
|
-
{
|
|
63
|
-
public:
|
|
64
|
-
Implicit_Caster(Abstract_Caster * base_caster, Module type)
|
|
65
|
-
: base_caster_(base_caster)
|
|
66
|
-
, type_(type)
|
|
67
|
-
{
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
protected:
|
|
71
|
-
virtual void * cast_to_base(void * derived, Module type) const
|
|
72
|
-
{
|
|
73
|
-
if(type.value() == type_.value())
|
|
74
|
-
{
|
|
75
|
-
return new To_T( *static_cast<From_T*>(derived) );
|
|
76
|
-
}
|
|
77
|
-
else
|
|
78
|
-
{
|
|
79
|
-
if(base_caster_)
|
|
80
|
-
{
|
|
81
|
-
return base_caster_->cast_to_base(derived, type);
|
|
82
|
-
}
|
|
83
|
-
else
|
|
84
|
-
{
|
|
85
|
-
std::string s = "bad cast. No implicit caster found for ";
|
|
86
|
-
s += type_.name().str();
|
|
87
|
-
throw std::runtime_error(s);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
private:
|
|
93
|
-
Abstract_Caster * base_caster_;
|
|
94
|
-
Module type_;
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
} // detail
|
|
100
|
-
|
|
101
|
-
} // Rice
|
|
102
|
-
|
|
103
|
-
#endif //Rice__detail__Caster__hpp_
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__Not_Copyable__hpp_
|
|
2
|
-
#define Rice__Not_Copyable__hpp_
|
|
3
|
-
|
|
4
|
-
namespace Rice
|
|
5
|
-
{
|
|
6
|
-
|
|
7
|
-
namespace detail
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
// Inherit from Not_Copyable to prevent copying instances of a class.
|
|
11
|
-
class Not_Copyable
|
|
12
|
-
{
|
|
13
|
-
public:
|
|
14
|
-
Not_Copyable() { }
|
|
15
|
-
|
|
16
|
-
private:
|
|
17
|
-
Not_Copyable(Not_Copyable const &);
|
|
18
|
-
Not_Copyable & operator=(Not_Copyable const &);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
} // namespace detail
|
|
22
|
-
|
|
23
|
-
} // namespace Rice
|
|
24
|
-
|
|
25
|
-
#endif // Rice__Not_Copyable__hpp_
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__Wrapped_Function__hpp_
|
|
2
|
-
#define Rice__detail__Wrapped_Function__hpp_
|
|
3
|
-
|
|
4
|
-
#include "ruby.hpp"
|
|
5
|
-
|
|
6
|
-
namespace Rice
|
|
7
|
-
{
|
|
8
|
-
|
|
9
|
-
namespace detail
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
class Wrapped_Function
|
|
13
|
-
{
|
|
14
|
-
public:
|
|
15
|
-
Wrapped_Function(RUBY_METHOD_FUNC func, int arity)
|
|
16
|
-
: func_(func)
|
|
17
|
-
, arity_(arity)
|
|
18
|
-
{
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
RUBY_METHOD_FUNC func() const { return func_; }
|
|
22
|
-
int arity() const { return arity_; }
|
|
23
|
-
|
|
24
|
-
private:
|
|
25
|
-
RUBY_METHOD_FUNC func_;
|
|
26
|
-
int arity_;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
} // detail
|
|
30
|
-
|
|
31
|
-
} // Rice
|
|
32
|
-
|
|
33
|
-
#endif // Rice__detail__Wrapped_Function__hpp_
|
data/rice/detail/cfp.hpp
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__cfp__hpp_
|
|
2
|
-
#define Rice__detail__cfp__hpp_
|
|
3
|
-
|
|
4
|
-
#include "ruby.hpp"
|
|
5
|
-
|
|
6
|
-
namespace Rice
|
|
7
|
-
{
|
|
8
|
-
|
|
9
|
-
namespace detail
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
VALUE * cfp();
|
|
13
|
-
|
|
14
|
-
VALUE & cfp_data_memo_node_and_pc(VALUE * cfp);
|
|
15
|
-
VALUE & cfp_self(VALUE * cfp);
|
|
16
|
-
VALUE & cfp_method_class(VALUE * cfp);
|
|
17
|
-
|
|
18
|
-
} // detail
|
|
19
|
-
|
|
20
|
-
} // Rice
|
|
21
|
-
|
|
22
|
-
#include "cfp.ipp"
|
|
23
|
-
|
|
24
|
-
#endif // Rice__detail__cfp__hpp_
|
data/rice/detail/cfp.ipp
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
namespace detail
|
|
2
|
-
{
|
|
3
|
-
|
|
4
|
-
struct rb_thread_struct
|
|
5
|
-
{
|
|
6
|
-
VALUE self;
|
|
7
|
-
void *vm;
|
|
8
|
-
VALUE *stack;
|
|
9
|
-
unsigned long stack_size;
|
|
10
|
-
VALUE *cfp;
|
|
11
|
-
/* ... */
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
typedef struct rb_thread_struct rb_thread_t;
|
|
15
|
-
|
|
16
|
-
} // namespace detail
|
|
17
|
-
|
|
18
|
-
extern "C" detail::rb_thread_t * ruby_current_thread;
|
|
19
|
-
|
|
20
|
-
inline
|
|
21
|
-
VALUE *
|
|
22
|
-
Rice::detail::
|
|
23
|
-
cfp()
|
|
24
|
-
{
|
|
25
|
-
return ruby_current_thread->cfp;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
inline
|
|
29
|
-
VALUE &
|
|
30
|
-
Rice::detail::
|
|
31
|
-
cfp_data_memo_node_and_pc(VALUE * cfp)
|
|
32
|
-
{
|
|
33
|
-
return cfp[0];
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
inline
|
|
37
|
-
VALUE &
|
|
38
|
-
Rice::detail::
|
|
39
|
-
cfp_self(VALUE * cfp)
|
|
40
|
-
{
|
|
41
|
-
return cfp[5];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
inline
|
|
45
|
-
VALUE &
|
|
46
|
-
Rice::detail::
|
|
47
|
-
cfp_method_class(VALUE * cfp)
|
|
48
|
-
{
|
|
49
|
-
return cfp[11];
|
|
50
|
-
}
|
|
51
|
-
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
#include "check_ruby_type.hpp"
|
|
2
|
-
#include "../Exception.hpp"
|
|
3
|
-
|
|
4
|
-
void Rice::detail::
|
|
5
|
-
check_ruby_type(
|
|
6
|
-
VALUE value,
|
|
7
|
-
VALUE klass,
|
|
8
|
-
bool include_super
|
|
9
|
-
)
|
|
10
|
-
{
|
|
11
|
-
if( !rb_obj_is_kind_of(value, klass) ||
|
|
12
|
-
(!include_super && rb_obj_class(value) != klass))
|
|
13
|
-
{
|
|
14
|
-
// Not sure why this stuff can't be chained
|
|
15
|
-
VALUE gotV = protect(rb_mod_name, rb_obj_class(value));
|
|
16
|
-
char* got = StringValuePtr(gotV);
|
|
17
|
-
VALUE exptV = protect(rb_mod_name, klass);
|
|
18
|
-
char* expected = StringValuePtr(exptV);
|
|
19
|
-
|
|
20
|
-
throw Exception(
|
|
21
|
-
rb_eTypeError,
|
|
22
|
-
"wrong argument type %s (expected %s)",
|
|
23
|
-
got, expected
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__check_ruby_type__hpp_
|
|
2
|
-
#define Rice__detail__check_ruby_type__hpp_
|
|
3
|
-
|
|
4
|
-
#include "ruby.hpp"
|
|
5
|
-
|
|
6
|
-
namespace Rice
|
|
7
|
-
{
|
|
8
|
-
|
|
9
|
-
namespace detail
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
// Throws an exception if the given object is not of type klass.
|
|
13
|
-
void check_ruby_type(
|
|
14
|
-
VALUE value,
|
|
15
|
-
VALUE klass,
|
|
16
|
-
bool include_super);
|
|
17
|
-
|
|
18
|
-
} // namespace detail
|
|
19
|
-
|
|
20
|
-
} // namespace Rice
|
|
21
|
-
|
|
22
|
-
#endif // Rice__detail__check_ruby_type__hpp_
|
|
23
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__creation_funcs__hpp_
|
|
2
|
-
#define Rice__detail__creation_funcs__hpp_
|
|
3
|
-
|
|
4
|
-
namespace Rice
|
|
5
|
-
{
|
|
6
|
-
|
|
7
|
-
class Class;
|
|
8
|
-
|
|
9
|
-
namespace detail
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
//! Like define_alloc_func, but allows the user to define an
|
|
13
|
-
//! "initialize" method too.
|
|
14
|
-
template<typename Initialize_Func_T>
|
|
15
|
-
void define_creation_funcs(
|
|
16
|
-
Class const & klass,
|
|
17
|
-
RUBY_VALUE_FUNC allocate_func,
|
|
18
|
-
Initialize_Func_T initialize_func);
|
|
19
|
-
|
|
20
|
-
//! This is just the opposite of define_alloc_func. It can be
|
|
21
|
-
//! used to create a class that cannot be instantiated by the user.
|
|
22
|
-
void undef_alloc_func(
|
|
23
|
-
Class const & klass);
|
|
24
|
-
|
|
25
|
-
//! This is just the opposite of define_creation_func. It can be
|
|
26
|
-
//! used to create a class that cannot be instantiated by the user.
|
|
27
|
-
void undef_creation_funcs(
|
|
28
|
-
Class const & klass);
|
|
29
|
-
|
|
30
|
-
} // namespace detail
|
|
31
|
-
|
|
32
|
-
} // namespace Rice
|
|
33
|
-
|
|
34
|
-
#include "creation_funcs.ipp"
|
|
35
|
-
|
|
36
|
-
#endif // Rice__detail__creation_funcs__hpp_
|
|
37
|
-
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__creation_funcs__ipp_
|
|
2
|
-
#define Rice__detail__creation_funcs__ipp_
|
|
3
|
-
|
|
4
|
-
namespace Rice
|
|
5
|
-
{
|
|
6
|
-
|
|
7
|
-
namespace detail
|
|
8
|
-
{
|
|
9
|
-
|
|
10
|
-
template<typename Initialize_Func_T>
|
|
11
|
-
inline void define_creation_funcs(
|
|
12
|
-
Class const & klass,
|
|
13
|
-
RUBY_VALUE_FUNC allocate_func,
|
|
14
|
-
Initialize_Func_T initialize_func)
|
|
15
|
-
{
|
|
16
|
-
rb_define_alloc_func(klass, allocate_func);
|
|
17
|
-
klass.define_method("initialize", initialize_func);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
inline void undef_alloc_func(Class const & klass)
|
|
21
|
-
{
|
|
22
|
-
rb_undef_alloc_func(klass);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
inline void undef_creation_funcs(Class const & klass)
|
|
26
|
-
{
|
|
27
|
-
undef_alloc_func(klass);
|
|
28
|
-
rb_undef_method(klass, "initialize");
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
} // namespace detail
|
|
32
|
-
|
|
33
|
-
} // namespace Rice
|
|
34
|
-
|
|
35
|
-
#endif // Rice__detail__creation_funcs__ipp_
|
|
36
|
-
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__define_method_and_auto_wrap__hpp_
|
|
2
|
-
#define Rice__detail__define_method_and_auto_wrap__hpp_
|
|
3
|
-
|
|
4
|
-
#include "ruby.hpp"
|
|
5
|
-
#include "../Data_Object.hpp"
|
|
6
|
-
#include "../Identifier.hpp"
|
|
7
|
-
#include "Arguments.hpp"
|
|
8
|
-
|
|
9
|
-
namespace Rice
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
namespace detail
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
class Exception_Handler;
|
|
16
|
-
|
|
17
|
-
template<typename Fun_T>
|
|
18
|
-
void define_method_and_auto_wrap(
|
|
19
|
-
VALUE klass,
|
|
20
|
-
Identifier name,
|
|
21
|
-
Fun_T function,
|
|
22
|
-
Data_Object<Exception_Handler> handler,
|
|
23
|
-
Arguments* arguments = 0);
|
|
24
|
-
|
|
25
|
-
} // detail
|
|
26
|
-
|
|
27
|
-
} // Rice
|
|
28
|
-
|
|
29
|
-
#include "define_method_and_auto_wrap.ipp"
|
|
30
|
-
|
|
31
|
-
#endif // Rice__detail__define_method_and_auto_wrap__hpp_
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__define_method_and_auto_wrap__ipp_
|
|
2
|
-
#define Rice__detail__define_method_and_auto_wrap__ipp_
|
|
3
|
-
|
|
4
|
-
#include "wrap_function.hpp"
|
|
5
|
-
#include "method_data.hpp"
|
|
6
|
-
#include "Exception_Handler_defn.hpp"
|
|
7
|
-
#include "../protect.hpp"
|
|
8
|
-
|
|
9
|
-
template<typename Fun_T>
|
|
10
|
-
void Rice::detail::
|
|
11
|
-
define_method_and_auto_wrap(
|
|
12
|
-
VALUE klass,
|
|
13
|
-
Identifier name,
|
|
14
|
-
Fun_T function,
|
|
15
|
-
Data_Object<Exception_Handler> handler,
|
|
16
|
-
Arguments* arguments)
|
|
17
|
-
{
|
|
18
|
-
Data_Object<Wrapped_Function> f(
|
|
19
|
-
wrap_function(function, handler, arguments),
|
|
20
|
-
rb_cObject);
|
|
21
|
-
Rice::protect(
|
|
22
|
-
define_method_with_data,
|
|
23
|
-
klass,
|
|
24
|
-
name.id(),
|
|
25
|
-
f->func(),
|
|
26
|
-
-1,
|
|
27
|
-
f);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
#endif // Rice__detail__define_method_and_auto_wrap__ipp_
|
data/rice/detail/demangle.cpp
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#include "demangle.hpp"
|
|
2
|
-
|
|
3
|
-
#ifdef __GNUC__
|
|
4
|
-
#include <cxxabi.h>
|
|
5
|
-
#include <cstdlib>
|
|
6
|
-
#include <cstring>
|
|
7
|
-
#endif
|
|
8
|
-
|
|
9
|
-
std::string
|
|
10
|
-
Rice::detail::
|
|
11
|
-
demangle(char const * mangled_name)
|
|
12
|
-
{
|
|
13
|
-
#ifdef __GNUC__
|
|
14
|
-
struct Helper
|
|
15
|
-
{
|
|
16
|
-
Helper(
|
|
17
|
-
char const * mangled_name)
|
|
18
|
-
: name_(0)
|
|
19
|
-
{
|
|
20
|
-
int status = 0;
|
|
21
|
-
name_ = abi::__cxa_demangle(mangled_name, 0, 0, &status);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
~Helper()
|
|
25
|
-
{
|
|
26
|
-
std::free(name_);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
char * name_;
|
|
30
|
-
|
|
31
|
-
private:
|
|
32
|
-
Helper(Helper const &);
|
|
33
|
-
void operator=(Helper const &);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
Helper helper(mangled_name);
|
|
37
|
-
if(helper.name_)
|
|
38
|
-
{
|
|
39
|
-
return helper.name_;
|
|
40
|
-
}
|
|
41
|
-
else
|
|
42
|
-
{
|
|
43
|
-
return mangled_name;
|
|
44
|
-
}
|
|
45
|
-
#else
|
|
46
|
-
return mangled_name;
|
|
47
|
-
#endif
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
std::string
|
|
52
|
-
Rice::detail::
|
|
53
|
-
demangle(std::string const & mangled_name)
|
|
54
|
-
{
|
|
55
|
-
return demangle(mangled_name.c_str());
|
|
56
|
-
}
|
data/rice/detail/demangle.hpp
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__demangle__hpp_
|
|
2
|
-
#define Rice__detail__demangle__hpp_
|
|
3
|
-
|
|
4
|
-
#include <string>
|
|
5
|
-
|
|
6
|
-
namespace Rice
|
|
7
|
-
{
|
|
8
|
-
|
|
9
|
-
namespace detail
|
|
10
|
-
{
|
|
11
|
-
|
|
12
|
-
std::string demangle(char const * mangled_name);
|
|
13
|
-
std::string demangle(std::string const & mangled_name);
|
|
14
|
-
|
|
15
|
-
} // detail
|
|
16
|
-
|
|
17
|
-
} // Rice
|
|
18
|
-
|
|
19
|
-
#endif // Rice__detail__demangle__hpp_
|
data/rice/detail/env.hpp
DELETED
data/rice/detail/method_data.cpp
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
#include "method_data.hpp"
|
|
2
|
-
#include "ruby.hpp"
|
|
3
|
-
|
|
4
|
-
// TODO: This is silly, autoconf...
|
|
5
|
-
#undef PACKAGE_NAME
|
|
6
|
-
#undef PACKAGE_STRING
|
|
7
|
-
#undef PACKAGE_TARNAME
|
|
8
|
-
#undef PACKAGE_VERSION
|
|
9
|
-
#include "../config.hpp"
|
|
10
|
-
|
|
11
|
-
#define RICE_ID rb_intern("__rice__")
|
|
12
|
-
|
|
13
|
-
VALUE
|
|
14
|
-
Rice::detail::
|
|
15
|
-
method_data()
|
|
16
|
-
{
|
|
17
|
-
ID id;
|
|
18
|
-
VALUE klass;
|
|
19
|
-
if (!rb_frame_method_id_and_class(&id, &klass))
|
|
20
|
-
{
|
|
21
|
-
rb_raise(
|
|
22
|
-
rb_eRuntimeError,
|
|
23
|
-
"Cannot get method id and class for function");
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (rb_type(klass) == T_ICLASS) {
|
|
27
|
-
klass = rb_class_of(klass);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
VALUE store = rb_ivar_get(klass, RICE_ID);
|
|
31
|
-
return (store == Qnil) ? Qnil : rb_ivar_get(store, id);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// Ruby 2.7 now includes a similarly named macro that uses templates to
|
|
35
|
-
// pick the right overload for the underlying function. That doesn't work
|
|
36
|
-
// for our cases because we are using this method dynamically and get a
|
|
37
|
-
// compilation error otherwise. This removes the macro and lets us fall
|
|
38
|
-
// back to the C-API underneath again.
|
|
39
|
-
#undef rb_define_method_id
|
|
40
|
-
|
|
41
|
-
// Define a method and attach data to it.
|
|
42
|
-
// The method looks to ruby like a normal aliased CFUNC, with a modified
|
|
43
|
-
// origin class.
|
|
44
|
-
//
|
|
45
|
-
// How this works:
|
|
46
|
-
//
|
|
47
|
-
// To store method data and have it registered with the GC, we need a
|
|
48
|
-
// "slot" to put it in. This "slot" must be recognized and marked by
|
|
49
|
-
// the garbage collector. There happens to be such a place we can put
|
|
50
|
-
// data, and it has to do with aliased methods. When Ruby creates an
|
|
51
|
-
// alias for a method, it stores a reference to the original class in
|
|
52
|
-
// the method entry. The form of the method entry differs from ruby
|
|
53
|
-
// version to ruby version, but the concept is the same across all of
|
|
54
|
-
// them.
|
|
55
|
-
//
|
|
56
|
-
// In Rice, we make use of this by attach the data to a dummy object
|
|
57
|
-
// (store) in the class variables table.
|
|
58
|
-
//
|
|
59
|
-
// When Ruby makes a method call, it stores the class Object and method
|
|
60
|
-
// ID in the current stack frame. When Ruby calls into Rice, we grab
|
|
61
|
-
// the class and method ID from the stack frame, then pull the data out
|
|
62
|
-
// of the class. The data item is then used to determine how to convert
|
|
63
|
-
// arguments and return type, how to handle exceptions, etc.
|
|
64
|
-
//
|
|
65
|
-
VALUE
|
|
66
|
-
Rice::detail::
|
|
67
|
-
define_method_with_data(
|
|
68
|
-
VALUE klass, ID id, VALUE (*cfunc)(ANYARGS), int arity, VALUE data)
|
|
69
|
-
{
|
|
70
|
-
VALUE store = rb_attr_get(klass, RICE_ID);
|
|
71
|
-
|
|
72
|
-
if (store == Qnil) {
|
|
73
|
-
store = rb_obj_alloc(rb_cObject);
|
|
74
|
-
// store is stored in the instance variables table with
|
|
75
|
-
// name "__rice__".
|
|
76
|
-
// since "__rice__" does not have the @ prefix,
|
|
77
|
-
// so it can never be read at the Ruby level.
|
|
78
|
-
rb_ivar_set(klass, RICE_ID, store);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
rb_ivar_set(store, id, data);
|
|
82
|
-
|
|
83
|
-
// Create the aliased method on the origin class
|
|
84
|
-
rb_define_method_id(
|
|
85
|
-
klass,
|
|
86
|
-
id,
|
|
87
|
-
cfunc,
|
|
88
|
-
arity);
|
|
89
|
-
|
|
90
|
-
return Qnil;
|
|
91
|
-
}
|
|
92
|
-
|
data/rice/detail/node.hpp
DELETED
data/rice/detail/protect.cpp
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#include "protect.hpp"
|
|
2
|
-
#include "../Exception.hpp"
|
|
3
|
-
#include "../Jump_Tag.hpp"
|
|
4
|
-
|
|
5
|
-
#ifndef TAG_RAISE
|
|
6
|
-
#define TAG_RAISE 0x6
|
|
7
|
-
#endif
|
|
8
|
-
|
|
9
|
-
VALUE Rice::detail::
|
|
10
|
-
protect(
|
|
11
|
-
RUBY_VALUE_FUNC f,
|
|
12
|
-
VALUE arg)
|
|
13
|
-
{
|
|
14
|
-
int state = 0;
|
|
15
|
-
VALUE retval = rb_protect(f, arg, &state);
|
|
16
|
-
if(state != 0)
|
|
17
|
-
{
|
|
18
|
-
VALUE err = rb_errinfo();
|
|
19
|
-
if(state == TAG_RAISE && RTEST(err))
|
|
20
|
-
{
|
|
21
|
-
// TODO: convert NoMemoryError into bad_alloc?
|
|
22
|
-
rb_set_errinfo(Rice::Nil);
|
|
23
|
-
throw Rice::Exception(err);
|
|
24
|
-
}
|
|
25
|
-
throw Jump_Tag(state);
|
|
26
|
-
}
|
|
27
|
-
return retval;
|
|
28
|
-
}
|
|
29
|
-
|
data/rice/detail/protect.hpp
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#ifndef Rice__detail__protect__hpp_
|
|
2
|
-
#define Rice__detail__protect__hpp_
|
|
3
|
-
|
|
4
|
-
#include "ruby.hpp"
|
|
5
|
-
|
|
6
|
-
/*! \file
|
|
7
|
-
* \brief Functions for making exception-safe calls into Ruby code.
|
|
8
|
-
* These are the building blocks for building other exception-safe
|
|
9
|
-
* helper functions.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
namespace Rice
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
namespace detail
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
//! Call the given function, converting Ruby exceptions to C++
|
|
19
|
-
//! exceptions.
|
|
20
|
-
/*! Call the function f with the parameter arg If f raises a Ruby
|
|
21
|
-
* exception, then the exception is re-thrown as an Exception. If f
|
|
22
|
-
* exits with any other non-zero tag (e.g. a Symbol is thrown), then the
|
|
23
|
-
* tag is re-thrown as a Jump_Tag.
|
|
24
|
-
*/
|
|
25
|
-
VALUE protect(
|
|
26
|
-
RUBY_VALUE_FUNC f,
|
|
27
|
-
VALUE arg);
|
|
28
|
-
|
|
29
|
-
} // namespace detail
|
|
30
|
-
|
|
31
|
-
} // namespace Rice
|
|
32
|
-
|
|
33
|
-
#endif // Rice__detail__protect__hpp_
|
|
34
|
-
|