rice 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +2 -2
- data/Doxyfile +1 -1
- data/Makefile.in +8 -3
- data/Rakefile +3 -3
- data/config.guess +30 -49
- data/config.sub +4 -22
- data/configure +319 -104
- data/configure.ac +6 -2
- data/doxygen.ac +2 -2
- data/extconf.rb +22 -0
- data/post-autoconf.rb +3 -3
- data/post-automake.rb +2 -2
- data/rice/Array.ipp +7 -6
- data/rice/Critical_Guard.hpp +6 -0
- data/rice/Critical_Guard.ipp +6 -0
- data/rice/Data_Object.hpp +1 -120
- data/rice/Data_Object.ipp +5 -1
- data/rice/Data_Object_defn.hpp +132 -0
- data/rice/Data_Type.ipp +18 -2
- data/rice/Enum.ipp +3 -3
- data/rice/Exception.hpp +1 -61
- data/rice/Exception_Base.hpp +2 -24
- data/rice/Exception_Base.ipp +2 -0
- data/rice/Exception_Base_defn.hpp +27 -0
- data/rice/Exception_defn.hpp +69 -0
- data/rice/Hash.hpp +5 -1
- data/rice/Hash.ipp +7 -7
- data/rice/Makefile.am +20 -3
- data/rice/Makefile.in +39 -4
- data/rice/Module.cpp +11 -3
- data/rice/Module_impl.hpp +20 -9
- data/rice/Module_impl.ipp +84 -87
- data/rice/Object.cpp +1 -1
- data/rice/VM.cpp +14 -1
- data/rice/VM.hpp +6 -1
- data/rice/config.hpp +24 -3
- data/rice/config.hpp.in +21 -0
- data/rice/detail/Auto_Function_Wrapper.hpp +97 -65
- data/rice/detail/Auto_Function_Wrapper.ipp +160 -128
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +96 -64
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +160 -128
- data/rice/detail/Exception_Handler.hpp +2 -112
- data/rice/detail/Exception_Handler.ipp +68 -0
- data/rice/detail/Exception_Handler_defn.hpp +96 -0
- data/rice/detail/Iterator.hpp +93 -0
- data/rice/detail/check_ruby_type.cpp +8 -2
- data/rice/detail/creation_funcs.ipp +2 -2
- data/rice/detail/define_method_and_auto_wrap.hpp +4 -2
- data/rice/detail/define_method_and_auto_wrap.ipp +14 -5
- data/rice/detail/env.hpp +4 -0
- data/rice/detail/method_data.cpp +362 -75
- data/rice/detail/method_data.cpp.rpp +301 -0
- data/rice/detail/method_data.hpp +6 -18
- data/rice/detail/mininode.cpp +1220 -0
- data/rice/detail/mininode.cpp.rpp +62 -0
- data/rice/detail/mininode.hpp +320 -0
- data/rice/detail/mininode.hpp.rpp +119 -0
- data/rice/detail/protect.cpp +4 -2
- data/rice/detail/ruby.hpp +44 -18
- data/rice/detail/ruby_version_code.hpp +6 -0
- data/rice/detail/ruby_version_code.hpp.in +6 -0
- data/rice/detail/rubysig.hpp +6 -0
- data/rice/detail/st.hpp +6 -2
- data/rice/detail/wrap_function.hpp +50 -48
- data/rice/detail/wrap_function.ipp +48 -48
- data/rice/generate_code.rb +43 -293
- data/rice/global_function.hpp +10 -4
- data/rice/global_function.ipp +1 -2
- data/rice/ruby_mark.hpp +13 -0
- data/rice/ruby_try_catch.hpp +1 -1
- data/rice/rubypp.rb +97 -0
- data/rice/to_from_ruby.ipp +3 -3
- data/ruby.ac +44 -8
- data/ruby/Makefile.in +2 -0
- data/ruby/lib/Makefile.in +2 -0
- data/ruby/lib/mkmf-rice.rb.in +4 -1
- data/ruby/lib/version.rb +3 -0
- data/sample/Makefile.am +2 -2
- data/sample/Makefile.in +4 -2
- data/test/Makefile.am +2 -1
- data/test/Makefile.in +7 -2
- data/test/test_Array.cpp +2 -2
- data/test/test_Class.cpp +4 -1
- data/test/test_Critical_Guard.cpp +4 -0
- data/test/test_Data_Object.cpp +43 -3
- data/test/test_Hash.cpp +3 -3
- data/test/test_String.cpp +8 -8
- data/test/test_VM.cpp +1 -1
- data/test/test_global_functions.cpp +45 -0
- data/test/test_rice.rb +5 -0
- metadata +115 -98
- data/rice/detail/Iterator_Definer.hpp +0 -98
data/rice/Module.cpp
CHANGED
@@ -27,7 +27,16 @@ Module(VALUE v)
|
|
27
27
|
Rice::String Rice::Module::
|
28
28
|
name() const
|
29
29
|
{
|
30
|
-
|
30
|
+
Object name = rb_mod_name(*this);
|
31
|
+
if(name.is_nil())
|
32
|
+
{
|
33
|
+
// 1.9
|
34
|
+
return String("");
|
35
|
+
}
|
36
|
+
else
|
37
|
+
{
|
38
|
+
return name;
|
39
|
+
}
|
31
40
|
}
|
32
41
|
|
33
42
|
Rice::Module Rice::
|
@@ -56,8 +65,7 @@ anonymous_module()
|
|
56
65
|
void Rice::Module::
|
57
66
|
swap(Rice::Module & other)
|
58
67
|
{
|
59
|
-
|
60
|
-
Object::swap(other);
|
68
|
+
Module_base::swap(other);
|
61
69
|
}
|
62
70
|
|
63
71
|
Rice::Array
|
data/rice/Module_impl.hpp
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
#ifndef Rice__Module_impl__hpp_
|
2
2
|
#define Rice__Module_impl__hpp_
|
3
3
|
|
4
|
-
#include "detail/
|
4
|
+
#include "detail/Exception_Handler_defn.hpp"
|
5
5
|
#include "detail/ruby.hpp"
|
6
6
|
#include "Object_defn.hpp"
|
7
|
+
#include "Address_Registration_Guard_defn.hpp"
|
7
8
|
|
8
9
|
namespace Rice
|
9
10
|
{
|
@@ -20,11 +21,21 @@ class Module_base
|
|
20
21
|
{
|
21
22
|
public:
|
22
23
|
Module_base(VALUE v = rb_cObject);
|
24
|
+
Module_base(Module_base const & other);
|
23
25
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
26
|
+
Module_base & operator=(Module_base const & other);
|
27
|
+
|
28
|
+
void swap(Module_base & other);
|
29
|
+
|
30
|
+
protected:
|
31
|
+
template<typename Exception_T, typename Functor_T>
|
32
|
+
void add_handler(Functor_T functor);
|
33
|
+
|
34
|
+
Object handler() const;
|
35
|
+
|
36
|
+
private:
|
37
|
+
Object mutable handler_;
|
38
|
+
Address_Registration_Guard handler_guard_;
|
28
39
|
};
|
29
40
|
|
30
41
|
/*! An intermediate base class so we can always return the most-derived
|
@@ -90,7 +101,7 @@ public:
|
|
90
101
|
*/
|
91
102
|
template<typename Func_T>
|
92
103
|
Derived_T & define_method(
|
93
|
-
|
104
|
+
Identifier name,
|
94
105
|
Func_T func);
|
95
106
|
|
96
107
|
//! Define a singleton method.
|
@@ -106,7 +117,7 @@ public:
|
|
106
117
|
*/
|
107
118
|
template<typename Func_T>
|
108
119
|
Derived_T & define_singleton_method(
|
109
|
-
|
120
|
+
Identifier name,
|
110
121
|
Func_T func);
|
111
122
|
|
112
123
|
//! Define a module function.
|
@@ -124,7 +135,7 @@ public:
|
|
124
135
|
*/
|
125
136
|
template<typename Func_T>
|
126
137
|
Derived_T & define_module_function(
|
127
|
-
|
138
|
+
Identifier name,
|
128
139
|
Func_T func);
|
129
140
|
|
130
141
|
//! Define an iterator.
|
@@ -141,7 +152,7 @@ public:
|
|
141
152
|
Derived_T & define_iterator(
|
142
153
|
Iterator_T (T::*begin)(),
|
143
154
|
Iterator_T (T::*end)(),
|
144
|
-
|
155
|
+
Identifier name = "each");
|
145
156
|
|
146
157
|
//! Include a module.
|
147
158
|
/*! \param inc the module to be included.
|
data/rice/Module_impl.ipp
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
#include "detail/define_method_and_auto_wrap.hpp"
|
2
2
|
#include "Object.hpp"
|
3
|
+
#include "Address_Registration_Guard.hpp"
|
3
4
|
#include "Data_Object.hpp"
|
4
5
|
#include "Data_Type.hpp"
|
5
6
|
#include "Symbol.hpp"
|
7
|
+
#include "Exception.hpp"
|
6
8
|
#include "protect.hpp"
|
7
9
|
|
8
10
|
#include "Module.hpp"
|
@@ -11,16 +13,77 @@
|
|
11
13
|
|
12
14
|
#include "detail/ruby.hpp"
|
13
15
|
#include "detail/method_data.hpp"
|
16
|
+
#include "detail/Iterator.hpp"
|
14
17
|
|
15
18
|
|
16
19
|
inline
|
17
20
|
Rice::Module_base::
|
18
21
|
Module_base(VALUE v)
|
19
22
|
: Object(v)
|
20
|
-
, handler_(
|
23
|
+
, handler_(Qnil)
|
24
|
+
, handler_guard_(&handler_)
|
21
25
|
{
|
22
26
|
}
|
23
27
|
|
28
|
+
inline
|
29
|
+
Rice::Module_base::
|
30
|
+
Module_base(Module_base const & other)
|
31
|
+
: Object(other)
|
32
|
+
, handler_(other.handler_)
|
33
|
+
, handler_guard_(&handler_)
|
34
|
+
{
|
35
|
+
}
|
36
|
+
|
37
|
+
inline
|
38
|
+
Rice::Module_base &
|
39
|
+
Rice::Module_base::
|
40
|
+
operator=(Module_base const & other)
|
41
|
+
{
|
42
|
+
Module_base tmp(other);
|
43
|
+
swap(tmp);
|
44
|
+
return *this;
|
45
|
+
}
|
46
|
+
|
47
|
+
inline
|
48
|
+
void
|
49
|
+
Rice::Module_base::
|
50
|
+
swap(Module_base & other)
|
51
|
+
{
|
52
|
+
std::swap(handler_, other.handler_);
|
53
|
+
Object::swap(other);
|
54
|
+
}
|
55
|
+
|
56
|
+
template<typename Exception_T, typename Functor_T>
|
57
|
+
inline
|
58
|
+
void
|
59
|
+
Rice::Module_base::
|
60
|
+
add_handler(Functor_T functor)
|
61
|
+
{
|
62
|
+
Data_Object<detail::Exception_Handler> handler(
|
63
|
+
new detail::
|
64
|
+
Functor_Exception_Handler<Exception_T, Functor_T>(
|
65
|
+
functor,
|
66
|
+
this->handler()),
|
67
|
+
rb_cObject);
|
68
|
+
this->handler_.swap(handler);
|
69
|
+
}
|
70
|
+
|
71
|
+
inline
|
72
|
+
Rice::Object
|
73
|
+
Rice::Module_base::
|
74
|
+
handler() const
|
75
|
+
{
|
76
|
+
if(!handler_.test())
|
77
|
+
{
|
78
|
+
Data_Object<Rice::detail::Default_Exception_Handler> handler(
|
79
|
+
new Rice::detail::Default_Exception_Handler,
|
80
|
+
rb_cObject);
|
81
|
+
handler_.swap(handler);
|
82
|
+
}
|
83
|
+
|
84
|
+
return handler_;
|
85
|
+
}
|
86
|
+
|
24
87
|
template<typename Base_T, typename Derived_T>
|
25
88
|
inline
|
26
89
|
Rice::Module_impl<Base_T, Derived_T>::
|
@@ -46,11 +109,7 @@ Rice::Module_impl<Base_T, Derived_T>::
|
|
46
109
|
add_handler(
|
47
110
|
Functor_T functor)
|
48
111
|
{
|
49
|
-
|
50
|
-
new Rice::detail::
|
51
|
-
Functor_Exception_Handler<Exception_T, Functor_T>(
|
52
|
-
functor,
|
53
|
-
this->handler_);
|
112
|
+
Module_base::add_handler<Exception_T>(functor);
|
54
113
|
return (Derived_T &)*this;
|
55
114
|
}
|
56
115
|
|
@@ -60,99 +119,48 @@ inline
|
|
60
119
|
Derived_T &
|
61
120
|
Rice::Module_impl<Base_T, Derived_T>::
|
62
121
|
define_method(
|
63
|
-
|
122
|
+
Identifier name,
|
64
123
|
Func_T func)
|
65
124
|
{
|
66
125
|
detail::define_method_and_auto_wrap(
|
67
|
-
*this, name, func, this->
|
126
|
+
*this, name, func, this->handler());
|
68
127
|
return (Derived_T &)*this;
|
69
128
|
}
|
70
129
|
|
71
130
|
template<typename Base_T, typename Derived_T>
|
72
|
-
template<typename
|
131
|
+
template<typename Func_T>
|
73
132
|
inline
|
74
133
|
Derived_T &
|
75
134
|
Rice::Module_impl<Base_T, Derived_T>::
|
76
135
|
define_singleton_method(
|
77
|
-
|
78
|
-
|
136
|
+
Identifier name,
|
137
|
+
Func_T func)
|
79
138
|
{
|
80
139
|
detail::define_method_and_auto_wrap(
|
81
|
-
rb_class_of(*this), name, func, this->
|
140
|
+
rb_class_of(*this), name, func, this->handler());
|
82
141
|
return (Derived_T &)*this;
|
83
142
|
}
|
84
143
|
|
85
144
|
template<typename Base_T, typename Derived_T>
|
86
|
-
template<typename
|
145
|
+
template<typename Func_T>
|
87
146
|
inline
|
88
147
|
Derived_T &
|
89
148
|
Rice::Module_impl<Base_T, Derived_T>::
|
90
149
|
define_module_function(
|
91
|
-
|
92
|
-
|
93
|
-
{
|
94
|
-
detail::define_method_and_auto_wrap(*this, name, func);
|
95
|
-
this->call("module_function", Symbol(name));
|
96
|
-
return (Derived_T &)*this;
|
97
|
-
}
|
98
|
-
|
99
|
-
namespace Rice
|
100
|
-
{
|
101
|
-
|
102
|
-
namespace detail
|
103
|
-
{
|
104
|
-
|
105
|
-
class Iterator
|
106
|
-
{
|
107
|
-
public:
|
108
|
-
virtual ~Iterator() { }
|
109
|
-
|
110
|
-
virtual VALUE call_impl(VALUE self) = 0;
|
111
|
-
|
112
|
-
static VALUE call(VALUE self)
|
113
|
-
{
|
114
|
-
void * data = Rice::detail::method_data();
|
115
|
-
Iterator * iterator = static_cast<Iterator *>(data);
|
116
|
-
return iterator->call_impl(self);
|
117
|
-
}
|
118
|
-
};
|
119
|
-
|
120
|
-
template<typename T, typename Iterator_T>
|
121
|
-
class Iterator_Impl
|
122
|
-
: public Iterator
|
150
|
+
Identifier name,
|
151
|
+
Func_T func)
|
123
152
|
{
|
124
|
-
|
125
|
-
Iterator_Impl(
|
126
|
-
Iterator_T (T::*begin)(),
|
127
|
-
Iterator_T (T::*end)(),
|
128
|
-
Rice::Data_Type<T> data_type)
|
129
|
-
: begin_(begin)
|
130
|
-
, end_(end)
|
131
|
-
, data_type_(data_type)
|
132
|
-
{
|
133
|
-
}
|
134
|
-
|
135
|
-
virtual VALUE call_impl(VALUE self)
|
153
|
+
if(this->rb_type() != T_MODULE)
|
136
154
|
{
|
137
|
-
Rice::
|
138
|
-
|
139
|
-
|
140
|
-
for(; it != end; ++it)
|
141
|
-
{
|
142
|
-
protect(rb_yield, to_ruby(*it));
|
143
|
-
}
|
144
|
-
return self;
|
155
|
+
throw Rice::Exception(
|
156
|
+
rb_eTypeError,
|
157
|
+
"can only define module functions for modules");
|
145
158
|
}
|
146
159
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
};
|
152
|
-
|
153
|
-
} // namespace detail
|
154
|
-
|
155
|
-
} // namespace Rice
|
160
|
+
define_method(name, func);
|
161
|
+
define_singleton_method(name, func);
|
162
|
+
return (Derived_T &)*this;
|
163
|
+
}
|
156
164
|
|
157
165
|
template<typename Base_T, typename Derived_T>
|
158
166
|
template<typename T, typename Iterator_T>
|
@@ -162,20 +170,9 @@ Rice::Module_impl<Base_T, Derived_T>::
|
|
162
170
|
define_iterator(
|
163
171
|
Iterator_T (T::*begin)(),
|
164
172
|
Iterator_T (T::*end)(),
|
165
|
-
|
173
|
+
Identifier name)
|
166
174
|
{
|
167
|
-
|
168
|
-
detail::Iterator * iterator =
|
169
|
-
new detail::Iterator_Impl<T, Iterator_T>(
|
170
|
-
begin,
|
171
|
-
end,
|
172
|
-
Data_Type<T>());
|
173
|
-
detail::define_method_with_data(
|
174
|
-
static_cast<VALUE>(*this),
|
175
|
-
name,
|
176
|
-
(RUBY_METHOD_FUNC)iterator->call,
|
177
|
-
0,
|
178
|
-
iterator);
|
175
|
+
detail::define_iterator(*this, name, begin, end);
|
179
176
|
return (Derived_T &)*this;
|
180
177
|
}
|
181
178
|
|
data/rice/Object.cpp
CHANGED
data/rice/VM.cpp
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#include "VM.hpp"
|
2
2
|
#include "detail/ruby.hpp"
|
3
3
|
#include "detail/env.hpp"
|
4
|
+
#include "detail/ruby_version_code.hpp"
|
4
5
|
|
5
6
|
#include <stdexcept>
|
6
7
|
|
@@ -19,7 +20,7 @@ VM(int argc, char * argv[])
|
|
19
20
|
}
|
20
21
|
|
21
22
|
Rice::VM::
|
22
|
-
VM(std::vector<char *> const & args)
|
23
|
+
VM(std::vector<const char *> const & args)
|
23
24
|
{
|
24
25
|
check_not_initialized();
|
25
26
|
init_stack();
|
@@ -51,29 +52,41 @@ init_stack()
|
|
51
52
|
void Rice::VM::
|
52
53
|
run()
|
53
54
|
{
|
55
|
+
#if RICE__RUBY_VERSION_CODE >= 190
|
56
|
+
ruby_run_node(node_);
|
57
|
+
#else
|
54
58
|
ruby_run();
|
59
|
+
#endif
|
55
60
|
}
|
56
61
|
|
57
62
|
extern "C"
|
58
63
|
{
|
59
64
|
|
65
|
+
#if RICE__RUBY_VERSION_CODE < 190
|
60
66
|
RUBY_EXTERN VALUE * rb_gc_stack_start;
|
67
|
+
#endif
|
61
68
|
|
62
69
|
}
|
63
70
|
|
64
71
|
void Rice::VM::
|
65
72
|
check_not_initialized() const
|
66
73
|
{
|
74
|
+
#if RICE__RUBY_VERSION_CODE < 190
|
67
75
|
if(rb_gc_stack_start)
|
68
76
|
{
|
69
77
|
throw std::runtime_error("Only one VM allowed per application");
|
70
78
|
}
|
79
|
+
#endif
|
80
|
+
// TODO: how to do this check on 1.9?
|
71
81
|
}
|
72
82
|
|
73
83
|
void Rice::VM::
|
74
84
|
init(int argc, char * argv[])
|
75
85
|
{
|
76
86
|
ruby_init();
|
87
|
+
#if RICE__RUBY_VERSION_CODE >= 190
|
88
|
+
node_ =
|
89
|
+
#endif
|
77
90
|
ruby_options(argc, argv);
|
78
91
|
}
|
79
92
|
|
data/rice/VM.hpp
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#define VM__hpp
|
3
3
|
|
4
4
|
#include <vector>
|
5
|
+
#include "detail/ruby_version_code.hpp"
|
5
6
|
|
6
7
|
namespace Rice
|
7
8
|
{
|
@@ -11,7 +12,7 @@ class VM
|
|
11
12
|
public:
|
12
13
|
VM(char * app_name);
|
13
14
|
VM(int argc, char * argv[]);
|
14
|
-
VM(std::vector<char *> const & args);
|
15
|
+
VM(std::vector<const char *> const & args);
|
15
16
|
~VM();
|
16
17
|
|
17
18
|
void init_stack();
|
@@ -20,6 +21,10 @@ public:
|
|
20
21
|
private:
|
21
22
|
void check_not_initialized() const;
|
22
23
|
void init(int argc, char * argv[]);
|
24
|
+
|
25
|
+
#if RICE__RUBY_VERSION_CODE >= 190
|
26
|
+
void * node_;
|
27
|
+
#endif
|
23
28
|
};
|
24
29
|
|
25
30
|
}
|
data/rice/config.hpp
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
/* rice/config.hpp. Generated from config.hpp.in by configure. */
|
2
2
|
/* rice/config.hpp.in. Generated from configure.ac by autoheader. */
|
3
3
|
|
4
|
+
/* Define to 1 if you have the <env.h> header file. */
|
5
|
+
#define HAVE_ENV_H 1
|
6
|
+
|
7
|
+
/* Define to 1 if you have the <node.h> header file. */
|
8
|
+
#define HAVE_NODE_H 1
|
9
|
+
|
10
|
+
/* Define this macro if rb_class_boot is defined */
|
11
|
+
#define HAVE_RB_CLASS_BOOT
|
12
|
+
|
13
|
+
/* Define to 1 if you have the <ruby.h> header file. */
|
14
|
+
#define HAVE_RUBY_H 1
|
15
|
+
|
16
|
+
/* Define to 1 if you have the <ruby/node.h> header file. */
|
17
|
+
/* #undef HAVE_RUBY_NODE_H */
|
18
|
+
|
19
|
+
/* Define to 1 if you have the <version.h> header file. */
|
20
|
+
#define HAVE_VERSION_H 1
|
21
|
+
|
4
22
|
/* Name of package */
|
5
23
|
#define PACKAGE "rice"
|
6
24
|
|
@@ -11,13 +29,16 @@
|
|
11
29
|
#define PACKAGE_NAME "rice"
|
12
30
|
|
13
31
|
/* Define to the full name and version of this package. */
|
14
|
-
#define PACKAGE_STRING "rice 1.
|
32
|
+
#define PACKAGE_STRING "rice 1.1"
|
15
33
|
|
16
34
|
/* Define to the one symbol short name of this package. */
|
17
35
|
#define PACKAGE_TARNAME "rice"
|
18
36
|
|
19
37
|
/* Define to the version of this package. */
|
20
|
-
#define PACKAGE_VERSION "1.
|
38
|
+
#define PACKAGE_VERSION "1.1"
|
39
|
+
|
40
|
+
/* Define this macro to use ruby/node.h */
|
41
|
+
/* #undef REALLY_HAVE_RUBY_NODE_H */
|
21
42
|
|
22
43
|
/* Version number of package */
|
23
|
-
#define VERSION "1.
|
44
|
+
#define VERSION "1.1"
|