rucy 0.1.6 → 0.1.7
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 +7 -0
- data/.doc/ext/rucy/class.cpp +48 -56
- data/.doc/ext/rucy/exception.cpp +1 -1
- data/.doc/ext/rucy/function.cpp +14 -2
- data/.doc/ext/rucy/struct.cpp +2 -20
- data/.doc/ext/rucy/tester.cpp +7 -19
- data/.doc/ext/rucy/value.cpp +23 -1
- data/{README → README.md} +0 -0
- data/Rakefile +7 -5
- data/VERSION +1 -1
- data/bin/rucy2rdoc +8 -5
- data/ext/rucy/class.cpp +78 -87
- data/ext/rucy/class.h +12 -6
- data/ext/rucy/exception.cpp +17 -17
- data/ext/rucy/extconf.rb +11 -52
- data/ext/rucy/function.cpp +25 -12
- data/ext/rucy/struct.cpp +8 -26
- data/ext/rucy/tester.cpp +11 -24
- data/ext/rucy/value.cpp +32 -9
- data/include/rucy/class.h +5 -3
- data/include/rucy/exception.h +17 -71
- data/include/rucy/extension.h.erb +489 -0
- data/include/rucy/function.h.erb +20 -34
- data/include/rucy/module.h.erb +20 -14
- data/include/rucy/ruby.h +23 -0
- data/include/rucy/rucy.h +7 -66
- data/include/rucy/symbol.h +11 -11
- data/include/rucy/value.h.erb +98 -176
- data/include/rucy.h +9 -1
- data/lib/rucy/module.rb +11 -7
- data/rucy.gemspec +3 -4
- data/src/class.cpp +34 -6
- data/src/exception.cpp +69 -54
- data/src/extension.cpp +59 -0
- data/src/function.cpp.erb +17 -25
- data/src/module.cpp.erb +25 -16
- data/src/rucy.cpp +15 -25
- data/src/symbol.cpp +18 -17
- data/src/value.cpp.erb +374 -175
- data/task/doc.rake +5 -0
- data/test/helper.rb +6 -2
- data/test/test_class.rb +27 -20
- data/test/test_function.rb +6 -0
- data/test/test_value.rb +4 -0
- metadata +29 -39
- data/.gitignore +0 -22
- data/ChangeLog +0 -13
- data/include/rucy/defs.h.erb +0 -76
- data/include/rucy/extension.h +0 -206
data/ext/rucy/class.cpp
CHANGED
@@ -1,19 +1,17 @@
|
|
1
1
|
#include "class.h"
|
2
2
|
|
3
3
|
|
4
|
-
#include
|
4
|
+
#include "rucy.h"
|
5
5
|
|
6
6
|
|
7
7
|
using namespace Rucy;
|
8
8
|
|
9
9
|
|
10
|
-
static Class cBase, cSub,
|
11
|
-
|
12
|
-
|
13
|
-
RUCY_WRAPPER_VALUE_FROM_TO(Base, cBase)
|
14
|
-
RUCY_WRAPPER_VALUE_FROM_TO(Sub, cSub)
|
15
|
-
RUCY_WRAPPER_VALUE_FROM_TO(RubyObj, cRubyObj)
|
10
|
+
static Class cBase, cSub, cSimpleObj;
|
16
11
|
|
12
|
+
RUCY_WRAPPER_VALUE_FROM_TO(Base, cBase)
|
13
|
+
RUCY_WRAPPER_VALUE_FROM_TO(Sub, cSub)
|
14
|
+
RUCY_WRAPPER_VALUE_FROM_TO(SimpleObj, cSimpleObj)
|
17
15
|
|
18
16
|
template <typename T> Class get_class ();
|
19
17
|
|
@@ -26,26 +24,32 @@ template <typename T>
|
|
26
24
|
class RubyBase : public ClassWrapper<T>
|
27
25
|
{
|
28
26
|
|
29
|
-
|
27
|
+
public:
|
30
28
|
|
31
|
-
|
32
|
-
RUCY_OVERRIDE_ID_LAST
|
29
|
+
RUCY_OVERRIDE_BEGIN(ClassWrapper<T>)
|
33
30
|
|
34
|
-
|
31
|
+
RUCY_OVERRIDE_ID(name_overridable_faster)
|
32
|
+
|
33
|
+
RUCY_OVERRIDE_END
|
35
34
|
|
36
35
|
virtual const char* name_overridable () const
|
37
36
|
{
|
38
|
-
|
37
|
+
RUCY_SYM(name_overridable);
|
38
|
+
return this->value.call(name_overridable).c_str();
|
39
39
|
}
|
40
40
|
|
41
41
|
virtual const char* name_overridable_faster () const
|
42
42
|
{
|
43
|
-
|
43
|
+
RUCY_SYM(name_overridable_faster);
|
44
|
+
if (RUCY_IS_OVERRIDDEN(name_overridable_faster, get_class<T>()))
|
45
|
+
return this->value.call(name_overridable_faster).c_str();
|
46
|
+
else
|
47
|
+
return Super::name_overridable_faster();
|
44
48
|
}
|
45
49
|
|
46
50
|
bool is_name_overridable_faster_overridden () const
|
47
51
|
{
|
48
|
-
|
52
|
+
RUCY_SYM(name_overridable_faster);
|
49
53
|
return RUCY_IS_OVERRIDDEN(name_overridable_faster, get_class<T>());
|
50
54
|
}
|
51
55
|
|
@@ -54,171 +58,161 @@ class RubyBase : public ClassWrapper<T>
|
|
54
58
|
|
55
59
|
#define THIS(type) to<type*>(self)
|
56
60
|
|
57
|
-
#define CHECK(type) RUCY_CHECK_OBJ(
|
61
|
+
#define CHECK(type) RUCY_CHECK_OBJ(type, c##type, self)
|
58
62
|
|
59
|
-
#define CALL(type, obj, fun) RUCY_WRAPPER_CALL(
|
63
|
+
#define CALL(type, obj, fun) RUCY_WRAPPER_CALL(type, obj, fun)
|
60
64
|
|
61
65
|
|
62
66
|
/*
|
63
67
|
alloc function.
|
64
68
|
*/
|
65
69
|
static
|
66
|
-
|
70
|
+
RUCY_DEF_ALLOC(base_alloc, klass)
|
67
71
|
{
|
68
72
|
return value(new RubyBase<Base>, klass);
|
69
73
|
}
|
70
|
-
|
74
|
+
RUCY_END
|
71
75
|
|
72
76
|
static
|
73
|
-
|
77
|
+
RUCY_DEF0(name)
|
74
78
|
{
|
75
79
|
CHECK(Base);
|
76
80
|
return value(THIS(Base)->name());
|
77
81
|
}
|
78
|
-
|
82
|
+
RUCY_END
|
79
83
|
|
80
84
|
static
|
81
|
-
|
85
|
+
RUCY_DEF0(call_name)
|
82
86
|
{
|
83
87
|
CHECK(Base);
|
84
88
|
return value(THIS(Base)->name());
|
85
89
|
}
|
86
|
-
|
90
|
+
RUCY_END
|
87
91
|
|
88
92
|
static
|
89
|
-
|
93
|
+
RUCY_DEF0(base_name_overridable)
|
90
94
|
{
|
91
95
|
CHECK(Base);
|
92
96
|
return value(CALL(Base, THIS(Base), name_overridable()));
|
93
97
|
}
|
94
|
-
|
98
|
+
RUCY_END
|
95
99
|
|
96
100
|
static
|
97
|
-
|
101
|
+
RUCY_DEF0(call_name_overridable)
|
98
102
|
{
|
99
103
|
CHECK(Base);
|
100
104
|
return value(THIS(Base)->name_overridable());
|
101
105
|
}
|
102
|
-
|
106
|
+
RUCY_END
|
103
107
|
|
104
108
|
static
|
105
|
-
|
109
|
+
RUCY_DEF0(base_name_overridable_faster)
|
106
110
|
{
|
107
111
|
CHECK(Base);
|
108
112
|
return value(CALL(Base, THIS(Base), name_overridable_faster()));
|
109
113
|
}
|
110
|
-
|
114
|
+
RUCY_END
|
111
115
|
|
112
116
|
static
|
113
|
-
|
117
|
+
RUCY_DEF0(call_name_overridable_faster)
|
114
118
|
{
|
115
119
|
CHECK(Base);
|
116
120
|
return value(THIS(Base)->name_overridable_faster());
|
117
121
|
}
|
118
|
-
|
122
|
+
RUCY_END
|
119
123
|
|
120
124
|
template <typename T>
|
121
125
|
static
|
122
|
-
|
126
|
+
RUCY_DEF0(is_name_overridable_faster_overridden)
|
123
127
|
{
|
124
|
-
RUCY_CHECK_OBJ(
|
128
|
+
RUCY_CHECK_OBJ(T, get_class<T>(), self);
|
125
129
|
RubyBase<T>* obj = dynamic_cast<RubyBase<T>*>(THIS(T));
|
126
|
-
if (!obj) invalid_object_error("dynamic_cast() failed.");
|
130
|
+
if (!obj) invalid_object_error(__FILE__, __LINE__, "dynamic_cast() failed.");
|
127
131
|
return value(obj->is_name_overridable_faster_overridden());
|
128
132
|
}
|
129
|
-
|
133
|
+
RUCY_END
|
130
134
|
|
131
|
-
|
132
|
-
static
|
133
|
-
RUBY_DEF0(clear_override_flags)
|
134
|
-
{
|
135
|
-
RUCY_CHECK_OBJ(self, T, get_class<T>());
|
136
|
-
ClassWrapper<T>* obj = dynamic_cast<ClassWrapper<T>*>(THIS(T));
|
137
|
-
if (obj) obj->clear_override_flags();
|
138
|
-
}
|
139
|
-
RUBY_END
|
135
|
+
static RUCY_DEF_clear_override_flags(Base_clear_override_flags, Base, cBase);
|
136
|
+
static RUCY_DEF_clear_override_flags(Sub_clear_override_flags, Sub, cSub);
|
140
137
|
|
141
|
-
template <bool singleton>
|
142
138
|
static
|
143
|
-
|
144
|
-
{
|
145
|
-
SYMBOL(klass, "class");
|
146
|
-
SYM(name);
|
147
|
-
eval(
|
148
|
-
Xot::stringf(
|
149
|
-
"ObjectSpace.each_object(%s) {|o| o.clear_override_flags}",
|
150
|
-
(singleton ? self(klass) : self)(name).c_str()).c_str());
|
151
|
-
}
|
152
|
-
RUBY_END
|
153
|
-
|
154
|
-
static
|
155
|
-
RUBY_DEF0(base_new_raw)
|
139
|
+
RUCY_DEF0(base_new_raw)
|
156
140
|
{
|
157
141
|
return value(new Base);
|
158
142
|
}
|
159
|
-
|
143
|
+
RUCY_END
|
160
144
|
|
161
145
|
|
162
146
|
/*
|
163
147
|
alloc function.
|
164
148
|
*/
|
165
149
|
static
|
166
|
-
|
150
|
+
RUCY_DEF_ALLOC(sub_alloc, klass)
|
167
151
|
{
|
168
152
|
return value(new RubyBase<Sub>, klass);
|
169
153
|
}
|
170
|
-
|
154
|
+
RUCY_END
|
171
155
|
|
172
156
|
static
|
173
|
-
|
157
|
+
RUCY_DEF0(sub_name_overridable)
|
174
158
|
{
|
175
159
|
CHECK(Sub);
|
176
160
|
return value(CALL(Sub, THIS(Sub), name_overridable()));
|
177
161
|
}
|
178
|
-
|
162
|
+
RUCY_END
|
179
163
|
|
180
164
|
static
|
181
|
-
|
165
|
+
RUCY_DEF0(sub_name_overridable_faster)
|
182
166
|
{
|
183
167
|
CHECK(Sub);
|
184
168
|
return value(CALL(Sub, THIS(Sub), name_overridable_faster()));
|
185
169
|
}
|
186
|
-
|
170
|
+
RUCY_END
|
187
171
|
|
188
172
|
static
|
189
|
-
|
173
|
+
RUCY_DEF0(sub_new_raw)
|
190
174
|
{
|
191
175
|
return value(new Sub);
|
192
176
|
}
|
193
|
-
|
177
|
+
RUCY_END
|
194
178
|
|
195
179
|
|
196
180
|
/*
|
197
181
|
alloc function.
|
198
182
|
*/
|
199
183
|
static
|
200
|
-
|
184
|
+
RUCY_DEF_ALLOC(simpleobj_alloc, klass)
|
185
|
+
{
|
186
|
+
return value(new ClassWrapper<SimpleObj>, klass);
|
187
|
+
}
|
188
|
+
RUCY_END
|
189
|
+
|
190
|
+
static
|
191
|
+
RUCY_DEF1(simpleobj_initialize, name)
|
201
192
|
{
|
202
|
-
|
193
|
+
CHECK(SimpleObj);
|
194
|
+
THIS(SimpleObj)->init(name.c_str());
|
203
195
|
}
|
204
|
-
|
196
|
+
RUCY_END
|
205
197
|
|
206
|
-
static Xot::Ref<
|
198
|
+
static std::vector<Xot::Ref<SimpleObj> > simpleobj_refs;
|
207
199
|
|
208
200
|
static
|
209
|
-
|
201
|
+
RUCY_DEF1(simpleobj_set_refs, objs)
|
210
202
|
{
|
211
|
-
|
212
|
-
|
203
|
+
int size = objs.size();
|
204
|
+
for (int i = 0; i < size; ++i)
|
205
|
+
simpleobj_refs.push_back(to<SimpleObj*>(objs[i]));
|
206
|
+
return objs;
|
213
207
|
}
|
214
|
-
|
208
|
+
RUCY_END
|
215
209
|
|
216
210
|
static
|
217
|
-
|
211
|
+
RUCY_DEF0(simpleobj_clear_refs)
|
218
212
|
{
|
219
|
-
|
213
|
+
simpleobj_refs.clear();
|
220
214
|
}
|
221
|
-
|
215
|
+
RUCY_END
|
222
216
|
|
223
217
|
|
224
218
|
void
|
@@ -238,12 +232,8 @@ Init_class ()
|
|
238
232
|
cBase.define_method(
|
239
233
|
"is_name_overridable_faster_overridden",
|
240
234
|
is_name_overridable_faster_overridden<Base>);
|
241
|
-
cBase.define_method("clear_override_flags", clear_override_flags<Base>);
|
242
|
-
cBase.define_method("singleton_method_added", method_added_or_removed<true>);
|
243
|
-
cBase.define_method("singleton_method_removed", method_added_or_removed<true>);
|
244
|
-
cBase.define_singleton_method("method_added", method_added_or_removed<false>);
|
245
|
-
cBase.define_singleton_method("method_removed", method_added_or_removed<false>);
|
246
235
|
cBase.define_singleton_method("new_raw", base_new_raw);
|
236
|
+
cBase.define_clear_override_flags(Base_clear_override_flags);
|
247
237
|
|
248
238
|
cSub = mTester.define_class("Sub", cBase);
|
249
239
|
cSub.define_alloc_func(sub_alloc);
|
@@ -252,11 +242,12 @@ Init_class ()
|
|
252
242
|
cSub.define_method(
|
253
243
|
"is_name_overridable_faster_overridden",
|
254
244
|
is_name_overridable_faster_overridden<Sub>);
|
255
|
-
cSub.define_method("clear_override_flags", clear_override_flags<Sub>);
|
256
245
|
cSub.define_singleton_method("new_raw", sub_new_raw);
|
246
|
+
cSub.define_clear_override_flags(Sub_clear_override_flags);
|
257
247
|
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
248
|
+
cSimpleObj = mTester.define_class("SimpleObj");
|
249
|
+
cSimpleObj.define_alloc_func(simpleobj_alloc);
|
250
|
+
cSimpleObj.define_private_method("initialize", simpleobj_initialize);
|
251
|
+
cSimpleObj.define_function("set_refs", simpleobj_set_refs);
|
252
|
+
cSimpleObj.define_function("clear_refs", simpleobj_clear_refs);
|
262
253
|
}
|
data/ext/rucy/class.h
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
|
7
7
|
#include <xot/ref.h>
|
8
|
+
#include <xot/string.h>
|
8
9
|
#include <rucy/extension.h>
|
9
10
|
#include "tester.h"
|
10
11
|
|
@@ -75,22 +76,27 @@ class Sub : public Base
|
|
75
76
|
};// Sub
|
76
77
|
|
77
78
|
|
78
|
-
class
|
79
|
+
class SimpleObj : public Xot::RefCountable<>
|
79
80
|
{
|
80
81
|
|
81
82
|
public:
|
82
83
|
|
83
|
-
|
84
|
+
void init (const char* name_)
|
84
85
|
{
|
85
|
-
|
86
|
+
name = name_;
|
87
|
+
log("SimpleObj(" + name + ")");
|
86
88
|
}
|
87
89
|
|
88
|
-
~
|
90
|
+
~SimpleObj ()
|
89
91
|
{
|
90
|
-
log("~
|
92
|
+
log("~SimpleObj(" + name + ")");
|
91
93
|
}
|
92
94
|
|
93
|
-
|
95
|
+
private:
|
96
|
+
|
97
|
+
Xot::String name;
|
98
|
+
|
99
|
+
};// SimpleObj
|
94
100
|
|
95
101
|
|
96
102
|
#endif//EOH
|
data/ext/rucy/exception.cpp
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#include
|
1
|
+
#include "rucy.h"
|
2
2
|
|
3
3
|
|
4
4
|
using namespace Rucy;
|
@@ -8,51 +8,51 @@ using namespace Rucy;
|
|
8
8
|
raise ruby's exception.
|
9
9
|
*/
|
10
10
|
static
|
11
|
-
|
11
|
+
RUCY_DEF0(raise_ruby_exception)
|
12
12
|
{
|
13
13
|
throw RubyException(rb_eStandardError, "raise_ruby_exception");
|
14
14
|
}
|
15
|
-
|
15
|
+
RUCY_END
|
16
16
|
|
17
17
|
/*
|
18
18
|
raise in eval.
|
19
19
|
*/
|
20
20
|
static
|
21
|
-
|
21
|
+
RUCY_DEF0(raise_in_eval)
|
22
22
|
{
|
23
23
|
eval("raise 'raise_in_eval'");
|
24
24
|
}
|
25
|
-
|
25
|
+
RUCY_END
|
26
26
|
|
27
27
|
/*
|
28
28
|
throw nothing.
|
29
29
|
*/
|
30
30
|
static
|
31
|
-
|
31
|
+
RUCY_DEF0(throw_nothing)
|
32
32
|
{
|
33
33
|
throw;
|
34
34
|
}
|
35
|
-
|
35
|
+
RUCY_END
|
36
36
|
|
37
37
|
/*
|
38
38
|
throw std::exception.
|
39
39
|
*/
|
40
40
|
static
|
41
|
-
|
41
|
+
RUCY_DEF0(throw_std_exception)
|
42
42
|
{
|
43
43
|
throw std::exception();
|
44
44
|
}
|
45
|
-
|
45
|
+
RUCY_END
|
46
46
|
|
47
47
|
/*
|
48
48
|
throw std::runtime_error.
|
49
49
|
*/
|
50
50
|
static
|
51
|
-
|
51
|
+
RUCY_DEF0(throw_std_runtime_error)
|
52
52
|
{
|
53
53
|
throw std::runtime_error("std::runtime_error");
|
54
54
|
}
|
55
|
-
|
55
|
+
RUCY_END
|
56
56
|
|
57
57
|
struct MyException : public std::runtime_error
|
58
58
|
{
|
@@ -63,31 +63,31 @@ struct MyException : public std::runtime_error
|
|
63
63
|
throw custom exception class.
|
64
64
|
*/
|
65
65
|
static
|
66
|
-
|
66
|
+
RUCY_DEF0(throw_custom_exception)
|
67
67
|
{
|
68
68
|
throw MyException();
|
69
69
|
}
|
70
|
-
|
70
|
+
RUCY_END
|
71
71
|
|
72
72
|
/*
|
73
73
|
throw std::string.
|
74
74
|
*/
|
75
75
|
static
|
76
|
-
|
76
|
+
RUCY_DEF0(throw_std_string)
|
77
77
|
{
|
78
78
|
throw std::string("std::string");
|
79
79
|
}
|
80
|
-
|
80
|
+
RUCY_END
|
81
81
|
|
82
82
|
/*
|
83
83
|
throw char*.
|
84
84
|
*/
|
85
85
|
static
|
86
|
-
|
86
|
+
RUCY_DEF0(throw_cstring)
|
87
87
|
{
|
88
88
|
throw "cstring";
|
89
89
|
}
|
90
|
-
|
90
|
+
RUCY_END
|
91
91
|
|
92
92
|
|
93
93
|
void
|
data/ext/rucy/extconf.rb
CHANGED
@@ -1,63 +1,22 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
%w[../xot .]
|
5
|
+
.map {|s| File.expand_path "../../../#{s}/lib", __FILE__}
|
6
|
+
.each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
|
6
7
|
|
7
8
|
require 'mkmf'
|
8
|
-
require 'xot/
|
9
|
+
require 'xot/extconf'
|
9
10
|
require 'xot/module'
|
10
11
|
require 'rucy/module'
|
11
12
|
|
12
|
-
include Xot::Rake
|
13
13
|
|
14
|
+
Xot::ExtConf.new Xot, Rucy do
|
15
|
+
setup do
|
16
|
+
headers << 'boost/noncopyable.hpp' << 'ruby.h'
|
17
|
+
local_libs << 'rucy'
|
18
|
+
end
|
14
19
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
DEFS = []
|
19
|
-
INCDIRS = %w[
|
20
|
-
/opt/local/include
|
21
|
-
/opt/include
|
22
|
-
]
|
23
|
-
LIBDIRS = []
|
24
|
-
|
25
|
-
HEADERS = %w[
|
26
|
-
boost/noncopyable.hpp
|
27
|
-
ruby.h
|
28
|
-
xot.h
|
29
|
-
rucy.h
|
30
|
-
]
|
31
|
-
LIBS = %w[
|
32
|
-
stdc++
|
33
|
-
xot
|
34
|
-
rucy
|
35
|
-
]
|
36
|
-
|
37
|
-
|
38
|
-
DEFS << '_DEBUG' if debug
|
39
|
-
DEFS << 'NDEBUG' unless debug
|
40
|
-
DEFS << 'WINDOWS' << 'WIN32' if win32?
|
41
|
-
DEFS << 'COCOA' if cocoa?
|
42
|
-
DEFS << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
|
43
|
-
|
44
|
-
$CPPFLAGS << DEFS.map {|s| " -D#{s}"}.join
|
45
|
-
$CPPFLAGS << INCDIRS.map {|s| " -I#{s}"}.join
|
46
|
-
$LDFLAGS << LIBDIRS.map {|s| " -L#{s}"}.join
|
47
|
-
$CFLAGS << ' --stdlib=libc++' if clang?
|
48
|
-
$LOCAL_LIBS << ' -lrucy'
|
49
|
-
|
50
|
-
RbConfig::CONFIG.each do |key, val|
|
51
|
-
{'gcc' => 'g++', 'clang' => 'clang++'}.each {|from, to| val.gsub! from, to}
|
20
|
+
dir_config 'boost'
|
21
|
+
create_makefile 'rucy/tester'
|
52
22
|
end
|
53
|
-
|
54
|
-
|
55
|
-
dir_config 'boost'
|
56
|
-
dir_config 'xot', Xot.root_dir
|
57
|
-
dir_config 'rucy', Rucy.root_dir
|
58
|
-
|
59
|
-
exit 1 unless HEADERS.all? {|s| have_header(s)}
|
60
|
-
exit 1 unless LIBS.all? {|s| have_library(s)}
|
61
|
-
|
62
|
-
|
63
|
-
create_makefile 'rucy/tester'
|
data/ext/rucy/function.cpp
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#include
|
1
|
+
#include "rucy.h"
|
2
2
|
|
3
3
|
|
4
4
|
using namespace Rucy;
|
@@ -8,50 +8,62 @@ using namespace Rucy;
|
|
8
8
|
do nothing.
|
9
9
|
*/
|
10
10
|
static
|
11
|
-
|
11
|
+
RUCY_DEFN(do_nothing)
|
12
12
|
{
|
13
13
|
}
|
14
|
-
|
14
|
+
RUCY_END
|
15
15
|
|
16
16
|
/*
|
17
17
|
return nil.
|
18
18
|
*/
|
19
19
|
static
|
20
|
-
|
20
|
+
RUCY_DEF0(return_nil)
|
21
21
|
{
|
22
|
-
return
|
22
|
+
return nil();
|
23
23
|
}
|
24
|
-
|
24
|
+
RUCY_END
|
25
25
|
|
26
26
|
/*
|
27
27
|
return int.
|
28
28
|
*/
|
29
29
|
static
|
30
|
-
|
30
|
+
RUCY_DEF0(return_int)
|
31
31
|
{
|
32
32
|
return value(1);
|
33
33
|
}
|
34
|
-
|
34
|
+
RUCY_END
|
35
35
|
|
36
36
|
/*
|
37
37
|
return flaot.
|
38
38
|
*/
|
39
39
|
static
|
40
|
-
|
40
|
+
RUCY_DEF0(return_float)
|
41
41
|
{
|
42
42
|
return value(1.0f);
|
43
43
|
}
|
44
|
-
|
44
|
+
RUCY_END
|
45
45
|
|
46
46
|
/*
|
47
47
|
return string.
|
48
48
|
*/
|
49
49
|
static
|
50
|
-
|
50
|
+
RUCY_DEF0(return_string)
|
51
51
|
{
|
52
52
|
return value("");
|
53
53
|
}
|
54
|
-
|
54
|
+
RUCY_END
|
55
|
+
|
56
|
+
/*
|
57
|
+
check_arg_count
|
58
|
+
*/
|
59
|
+
static
|
60
|
+
RUCY_DEFN(arg_count_must_1)
|
61
|
+
{
|
62
|
+
check_arg_count(__FILE__, __LINE__, "arg_count_must_1", argc, 1);
|
63
|
+
RUCY_SYM(ok);
|
64
|
+
return ok.value();
|
65
|
+
}
|
66
|
+
RUCY_END
|
55
67
|
|
56
68
|
|
57
69
|
void
|
@@ -65,4 +77,5 @@ Init_function ()
|
|
65
77
|
mTester.define_method("return_int", return_int);
|
66
78
|
mTester.define_method("return_float", return_float);
|
67
79
|
mTester.define_method("return_string", return_string);
|
80
|
+
mTester.define_method("arg_count_must_1", arg_count_must_1);
|
68
81
|
}
|
data/ext/rucy/struct.cpp
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#include
|
1
|
+
#include "rucy.h"
|
2
2
|
|
3
3
|
|
4
4
|
using namespace Rucy;
|
@@ -16,58 +16,40 @@ struct Struct
|
|
16
16
|
|
17
17
|
static Class cStruct;
|
18
18
|
|
19
|
-
|
20
|
-
namespace Rucy
|
21
|
-
{
|
22
|
-
|
23
|
-
|
24
|
-
static Value
|
25
|
-
value (const Struct& obj)
|
26
|
-
{
|
27
|
-
return new_type(cStruct, new Struct(obj));
|
28
|
-
}
|
29
|
-
|
30
|
-
template <> inline Struct*
|
31
|
-
value_to<Struct*> (Value val, bool)
|
32
|
-
{
|
33
|
-
return get_type_ptr<Struct>(val, cStruct);
|
34
|
-
}
|
35
|
-
|
36
|
-
|
37
|
-
}// Rucy
|
19
|
+
RUCY_VALUE_FROM_TO(Struct, cStruct)
|
38
20
|
|
39
21
|
|
40
22
|
/*
|
41
23
|
alloc function.
|
42
24
|
*/
|
43
25
|
static
|
44
|
-
|
26
|
+
RUCY_DEF_ALLOC(alloc, klass)
|
45
27
|
{
|
46
28
|
return new_type<Struct>(klass);
|
47
29
|
}
|
48
|
-
|
30
|
+
RUCY_END
|
49
31
|
|
50
32
|
/*
|
51
33
|
get num.
|
52
34
|
*/
|
53
35
|
static
|
54
|
-
|
36
|
+
RUCY_DEF0(get_num)
|
55
37
|
{
|
56
38
|
Struct* obj = to<Struct*>(self);
|
57
39
|
if (obj) return value(obj->num);
|
58
40
|
}
|
59
|
-
|
41
|
+
RUCY_END
|
60
42
|
|
61
43
|
/*
|
62
44
|
set num.
|
63
45
|
*/
|
64
46
|
static
|
65
|
-
|
47
|
+
RUCY_DEF1(set_num, num)
|
66
48
|
{
|
67
49
|
Struct* obj = to<Struct*>(self);
|
68
50
|
if (obj) obj->num = to<int>(num);
|
69
51
|
}
|
70
|
-
|
52
|
+
RUCY_END
|
71
53
|
|
72
54
|
|
73
55
|
void
|