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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.doc/ext/rucy/class.cpp +48 -56
  3. data/.doc/ext/rucy/exception.cpp +1 -1
  4. data/.doc/ext/rucy/function.cpp +14 -2
  5. data/.doc/ext/rucy/struct.cpp +2 -20
  6. data/.doc/ext/rucy/tester.cpp +7 -19
  7. data/.doc/ext/rucy/value.cpp +23 -1
  8. data/{README → README.md} +0 -0
  9. data/Rakefile +7 -5
  10. data/VERSION +1 -1
  11. data/bin/rucy2rdoc +8 -5
  12. data/ext/rucy/class.cpp +78 -87
  13. data/ext/rucy/class.h +12 -6
  14. data/ext/rucy/exception.cpp +17 -17
  15. data/ext/rucy/extconf.rb +11 -52
  16. data/ext/rucy/function.cpp +25 -12
  17. data/ext/rucy/struct.cpp +8 -26
  18. data/ext/rucy/tester.cpp +11 -24
  19. data/ext/rucy/value.cpp +32 -9
  20. data/include/rucy/class.h +5 -3
  21. data/include/rucy/exception.h +17 -71
  22. data/include/rucy/extension.h.erb +489 -0
  23. data/include/rucy/function.h.erb +20 -34
  24. data/include/rucy/module.h.erb +20 -14
  25. data/include/rucy/ruby.h +23 -0
  26. data/include/rucy/rucy.h +7 -66
  27. data/include/rucy/symbol.h +11 -11
  28. data/include/rucy/value.h.erb +98 -176
  29. data/include/rucy.h +9 -1
  30. data/lib/rucy/module.rb +11 -7
  31. data/rucy.gemspec +3 -4
  32. data/src/class.cpp +34 -6
  33. data/src/exception.cpp +69 -54
  34. data/src/extension.cpp +59 -0
  35. data/src/function.cpp.erb +17 -25
  36. data/src/module.cpp.erb +25 -16
  37. data/src/rucy.cpp +15 -25
  38. data/src/symbol.cpp +18 -17
  39. data/src/value.cpp.erb +374 -175
  40. data/task/doc.rake +5 -0
  41. data/test/helper.rb +6 -2
  42. data/test/test_class.rb +27 -20
  43. data/test/test_function.rb +6 -0
  44. data/test/test_value.rb +4 -0
  45. metadata +29 -39
  46. data/.gitignore +0 -22
  47. data/ChangeLog +0 -13
  48. data/include/rucy/defs.h.erb +0 -76
  49. data/include/rucy/extension.h +0 -206
data/task/doc.rake CHANGED
@@ -1,6 +1,11 @@
1
1
  # -*- mode: ruby; coding: utf-8 -*-
2
2
 
3
3
 
4
+ File.expand_path('../../bin', __FILE__).tap do |path|
5
+ ENV['PATH'] += ":#{path}" unless ENV['PATH'].split(':').include?(path)
6
+ end
7
+
8
+
4
9
  task :doc => 'doc:build'
5
10
 
6
11
  %w[clean rdoc].each do |t|
data/test/helper.rb CHANGED
@@ -1,9 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
 
4
- require 'xot/load_path'
5
- Xot::LoadPath.unshift File.expand_path('../../lib', __FILE__)
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 'test/unit'
9
+ require 'xot/test'
8
10
  require 'rucy'
9
11
  require 'rucy/tester'
12
+
13
+ include Xot::Test
data/test/test_class.rb CHANGED
@@ -45,6 +45,12 @@ class TestClass < Test::Unit::TestCase
45
45
  Sub.new_raw *args
46
46
  end
47
47
 
48
+ def last_log (pattern = nil)
49
+ logs = Rucy::Tester.all_logs
50
+ logs.select! {|o| o =~ pattern} if pattern
51
+ logs.last
52
+ end
53
+
48
54
  def test_is_kind_of_base ()
49
55
  assert_kind_of Base, base
50
56
  assert_kind_of Base, base_raw
@@ -58,13 +64,13 @@ class TestClass < Test::Unit::TestCase
58
64
  assert_kind_of Sub, temp
59
65
  assert_kind_of Temp, temp
60
66
 
61
- assert !base .kind_of?(Sub)
62
- assert !base_raw .kind_of?(Sub)
63
- assert !base .kind_of?(Temp)
64
- assert !base_raw .kind_of?(Temp)
67
+ assert_not base .kind_of?(Sub)
68
+ assert_not base_raw .kind_of?(Sub)
69
+ assert_not base .kind_of?(Temp)
70
+ assert_not base_raw .kind_of?(Temp)
65
71
 
66
- assert !sub .kind_of?(Temp)
67
- assert !sub_raw.kind_of?(Temp)
72
+ assert_not sub .kind_of?(Temp)
73
+ assert_not sub_raw.kind_of?(Temp)
68
74
  end
69
75
 
70
76
  def test_name ()
@@ -128,34 +134,35 @@ class TestClass < Test::Unit::TestCase
128
134
  end
129
135
 
130
136
  def test_gc ()
131
- def gc () 10.times {GC.start} end
137
+ def simple_objs (name, n = 10) ([nil] * n).map {SimpleObj.new name} end
138
+ def gc (n = 10) n.times {GC.start}; print '' end
132
139
  rt = Rucy::Tester
133
140
 
134
141
  gc
135
142
  rt.clear_logs
136
143
 
137
- o = RubyObj.new
138
- assert_equal 'RubyObj()', last_log
144
+ objs = simple_objs 1
145
+ assert_equal 'SimpleObj(1)', last_log(/1/)
139
146
  gc
140
- assert_equal 'RubyObj()', last_log
141
- o = nil
147
+ assert_equal 'SimpleObj(1)', last_log(/1/)
148
+ objs = nil
142
149
  gc
143
- assert_equal '~RubyObj()', last_log
150
+ assert_equal '~SimpleObj(1)', last_log(/1/)
144
151
 
145
152
  gc
146
153
  rt.clear_logs
147
154
 
148
- o = RubyObj.new
149
- assert_equal 'RubyObj()', last_log
150
- RubyObj.set_ref o
155
+ objs = simple_objs 2
156
+ assert_equal 'SimpleObj(2)', last_log(/2/)
157
+ SimpleObj.set_refs objs
151
158
  gc
152
- assert_equal 'RubyObj()', last_log
153
- o = nil
159
+ assert_equal 'SimpleObj(2)', last_log(/2/)
160
+ objs = nil
154
161
  gc
155
- assert_equal 'RubyObj()', last_log
156
- RubyObj.clear_ref
162
+ assert_equal 'SimpleObj(2)', last_log(/2/)
163
+ SimpleObj.clear_refs
157
164
  gc
158
- assert_equal '~RubyObj()', last_log
165
+ assert_equal '~SimpleObj(2)', last_log(/2/)
159
166
  end
160
167
 
161
168
  end# TestClass
@@ -28,4 +28,10 @@ class TestFunction < Test::Unit::TestCase
28
28
  assert_kind_of String, return_string
29
29
  end
30
30
 
31
+ def test_check_arg_count ()
32
+ assert_equal :ok, arg_count_must_1(:arg1)
33
+ assert_raise(ArgumentError) {arg_count_must_1}
34
+ assert_raises(ArgumentError) {arg_count_must_1 :arg1, :arg2}
35
+ end
36
+
31
37
  end# TestFunction
data/test/test_value.rb CHANGED
@@ -13,6 +13,10 @@ class TestFunction < Test::Unit::TestCase
13
13
  assert_equal false, false_to_value
14
14
  assert_equal nil, null_to_value
15
15
  assert_equal nil, nil_value
16
+ assert_equal [1], array_value(1)
17
+ assert_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], array_value(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
18
+ assert_raise(ArgumentError) {array_value}
19
+ assert_raise(ArgumentError) {array_value 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
16
20
  end
17
21
 
18
22
  end# TestFunction
metadata CHANGED
@@ -1,62 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rucy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
5
- prerelease:
4
+ version: 0.1.7
6
5
  platform: ruby
7
6
  authors:
8
7
  - snori
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2014-08-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rake
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: xot
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: gemcutter
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: This library helps you to develop Ruby Extension by C++.
@@ -66,17 +59,14 @@ executables:
66
59
  extensions:
67
60
  - Rakefile
68
61
  extra_rdoc_files:
69
- - README
70
- - .doc/ext/rucy/class.cpp
71
- - .doc/ext/rucy/exception.cpp
72
- - .doc/ext/rucy/function.cpp
73
- - .doc/ext/rucy/struct.cpp
74
- - .doc/ext/rucy/tester.cpp
75
- - .doc/ext/rucy/value.cpp
62
+ - ".doc/ext/rucy/class.cpp"
63
+ - ".doc/ext/rucy/exception.cpp"
64
+ - ".doc/ext/rucy/function.cpp"
65
+ - ".doc/ext/rucy/struct.cpp"
66
+ - ".doc/ext/rucy/tester.cpp"
67
+ - ".doc/ext/rucy/value.cpp"
76
68
  files:
77
- - .gitignore
78
- - ChangeLog
79
- - README
69
+ - README.md
80
70
  - Rakefile
81
71
  - VERSION
82
72
  - bin/rucy2rdoc
@@ -91,11 +81,11 @@ files:
91
81
  - ext/rucy/value.cpp
92
82
  - include/rucy.h
93
83
  - include/rucy/class.h
94
- - include/rucy/defs.h.erb
95
84
  - include/rucy/exception.h
96
- - include/rucy/extension.h
85
+ - include/rucy/extension.h.erb
97
86
  - include/rucy/function.h.erb
98
87
  - include/rucy/module.h.erb
88
+ - include/rucy/ruby.h
99
89
  - include/rucy/rucy.h
100
90
  - include/rucy/symbol.h
101
91
  - include/rucy/value.h.erb
@@ -104,6 +94,7 @@ files:
104
94
  - rucy.gemspec
105
95
  - src/class.cpp
106
96
  - src/exception.cpp
97
+ - src/extension.cpp
107
98
  - src/function.cpp.erb
108
99
  - src/module.cpp.erb
109
100
  - src/rucy.cpp
@@ -116,35 +107,34 @@ files:
116
107
  - test/test_function.rb
117
108
  - test/test_struct.rb
118
109
  - test/test_value.rb
119
- - .doc/ext/rucy/class.cpp
120
- - .doc/ext/rucy/exception.cpp
121
- - .doc/ext/rucy/function.cpp
122
- - .doc/ext/rucy/struct.cpp
123
- - .doc/ext/rucy/tester.cpp
124
- - .doc/ext/rucy/value.cpp
110
+ - ".doc/ext/rucy/class.cpp"
111
+ - ".doc/ext/rucy/exception.cpp"
112
+ - ".doc/ext/rucy/function.cpp"
113
+ - ".doc/ext/rucy/struct.cpp"
114
+ - ".doc/ext/rucy/tester.cpp"
115
+ - ".doc/ext/rucy/value.cpp"
125
116
  homepage: http://github.com/xord/rucy/wiki
126
117
  licenses: []
118
+ metadata: {}
127
119
  post_install_message:
128
120
  rdoc_options: []
129
121
  require_paths:
130
122
  - lib
131
123
  required_ruby_version: !ruby/object:Gem::Requirement
132
- none: false
133
124
  requirements:
134
- - - ! '>='
125
+ - - ">="
135
126
  - !ruby/object:Gem::Version
136
127
  version: 1.9.0
137
128
  required_rubygems_version: !ruby/object:Gem::Requirement
138
- none: false
139
129
  requirements:
140
- - - ! '>='
130
+ - - ">="
141
131
  - !ruby/object:Gem::Version
142
132
  version: '0'
143
133
  requirements: []
144
134
  rubyforge_project:
145
- rubygems_version: 1.8.24
135
+ rubygems_version: 2.0.3
146
136
  signing_key:
147
- specification_version: 3
137
+ specification_version: 4
148
138
  summary: A Ruby C++ Extension Helper Library.
149
139
  test_files:
150
140
  - test/helper.rb
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- *.o
2
- *.so
3
- *.bundle
4
- *.dll.a
5
- *.gem
6
- *.log
7
- *.rdoc.cpp
8
- *~
9
- lib/*.a
10
- .doc
11
- .yardoc
12
- .DS_Store
13
- Makefile
14
- depend.mf
15
-
16
- include/rucy/defs.h
17
- include/rucy/function.h
18
- include/rucy/module.h
19
- include/rucy/value.h
20
- src/function.cpp
21
- src/module.cpp
22
- src/value.cpp
data/ChangeLog DELETED
@@ -1,13 +0,0 @@
1
- 2011-09-2 snori <snori@xord.org>
2
-
3
- * add bin/rucy2rdoc.
4
-
5
-
6
- 2011-08-28 snori <snori@xord.org>
7
-
8
- * v0.1.1
9
-
10
-
11
- 2011-06-03 snori <snori@xord.org>
12
-
13
- * delete Gemfile.
@@ -1,76 +0,0 @@
1
- // -*- c++ -*-
2
- #pragma once
3
- #ifndef __RUCY_DEFS_H__
4
- #define __RUCY_DEFS_H__
5
-
6
-
7
- #include <ruby.h>
8
- #include <xot/string.h>
9
-
10
-
11
- namespace Rucy
12
- {
13
-
14
-
15
- using Xot::String;
16
-
17
-
18
- class Value;
19
-
20
-
21
- typedef VALUE (*RubyFunctionN) (int argc, const Value* argv, Value self);
22
- % NTIMES.each do |n|
23
- typedef VALUE (*RubyFunction<%= n %>) (Value self<%= params(n) {|i| ", Value v#{i}"} %>);
24
- % end
25
-
26
-
27
- }// Rucy
28
-
29
-
30
- #define RUBY_DEF_ALLOC(name, klass) \
31
- VALUE name (Value klass) \
32
- { \
33
- RUBY_TRY
34
- #define RUBY_DEFN(name) \
35
- VALUE name (int argc, const Value* argv, Value self) \
36
- { \
37
- RUBY_TRY
38
- % NTIMES.each do |n|
39
- #define RUBY_DEF<%= n %>(name<%= params(n) {|i| ", v#{i}"} %>) \
40
- VALUE name (Value self<%= params(n) {|i| ", Value v#{i}"} %>) \
41
- { \
42
- RUBY_TRY
43
- % end
44
-
45
- #define RUBY_END \
46
- RUBY_CATCH \
47
- return Qnil; \
48
- }
49
-
50
- #ifdef RUCY_USE_DEF
51
- #define DEFN RUBY_DEFN
52
- % NTIMES.each do |n|
53
- #define DEF<%= n %> RUBY_DEF<%= n %>
54
- % end
55
- #define END RUBY_END
56
- #endif
57
-
58
-
59
- #define RUCY_CHECK_OBJ(obj, type, klass) \
60
- do \
61
- { \
62
- type* p = Rucy::get_type_ptr<type>(obj, klass); \
63
- if (!p) Rucy::invalid_object_error(); \
64
- } \
65
- while(0)
66
-
67
- #define RUCY_CHECK_OBJECT(obj, type, klass) \
68
- do \
69
- { \
70
- type* p = Rucy::get_type_ptr<type>(obj, klass); \
71
- if (!p || !*p) Rucy::invalid_object_error(); \
72
- } \
73
- while(0)
74
-
75
-
76
- #endif//EOH
@@ -1,206 +0,0 @@
1
- // -*- c++ -*-
2
- #pragma once
3
- #ifndef __RUCY_EXTENSION_H__
4
- #define __RUCY_EXTENSION_H__
5
-
6
-
7
- #include <boost/dynamic_bitset.hpp>
8
- #include <xot/ref.h>
9
- #include <rucy/module.h>
10
-
11
-
12
- namespace Rucy
13
- {
14
-
15
-
16
- template <typename T>
17
- class ClassWrapper : public T
18
- {
19
-
20
- typedef ClassWrapper This;
21
-
22
- public:
23
-
24
- typedef T Super;
25
-
26
- GlobalValue value;
27
-
28
- ClassWrapper ()
29
- : value(Qnil, true)
30
- {
31
- }
32
-
33
- virtual void retain ()
34
- {
35
- value.gc(false);
36
- Super::retain();
37
- }
38
-
39
- virtual void release ()
40
- {
41
- Super::release();
42
- value.gc(true);
43
- }
44
-
45
- virtual void clear_override_flags ()
46
- {
47
- override_flags.reset();
48
- }
49
-
50
- virtual bool is_overridden (const Value& klass, const Symbol& name, uint id) const
51
- {
52
- if (id <= OVERRIDE_ID_UNKNOWN)
53
- return false;
54
-
55
- bool checked = false, overridden = false;
56
- get_override_flag(&checked, &overridden, id);
57
- if (checked) return overridden;
58
-
59
- overridden = check_overridden(klass, name);
60
- if (!const_cast<This*>(this)->set_override_flag(id, true, overridden))
61
- return false;
62
-
63
- return overridden;
64
- }
65
-
66
- protected:
67
-
68
- enum
69
- {
70
-
71
- OVERRIDE_ID_UNKNOWN = 0,
72
-
73
- OVERRIDE_ID_LAST,
74
-
75
- OVERRIDE_ID_MAX = 256
76
-
77
- };
78
-
79
- private:
80
-
81
- boost::dynamic_bitset<> override_flags;
82
-
83
- bool check_overridden (const Value& klass, const Symbol& name) const
84
- {
85
- SYM(method);
86
- SYM(owner);
87
- return this->value.call(method, name.value()).call(owner) != klass;
88
- }
89
-
90
- void get_override_flag (bool* checked, bool* overridden, uint id) const
91
- {
92
- assert(checked || overridden);
93
-
94
- int checked_pos = id2index(id);
95
- int overridden_pos = checked_pos + 1;
96
- bool valid = 0 <= checked_pos && overridden_pos < (int) override_flags.size();
97
- if (checked) *checked = valid ? override_flags[checked_pos] : false;
98
- if (overridden) *overridden = valid ? override_flags[overridden_pos] : false;
99
- }
100
-
101
- bool set_override_flag (uint id, bool checked, bool overridden)
102
- {
103
- assert(id < OVERRIDE_ID_MAX);
104
-
105
- int checked_pos = id2index(id);
106
- if (checked_pos < 0) return true;
107
-
108
- int overridden_pos = checked_pos + 1;
109
- if (overridden_pos >= (int) override_flags.size())
110
- override_flags.resize(overridden_pos + 1);
111
-
112
- override_flags[checked_pos] = checked;
113
- override_flags[overridden_pos] = overridden;
114
- return true;
115
- }
116
-
117
- int id2index (uint id) const
118
- {
119
- return (id - 1) * 2;
120
- }
121
-
122
- };// ClassWrapper
123
-
124
-
125
- template <typename T> inline void release_wrapper (void* p)
126
- {
127
- if (p) ((T*) p)->Xot::template RefCountable<>::release();
128
- }
129
-
130
- template <typename T> inline Value new_wrapper (
131
- Value klass, T* ptr,
132
- RUBY_DATA_FUNC mark = NULL,
133
- RUBY_DATA_FUNC free = release_wrapper<T>)
134
- {
135
- if (ptr) ptr->Xot::template RefCountable<>::retain();
136
- return new_type(klass, ptr, mark, free);
137
- }
138
-
139
- template <typename T> inline Value new_wrapper (
140
- Value klass,
141
- RUBY_DATA_FUNC mark = NULL,
142
- RUBY_DATA_FUNC free = release_wrapper<T>)
143
- {
144
- return new_wrapper(klass, new T, mark, free);
145
- }
146
-
147
-
148
- }// Rucy
149
-
150
-
151
- #define RUCY_WRAPPER_VALUE_FROM(wrapped_class, ruby_class) \
152
- namespace Rucy \
153
- { \
154
- inline Value \
155
- value (wrapped_class* obj, Value klass = ruby_class) \
156
- { \
157
- if (!obj) return Qnil; \
158
- ClassWrapper<wrapped_class>* p = dynamic_cast<ClassWrapper<wrapped_class>*>(obj); \
159
- if (!p) return new_ref(klass, obj); \
160
- if (p->value.is_nil()) p->value = new_wrapper(klass, obj); \
161
- return p->value; \
162
- } \
163
- }
164
-
165
- #define RUCY_WRAPPER_VALUE_TO(wrapped_class, ruby_class) \
166
- namespace Rucy \
167
- { \
168
- template <> inline wrapped_class* \
169
- value_to<wrapped_class*> (Value value, bool convert) \
170
- { \
171
- return get_type_ptr<wrapped_class>(value, ruby_class); \
172
- } \
173
- }
174
-
175
- #define RUCY_WRAPPER_VALUE_FROM_TO(wrapped_class, ruby_class) \
176
- RUCY_WRAPPER_VALUE_FROM(wrapped_class, ruby_class) \
177
- RUCY_WRAPPER_VALUE_TO(wrapped_class, ruby_class)
178
-
179
-
180
- #define RUCY_WRAPPER_CALL(wrapper_class, obj, fun) \
181
- (dynamic_cast<wrapper_class*>(obj) \
182
- ? reinterpret_cast<wrapper_class*>(obj)->Super::fun \
183
- : (obj)->fun)
184
-
185
-
186
- #define RUCY_OVERRIDE_ID_START(name) enum { OID_##name = Super::OVERRIDE_ID_LAST,
187
- #define RUCY_OVERRIDE_ID(name) OID_##name,
188
- #define RUCY_OVERRIDE_ID_LAST OVERRIDE_ID_LAST };
189
-
190
-
191
- #define RUCY_IS_OVERRIDDEN(name, ruby_class) \
192
- this->is_overridden(ruby_class, name, OID_##name)
193
-
194
- #define RUCY_OVERRIDABLE_METHOD(name, ruby_class, suffix) \
195
- SYM(name); \
196
- return this->value.call(name) suffix ;
197
-
198
- #define RUCY_OVERRIDABLE_METHOD_FAST(name, ruby_class, suffix) \
199
- SYM(name); \
200
- if (RUCY_IS_OVERRIDDEN(name, ruby_class)) \
201
- return this->value.call(name) suffix ; \
202
- else \
203
- return this->Super::name();
204
-
205
-
206
- #endif//EOH