rucy 0.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.
- data/Gemfile +3 -0
- data/Gemfile.lock +12 -0
- data/README +4 -0
- data/Rakefile +58 -0
- data/VERSION +1 -0
- data/ext/rucy/extconf.rb +50 -0
- data/ext/rucy/tester.cpp +102 -0
- data/include/rucy/class.h +37 -0
- data/include/rucy/defs.h +97 -0
- data/include/rucy/defs.h.erb +56 -0
- data/include/rucy/exception.h +124 -0
- data/include/rucy/function.h +245 -0
- data/include/rucy/function.h.erb +73 -0
- data/include/rucy/gc.h +59 -0
- data/include/rucy/module.h +96 -0
- data/include/rucy/module.h.erb +68 -0
- data/include/rucy/rucy.h +64 -0
- data/include/rucy/string.h +28 -0
- data/include/rucy/symbol.h +50 -0
- data/include/rucy/value.h +291 -0
- data/include/rucy/value.h.erb +278 -0
- data/include/rucy.h +10 -0
- data/lib/rucy.rb +24 -0
- data/rucy.gemspec +50 -0
- data/src/class.cpp +35 -0
- data/src/exception.cpp +124 -0
- data/src/function.cpp +157 -0
- data/src/function.cpp.erb +74 -0
- data/src/gc.cpp +63 -0
- data/src/module.cpp +321 -0
- data/src/module.cpp.erb +103 -0
- data/src/rucy.cpp +56 -0
- data/src/string.cpp +78 -0
- data/src/symbol.cpp +51 -0
- data/src/value.cpp +511 -0
- data/src/value.cpp.erb +409 -0
- data/support.rb +58 -0
- data/task/ext.rake +36 -0
- data/task/gem.rake +33 -0
- data/task/lib.rake +47 -0
- data/test/test_rucy.rb +57 -0
- metadata +116 -0
data/src/module.cpp
ADDED
@@ -0,0 +1,321 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#include "rucy/module.h"
|
3
|
+
|
4
|
+
|
5
|
+
#include <rucy/class.h>
|
6
|
+
|
7
|
+
|
8
|
+
namespace Rucy
|
9
|
+
{
|
10
|
+
|
11
|
+
|
12
|
+
Module::Module (VALUE v)
|
13
|
+
: Super(v)
|
14
|
+
{
|
15
|
+
}
|
16
|
+
|
17
|
+
Module
|
18
|
+
Module::define_module (const char* name)
|
19
|
+
{
|
20
|
+
return rb_define_module_under(value(), name);
|
21
|
+
}
|
22
|
+
|
23
|
+
Class
|
24
|
+
Module::define_class (const char* name, Value super)
|
25
|
+
{
|
26
|
+
return rb_define_class_under(value(), name, super);
|
27
|
+
}
|
28
|
+
|
29
|
+
Module
|
30
|
+
Module::define_const (const char* name, Value val)
|
31
|
+
{
|
32
|
+
rb_define_const(value(), name, val);
|
33
|
+
return *this;
|
34
|
+
}
|
35
|
+
|
36
|
+
Module
|
37
|
+
Module::define_attr (const char* name, bool read, bool write)
|
38
|
+
{
|
39
|
+
rb_define_attr(value(), name, read, write);
|
40
|
+
return *this;
|
41
|
+
}
|
42
|
+
|
43
|
+
Module
|
44
|
+
Module::define_alias (const char* new_, const char* old)
|
45
|
+
{
|
46
|
+
rb_define_alias(value(), new_, old);
|
47
|
+
return *this;
|
48
|
+
}
|
49
|
+
|
50
|
+
Module
|
51
|
+
Module::undef_method (const char* name)
|
52
|
+
{
|
53
|
+
rb_undef_method(value(), name);
|
54
|
+
return *this;
|
55
|
+
}
|
56
|
+
|
57
|
+
Module
|
58
|
+
Module::include_module (Value module)
|
59
|
+
{
|
60
|
+
rb_include_module(value(), module);
|
61
|
+
return *this;
|
62
|
+
}
|
63
|
+
|
64
|
+
Module
|
65
|
+
Module::define_function (const char* name, RubyFunctionN fun)
|
66
|
+
{
|
67
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), -1);
|
68
|
+
return *this;
|
69
|
+
}
|
70
|
+
Module
|
71
|
+
Module::define_function (const char* name, RubyFunction0 fun)
|
72
|
+
{
|
73
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 0);
|
74
|
+
return *this;
|
75
|
+
}
|
76
|
+
Module
|
77
|
+
Module::define_function (const char* name, RubyFunction1 fun)
|
78
|
+
{
|
79
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 1);
|
80
|
+
return *this;
|
81
|
+
}
|
82
|
+
Module
|
83
|
+
Module::define_function (const char* name, RubyFunction2 fun)
|
84
|
+
{
|
85
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 2);
|
86
|
+
return *this;
|
87
|
+
}
|
88
|
+
Module
|
89
|
+
Module::define_function (const char* name, RubyFunction3 fun)
|
90
|
+
{
|
91
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 3);
|
92
|
+
return *this;
|
93
|
+
}
|
94
|
+
Module
|
95
|
+
Module::define_function (const char* name, RubyFunction4 fun)
|
96
|
+
{
|
97
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 4);
|
98
|
+
return *this;
|
99
|
+
}
|
100
|
+
Module
|
101
|
+
Module::define_function (const char* name, RubyFunction5 fun)
|
102
|
+
{
|
103
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 5);
|
104
|
+
return *this;
|
105
|
+
}
|
106
|
+
Module
|
107
|
+
Module::define_function (const char* name, RubyFunction6 fun)
|
108
|
+
{
|
109
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 6);
|
110
|
+
return *this;
|
111
|
+
}
|
112
|
+
Module
|
113
|
+
Module::define_function (const char* name, RubyFunction7 fun)
|
114
|
+
{
|
115
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 7);
|
116
|
+
return *this;
|
117
|
+
}
|
118
|
+
Module
|
119
|
+
Module::define_function (const char* name, RubyFunction8 fun)
|
120
|
+
{
|
121
|
+
rb_define_module_function(value(), name, RUBY_METHOD_FUNC(fun), 8);
|
122
|
+
return *this;
|
123
|
+
}
|
124
|
+
Module
|
125
|
+
Module::define_method (const char* name, RubyFunctionN fun)
|
126
|
+
{
|
127
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), -1);
|
128
|
+
return *this;
|
129
|
+
}
|
130
|
+
Module
|
131
|
+
Module::define_method (const char* name, RubyFunction0 fun)
|
132
|
+
{
|
133
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 0);
|
134
|
+
return *this;
|
135
|
+
}
|
136
|
+
Module
|
137
|
+
Module::define_method (const char* name, RubyFunction1 fun)
|
138
|
+
{
|
139
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 1);
|
140
|
+
return *this;
|
141
|
+
}
|
142
|
+
Module
|
143
|
+
Module::define_method (const char* name, RubyFunction2 fun)
|
144
|
+
{
|
145
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 2);
|
146
|
+
return *this;
|
147
|
+
}
|
148
|
+
Module
|
149
|
+
Module::define_method (const char* name, RubyFunction3 fun)
|
150
|
+
{
|
151
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 3);
|
152
|
+
return *this;
|
153
|
+
}
|
154
|
+
Module
|
155
|
+
Module::define_method (const char* name, RubyFunction4 fun)
|
156
|
+
{
|
157
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 4);
|
158
|
+
return *this;
|
159
|
+
}
|
160
|
+
Module
|
161
|
+
Module::define_method (const char* name, RubyFunction5 fun)
|
162
|
+
{
|
163
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 5);
|
164
|
+
return *this;
|
165
|
+
}
|
166
|
+
Module
|
167
|
+
Module::define_method (const char* name, RubyFunction6 fun)
|
168
|
+
{
|
169
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 6);
|
170
|
+
return *this;
|
171
|
+
}
|
172
|
+
Module
|
173
|
+
Module::define_method (const char* name, RubyFunction7 fun)
|
174
|
+
{
|
175
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 7);
|
176
|
+
return *this;
|
177
|
+
}
|
178
|
+
Module
|
179
|
+
Module::define_method (const char* name, RubyFunction8 fun)
|
180
|
+
{
|
181
|
+
rb_define_method(value(), name, RUBY_METHOD_FUNC(fun), 8);
|
182
|
+
return *this;
|
183
|
+
}
|
184
|
+
Module
|
185
|
+
Module::define_private_method (const char* name, RubyFunctionN fun)
|
186
|
+
{
|
187
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), -1);
|
188
|
+
return *this;
|
189
|
+
}
|
190
|
+
Module
|
191
|
+
Module::define_private_method (const char* name, RubyFunction0 fun)
|
192
|
+
{
|
193
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 0);
|
194
|
+
return *this;
|
195
|
+
}
|
196
|
+
Module
|
197
|
+
Module::define_private_method (const char* name, RubyFunction1 fun)
|
198
|
+
{
|
199
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 1);
|
200
|
+
return *this;
|
201
|
+
}
|
202
|
+
Module
|
203
|
+
Module::define_private_method (const char* name, RubyFunction2 fun)
|
204
|
+
{
|
205
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 2);
|
206
|
+
return *this;
|
207
|
+
}
|
208
|
+
Module
|
209
|
+
Module::define_private_method (const char* name, RubyFunction3 fun)
|
210
|
+
{
|
211
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 3);
|
212
|
+
return *this;
|
213
|
+
}
|
214
|
+
Module
|
215
|
+
Module::define_private_method (const char* name, RubyFunction4 fun)
|
216
|
+
{
|
217
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 4);
|
218
|
+
return *this;
|
219
|
+
}
|
220
|
+
Module
|
221
|
+
Module::define_private_method (const char* name, RubyFunction5 fun)
|
222
|
+
{
|
223
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 5);
|
224
|
+
return *this;
|
225
|
+
}
|
226
|
+
Module
|
227
|
+
Module::define_private_method (const char* name, RubyFunction6 fun)
|
228
|
+
{
|
229
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 6);
|
230
|
+
return *this;
|
231
|
+
}
|
232
|
+
Module
|
233
|
+
Module::define_private_method (const char* name, RubyFunction7 fun)
|
234
|
+
{
|
235
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 7);
|
236
|
+
return *this;
|
237
|
+
}
|
238
|
+
Module
|
239
|
+
Module::define_private_method (const char* name, RubyFunction8 fun)
|
240
|
+
{
|
241
|
+
rb_define_private_method(value(), name, RUBY_METHOD_FUNC(fun), 8);
|
242
|
+
return *this;
|
243
|
+
}
|
244
|
+
Module
|
245
|
+
Module::define_singleton_method (const char* name, RubyFunctionN fun)
|
246
|
+
{
|
247
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), -1);
|
248
|
+
return *this;
|
249
|
+
}
|
250
|
+
Module
|
251
|
+
Module::define_singleton_method (const char* name, RubyFunction0 fun)
|
252
|
+
{
|
253
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 0);
|
254
|
+
return *this;
|
255
|
+
}
|
256
|
+
Module
|
257
|
+
Module::define_singleton_method (const char* name, RubyFunction1 fun)
|
258
|
+
{
|
259
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 1);
|
260
|
+
return *this;
|
261
|
+
}
|
262
|
+
Module
|
263
|
+
Module::define_singleton_method (const char* name, RubyFunction2 fun)
|
264
|
+
{
|
265
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 2);
|
266
|
+
return *this;
|
267
|
+
}
|
268
|
+
Module
|
269
|
+
Module::define_singleton_method (const char* name, RubyFunction3 fun)
|
270
|
+
{
|
271
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 3);
|
272
|
+
return *this;
|
273
|
+
}
|
274
|
+
Module
|
275
|
+
Module::define_singleton_method (const char* name, RubyFunction4 fun)
|
276
|
+
{
|
277
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 4);
|
278
|
+
return *this;
|
279
|
+
}
|
280
|
+
Module
|
281
|
+
Module::define_singleton_method (const char* name, RubyFunction5 fun)
|
282
|
+
{
|
283
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 5);
|
284
|
+
return *this;
|
285
|
+
}
|
286
|
+
Module
|
287
|
+
Module::define_singleton_method (const char* name, RubyFunction6 fun)
|
288
|
+
{
|
289
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 6);
|
290
|
+
return *this;
|
291
|
+
}
|
292
|
+
Module
|
293
|
+
Module::define_singleton_method (const char* name, RubyFunction7 fun)
|
294
|
+
{
|
295
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 7);
|
296
|
+
return *this;
|
297
|
+
}
|
298
|
+
Module
|
299
|
+
Module::define_singleton_method (const char* name, RubyFunction8 fun)
|
300
|
+
{
|
301
|
+
rb_define_singleton_method(value(), name, RUBY_METHOD_FUNC(fun), 8);
|
302
|
+
return *this;
|
303
|
+
}
|
304
|
+
|
305
|
+
|
306
|
+
Module
|
307
|
+
define_module (const char* name)
|
308
|
+
{
|
309
|
+
return rb_define_module(name);
|
310
|
+
}
|
311
|
+
|
312
|
+
|
313
|
+
Module
|
314
|
+
rucy_module ()
|
315
|
+
{
|
316
|
+
static Module m = define_module("Rucy");
|
317
|
+
return m;
|
318
|
+
}
|
319
|
+
|
320
|
+
|
321
|
+
}// Rucy
|
data/src/module.cpp.erb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
% require 'support'
|
3
|
+
#include "rucy/module.h"
|
4
|
+
|
5
|
+
|
6
|
+
#include <rucy/class.h>
|
7
|
+
|
8
|
+
|
9
|
+
namespace Rucy
|
10
|
+
{
|
11
|
+
|
12
|
+
|
13
|
+
Module::Module (VALUE v)
|
14
|
+
: Super(v)
|
15
|
+
{
|
16
|
+
}
|
17
|
+
|
18
|
+
Module
|
19
|
+
Module::define_module (const char* name)
|
20
|
+
{
|
21
|
+
return rb_define_module_under(value(), name);
|
22
|
+
}
|
23
|
+
|
24
|
+
Class
|
25
|
+
Module::define_class (const char* name, Value super)
|
26
|
+
{
|
27
|
+
return rb_define_class_under(value(), name, super);
|
28
|
+
}
|
29
|
+
|
30
|
+
Module
|
31
|
+
Module::define_const (const char* name, Value val)
|
32
|
+
{
|
33
|
+
rb_define_const(value(), name, val);
|
34
|
+
return *this;
|
35
|
+
}
|
36
|
+
|
37
|
+
Module
|
38
|
+
Module::define_attr (const char* name, bool read, bool write)
|
39
|
+
{
|
40
|
+
rb_define_attr(value(), name, read, write);
|
41
|
+
return *this;
|
42
|
+
}
|
43
|
+
|
44
|
+
Module
|
45
|
+
Module::define_alias (const char* new_, const char* old)
|
46
|
+
{
|
47
|
+
rb_define_alias(value(), new_, old);
|
48
|
+
return *this;
|
49
|
+
}
|
50
|
+
|
51
|
+
Module
|
52
|
+
Module::undef_method (const char* name)
|
53
|
+
{
|
54
|
+
rb_undef_method(value(), name);
|
55
|
+
return *this;
|
56
|
+
}
|
57
|
+
|
58
|
+
Module
|
59
|
+
Module::include_module (Value module)
|
60
|
+
{
|
61
|
+
rb_include_module(value(), module);
|
62
|
+
return *this;
|
63
|
+
}
|
64
|
+
|
65
|
+
% [
|
66
|
+
% ['define_function', 'rb_define_module_function'],
|
67
|
+
% ['define_method', 'rb_define_method'],
|
68
|
+
% ['define_private_method', 'rb_define_private_method'],
|
69
|
+
% ['define_singleton_method', 'rb_define_singleton_method']
|
70
|
+
% ].each do |(op, rb_op)|
|
71
|
+
Module
|
72
|
+
Module::<%= op %> (const char* name, RubyFunctionN fun)
|
73
|
+
{
|
74
|
+
<%= rb_op %>(value(), name, RUBY_METHOD_FUNC(fun), -1);
|
75
|
+
return *this;
|
76
|
+
}
|
77
|
+
% NTIMES.each do |n|
|
78
|
+
Module
|
79
|
+
Module::<%= op %> (const char* name, RubyFunction<%= n %> fun)
|
80
|
+
{
|
81
|
+
<%= rb_op %>(value(), name, RUBY_METHOD_FUNC(fun), <%= n %>);
|
82
|
+
return *this;
|
83
|
+
}
|
84
|
+
% end
|
85
|
+
% end
|
86
|
+
|
87
|
+
|
88
|
+
Module
|
89
|
+
define_module (const char* name)
|
90
|
+
{
|
91
|
+
return rb_define_module(name);
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
Module
|
96
|
+
rucy_module ()
|
97
|
+
{
|
98
|
+
static Module m = define_module("Rucy");
|
99
|
+
return m;
|
100
|
+
}
|
101
|
+
|
102
|
+
|
103
|
+
}// Rucy
|
data/src/rucy.cpp
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#include "rucy/rucy.h"
|
3
|
+
|
4
|
+
|
5
|
+
#include <rucy/module.h>
|
6
|
+
#include <rucy/exception.h>
|
7
|
+
|
8
|
+
|
9
|
+
namespace Rucy
|
10
|
+
{
|
11
|
+
|
12
|
+
|
13
|
+
bool
|
14
|
+
init ()
|
15
|
+
{
|
16
|
+
static bool done = false;
|
17
|
+
if (done) return true;
|
18
|
+
done = true;
|
19
|
+
|
20
|
+
rucy_module();
|
21
|
+
native_error_class();
|
22
|
+
return true;
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
Value
|
27
|
+
require (const char* name)
|
28
|
+
{
|
29
|
+
return rb_require(name);
|
30
|
+
}
|
31
|
+
|
32
|
+
void
|
33
|
+
define_const (const char* name, Value val)
|
34
|
+
{
|
35
|
+
rb_define_global_const(name, val);
|
36
|
+
}
|
37
|
+
|
38
|
+
|
39
|
+
bool
|
40
|
+
check_class (Value obj, Value class_)
|
41
|
+
{
|
42
|
+
return class_ && obj.is_kind_of(class_);
|
43
|
+
|
44
|
+
#if 0
|
45
|
+
SYMBOL(klass, "class");
|
46
|
+
SYM(name);
|
47
|
+
String message = stringf(
|
48
|
+
"object is instance of %s, bug %s is expected.",
|
49
|
+
obj(klass)(name).c_str(), class_(name).c_str());
|
50
|
+
|
51
|
+
throw RubyException(rb_eTypeError, message);
|
52
|
+
#endif
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
}// Rucy
|
data/src/string.cpp
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#include "rucy/string.h"
|
3
|
+
|
4
|
+
|
5
|
+
#include <stdio.h>
|
6
|
+
#include <stdarg.h>
|
7
|
+
#include <boost/scoped_array.hpp>
|
8
|
+
|
9
|
+
|
10
|
+
namespace Rucy
|
11
|
+
{
|
12
|
+
|
13
|
+
|
14
|
+
String
|
15
|
+
stringf (const char* format, ...)
|
16
|
+
{
|
17
|
+
va_list args;
|
18
|
+
va_start(args, format);
|
19
|
+
String ret = stringf(format, args);
|
20
|
+
va_end(args);
|
21
|
+
return ret;
|
22
|
+
}
|
23
|
+
|
24
|
+
String
|
25
|
+
stringf (const char* format, va_list args)
|
26
|
+
{
|
27
|
+
enum {BUFSIZE = 256};
|
28
|
+
char stack[BUFSIZE];
|
29
|
+
if (vsnprintf(&stack[0], BUFSIZE, format, args) <= BUFSIZE)
|
30
|
+
return &stack[0];
|
31
|
+
|
32
|
+
int bufsize = BUFSIZE;// vscprintf(format, args);
|
33
|
+
boost::scoped_array<char> heap;
|
34
|
+
while (true)
|
35
|
+
{
|
36
|
+
bufsize *= 2;
|
37
|
+
heap.reset(new char[bufsize]);
|
38
|
+
if (vsnprintf(&heap[0], bufsize, format, args) <= bufsize)
|
39
|
+
return &heap[0];
|
40
|
+
}
|
41
|
+
|
42
|
+
return NULL;
|
43
|
+
}
|
44
|
+
|
45
|
+
template <> String
|
46
|
+
to_s<int> (const int& val)
|
47
|
+
{
|
48
|
+
return stringf("%d", val);
|
49
|
+
}
|
50
|
+
|
51
|
+
template <> String
|
52
|
+
to_s<float> (const float& val)
|
53
|
+
{
|
54
|
+
return stringf("%f", val);
|
55
|
+
}
|
56
|
+
|
57
|
+
template <> String
|
58
|
+
to_s<double> (const double& val)
|
59
|
+
{
|
60
|
+
return stringf("%f", val);
|
61
|
+
}
|
62
|
+
|
63
|
+
typedef const char* const_char_p;
|
64
|
+
|
65
|
+
template <> String
|
66
|
+
to_s<const_char_p> (const const_char_p& val)
|
67
|
+
{
|
68
|
+
return val;
|
69
|
+
}
|
70
|
+
|
71
|
+
template <> String
|
72
|
+
to_s<String> (const String& val)
|
73
|
+
{
|
74
|
+
return val;
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
}// Rucy
|
data/src/symbol.cpp
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
// -*- c++ -*-
|
2
|
+
#include "rucy/symbol.h"
|
3
|
+
|
4
|
+
|
5
|
+
#include <rucy/rucy.h>
|
6
|
+
|
7
|
+
|
8
|
+
namespace Rucy
|
9
|
+
{
|
10
|
+
|
11
|
+
|
12
|
+
Symbol::Symbol ()
|
13
|
+
: id_(0)
|
14
|
+
{
|
15
|
+
}
|
16
|
+
|
17
|
+
Symbol::Symbol (ID id)
|
18
|
+
: id_(id)
|
19
|
+
{
|
20
|
+
}
|
21
|
+
|
22
|
+
Symbol::Symbol (const char* str)
|
23
|
+
: id_(rb_intern(str))
|
24
|
+
{
|
25
|
+
}
|
26
|
+
|
27
|
+
ID
|
28
|
+
Symbol::id () const
|
29
|
+
{
|
30
|
+
return id_;
|
31
|
+
}
|
32
|
+
|
33
|
+
const char*
|
34
|
+
Symbol::c_str () const
|
35
|
+
{
|
36
|
+
return rb_id2name(id_);
|
37
|
+
}
|
38
|
+
|
39
|
+
Symbol::operator bool () const
|
40
|
+
{
|
41
|
+
return id_ != 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
bool
|
45
|
+
Symbol::operator ! () const
|
46
|
+
{
|
47
|
+
return !operator bool();
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
}// Rucy
|