rucy 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 67f71a7e93376401c6cc03e60b6c52edebb27ec7
4
+ data.tar.gz: ac0cd48435e3134dc6ab318a442caae40fe7c16c
5
+ SHA512:
6
+ metadata.gz: 99a2a7c5f8c14eb83bd69a6b9876769fbab447571869171a8453bc13715c4bb12e11d2ceaf5f43129d6c555801fef06a9bfef52a3b0db881325de002207abf75
7
+ data.tar.gz: 6e03ed8138bf76df496a2b734ee57f36a4663cb73345220c82f0ae6937c7b9cb906f3fc66a895a743b818ab02146fef27be2ac6b631631b7722938069fcf4cf7
@@ -1,19 +1,17 @@
1
1
  #include "class.h"
2
2
 
3
3
 
4
- #include <rucy.h>
4
+ #include "rucy.h"
5
5
 
6
6
 
7
7
  using namespace Rucy;
8
8
 
9
9
 
10
- static Class cBase, cSub, cRubyObj;
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
- typedef ClassWrapper<T> Super;
27
+ public:
30
28
 
31
- RUCY_OVERRIDE_ID_START(name_overridable_faster)
32
- RUCY_OVERRIDE_ID_LAST
29
+ RUCY_OVERRIDE_BEGIN(ClassWrapper<T>)
33
30
 
34
- public:
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
- RUCY_OVERRIDABLE_METHOD(name_overridable, get_class<T>(), .c_str());
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
- RUCY_OVERRIDABLE_METHOD_FAST(name_overridable_faster, get_class<T>(), .c_str());
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
- SYM(name_overridable_faster);
52
+ RUCY_SYM(name_overridable_faster);
49
53
  return RUCY_IS_OVERRIDDEN(name_overridable_faster, get_class<T>());
50
54
  }
51
55
 
@@ -54,9 +58,9 @@ class RubyBase : public ClassWrapper<T>
54
58
 
55
59
  #define THIS(type) to<type*>(self)
56
60
 
57
- #define CHECK(type) RUCY_CHECK_OBJ(self, type, c##type)
61
+ #define CHECK(type) RUCY_CHECK_OBJ(type, c##type, self)
58
62
 
59
- #define CALL(type, obj, fun) RUCY_WRAPPER_CALL(ClassWrapper<type>, obj, fun)
63
+ #define CALL(type, obj, fun) RUCY_WRAPPER_CALL(type, obj, fun)
60
64
 
61
65
 
62
66
  /*
@@ -114,32 +118,14 @@ template <typename T>
114
118
  static
115
119
  VALUE is_name_overridable_faster_overridden(VALUE self)
116
120
  {
117
- RUCY_CHECK_OBJ(self, T, get_class<T>());
121
+ RUCY_CHECK_OBJ(T, get_class<T>(), self);
118
122
  RubyBase<T>* obj = dynamic_cast<RubyBase<T>*>(THIS(T));
119
- if (!obj) invalid_object_error("dynamic_cast() failed.");
123
+ if (!obj) invalid_object_error(__FILE__, __LINE__, "dynamic_cast() failed.");
120
124
  return value(obj->is_name_overridable_faster_overridden());
121
125
  }
122
126
 
123
- template <typename T>
124
- static
125
- VALUE clear_override_flags(VALUE self)
126
- {
127
- RUCY_CHECK_OBJ(self, T, get_class<T>());
128
- ClassWrapper<T>* obj = dynamic_cast<ClassWrapper<T>*>(THIS(T));
129
- if (obj) obj->clear_override_flags();
130
- }
131
-
132
- template <bool singleton>
133
- static
134
- VALUE method_added_or_removed(VALUE self, VALUE method_name)
135
- {
136
- SYMBOL(klass, "class");
137
- SYM(name);
138
- eval(
139
- Xot::stringf(
140
- "ObjectSpace.each_object(%s) {|o| o.clear_override_flags}",
141
- (singleton ? self(klass) : self)(name).c_str()).c_str());
142
- }
127
+ static RUCY_DEF_clear_override_flags(Base_clear_override_flags, Base, cBase);
128
+ static RUCY_DEF_clear_override_flags(Sub_clear_override_flags, Sub, cSub);
143
129
 
144
130
  static
145
131
  VALUE base_new_raw(VALUE self)
@@ -182,24 +168,33 @@ VALUE sub_new_raw(VALUE self)
182
168
  alloc function.
183
169
  */
184
170
  static
185
- VALUE rubyobj_alloc(VALUE klass)
171
+ VALUE simpleobj_alloc(VALUE klass)
172
+ {
173
+ return value(new ClassWrapper<SimpleObj>, klass);
174
+ }
175
+
176
+ static
177
+ VALUE simpleobj_initialize(VALUE self, VALUE name)
186
178
  {
187
- return value(new ClassWrapper<RubyObj>, klass);
179
+ CHECK(SimpleObj);
180
+ THIS(SimpleObj)->init(name.c_str());
188
181
  }
189
182
 
190
- static Xot::Ref<RubyObj> rubyobj_ref;
183
+ static std::vector<Xot::Ref<SimpleObj> > simpleobj_refs;
191
184
 
192
185
  static
193
- VALUE rubyobj_set_ref(VALUE self, VALUE obj)
186
+ VALUE simpleobj_set_refs(VALUE self, VALUE objs)
194
187
  {
195
- rubyobj_ref = to<RubyObj*>(obj);
196
- return obj;
188
+ int size = objs.size();
189
+ for (int i = 0; i < size; ++i)
190
+ simpleobj_refs.push_back(to<SimpleObj*>(objs[i]));
191
+ return objs;
197
192
  }
198
193
 
199
194
  static
200
- VALUE rubyobj_clear_ref(VALUE self)
195
+ VALUE simpleobj_clear_refs(VALUE self)
201
196
  {
202
- rubyobj_ref.reset();
197
+ simpleobj_refs.clear();
203
198
  }
204
199
 
205
200
 
@@ -220,12 +215,8 @@ Init_class ()
220
215
  cBase.define_method(
221
216
  "is_name_overridable_faster_overridden",
222
217
  is_name_overridable_faster_overridden<Base>);
223
- cBase.define_method("clear_override_flags", clear_override_flags<Base>);
224
- cBase.define_method("singleton_method_added", method_added_or_removed<true>);
225
- cBase.define_method("singleton_method_removed", method_added_or_removed<true>);
226
- cBase.define_singleton_method("method_added", method_added_or_removed<false>);
227
- cBase.define_singleton_method("method_removed", method_added_or_removed<false>);
228
218
  rb_define_singleton_method(cBase, "new_raw", RUBY_METHOD_FUNC(base_new_raw), 0);
219
+
229
220
 
230
221
  cSub = rb_define_class_under(mTester, "Sub", cBase);
231
222
  rb_define_alloc_func(cSub, sub_alloc);
@@ -234,11 +225,12 @@ Init_class ()
234
225
  cSub.define_method(
235
226
  "is_name_overridable_faster_overridden",
236
227
  is_name_overridable_faster_overridden<Sub>);
237
- cSub.define_method("clear_override_flags", clear_override_flags<Sub>);
238
228
  rb_define_singleton_method(cSub, "new_raw", RUBY_METHOD_FUNC(sub_new_raw), 0);
229
+
239
230
 
240
- cRubyObj = rb_define_class_under(mTester, "RubyObj", rb_cObject);
241
- rb_define_alloc_func(cRubyObj, rubyobj_alloc);
242
- rb_define_function(cRubyObj, "set_ref", RUBY_METHOD_FUNC(rubyobj_set_ref), 1);
243
- rb_define_function(cRubyObj, "clear_ref", RUBY_METHOD_FUNC(rubyobj_clear_ref), 0);
231
+ cSimpleObj = rb_define_class_under(mTester, "SimpleObj", rb_cObject);
232
+ rb_define_alloc_func(cSimpleObj, simpleobj_alloc);
233
+ rb_define_private_method(cSimpleObj, "initialize", RUBY_METHOD_FUNC(simpleobj_initialize), 1);
234
+ rb_define_function(cSimpleObj, "set_refs", RUBY_METHOD_FUNC(simpleobj_set_refs), 1);
235
+ rb_define_function(cSimpleObj, "clear_refs", RUBY_METHOD_FUNC(simpleobj_clear_refs), 0);
244
236
  }
@@ -1,4 +1,4 @@
1
- #include <rucy.h>
1
+ #include "rucy.h"
2
2
 
3
3
 
4
4
  using namespace Rucy;
@@ -1,4 +1,4 @@
1
- #include <rucy.h>
1
+ #include "rucy.h"
2
2
 
3
3
 
4
4
  using namespace Rucy;
@@ -18,7 +18,7 @@ VALUE do_nothing(VALUE self)
18
18
  static
19
19
  VALUE return_nil(VALUE self)
20
20
  {
21
- return Qnil;
21
+ return nil();
22
22
  }
23
23
 
24
24
  /*
@@ -48,6 +48,17 @@ VALUE return_string(VALUE self)
48
48
  return value("");
49
49
  }
50
50
 
51
+ /*
52
+ check_arg_count
53
+ */
54
+ static
55
+ VALUE arg_count_must_1(VALUE self)
56
+ {
57
+ check_arg_count(__FILE__, __LINE__, "arg_count_must_1", argc, 1);
58
+ RUCY_SYM(ok);
59
+ return ok.value();
60
+ }
61
+
51
62
 
52
63
  void
53
64
  Init_function ()
@@ -60,4 +71,5 @@ Init_function ()
60
71
  rb_define_method(mTester, "return_int", RUBY_METHOD_FUNC(return_int), 0);
61
72
  rb_define_method(mTester, "return_float", RUBY_METHOD_FUNC(return_float), 0);
62
73
  rb_define_method(mTester, "return_string", RUBY_METHOD_FUNC(return_string), 0);
74
+ rb_define_method(mTester, "arg_count_must_1", RUBY_METHOD_FUNC(arg_count_must_1), -1);
63
75
  }
@@ -1,4 +1,4 @@
1
- #include <rucy.h>
1
+ #include "rucy.h"
2
2
 
3
3
 
4
4
  using namespace Rucy;
@@ -16,25 +16,7 @@ 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
  /*
@@ -2,13 +2,13 @@
2
2
 
3
3
 
4
4
  #include <vector>
5
- #include <rucy.h>
5
+ #include "rucy.h"
6
6
 
7
7
 
8
8
  using namespace Rucy;
9
9
 
10
10
 
11
- static std::vector<String> logs;
11
+ static std::vector<Xot::String> logs;
12
12
 
13
13
 
14
14
  void
@@ -18,21 +18,6 @@ log (const char* str)
18
18
  }
19
19
 
20
20
 
21
- /*
22
- return last log.
23
- */
24
- VALUE last_log(VALUE self)
25
- {
26
- if (argc > 1)
27
- arg_count_error("#last_log", argc, 0, 1);
28
-
29
- size_t index = (argc >= 1) ? to<size_t>(argv[0]) : logs.size() - 1;
30
- if (index >= logs.size())
31
- index_error();
32
-
33
- return value(logs[index].c_str());
34
- }
35
-
36
21
  /*
37
22
  return all logs.
38
23
  */
@@ -62,12 +47,13 @@ void Init_class ();
62
47
  extern "C" void
63
48
  Init_tester ()
64
49
  {
65
- if (!init()) return;
50
+ RUCY_TRY
51
+
52
+ init();
66
53
 
67
54
  Module mRucy = rb_define_module("Rucy");
68
55
  Module mTester = rb_define_module_under(mRucy, "Tester");
69
56
 
70
- rb_define_function(mTester, "last_log", RUBY_METHOD_FUNC(last_log), -1);
71
57
  rb_define_function(mTester, "all_logs", RUBY_METHOD_FUNC(all_logs), 0);
72
58
  rb_define_function(mTester, "clear_logs", RUBY_METHOD_FUNC(clear_logs), 0);
73
59
 
@@ -76,4 +62,6 @@ Init_tester ()
76
62
  Init_function();
77
63
  Init_struct ();
78
64
  Init_class ();
65
+
66
+ RUCY_CATCH
79
67
  }
@@ -1,4 +1,4 @@
1
- #include <rucy.h>
1
+ #include "rucy.h"
2
2
 
3
3
 
4
4
  using namespace Rucy;
@@ -28,6 +28,27 @@ VALUE nil_value(VALUE self)
28
28
  return nil();
29
29
  }
30
30
 
31
+ static
32
+ VALUE array_value(VALUE self)
33
+ {
34
+ const Value* a = argv;
35
+ switch (argc)
36
+ {
37
+ case 1: return array(a[0]);
38
+ case 2: return array(a[0], a[1]);
39
+ case 3: return array(a[0], a[1], a[2]);
40
+ case 4: return array(a[0], a[1], a[2], a[3]);
41
+ case 5: return array(a[0], a[1], a[2], a[3], a[4]);
42
+ case 6: return array(a[0], a[1], a[2], a[3], a[4], a[5]);
43
+ case 7: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
44
+ case 8: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
45
+ case 9: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
46
+ case 10: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
47
+ case 0:
48
+ default: argument_error(__FILE__, __LINE__);
49
+ }
50
+ }
51
+
31
52
 
32
53
  void
33
54
  Init_value ()
@@ -39,4 +60,5 @@ Init_value ()
39
60
  rb_define_method(mTester, "false_to_value", RUBY_METHOD_FUNC(false_to_value), -1);
40
61
  rb_define_method(mTester, "null_to_value", RUBY_METHOD_FUNC(NULL_to_value), -1);
41
62
  rb_define_method(mTester, "nil_value", RUBY_METHOD_FUNC(nil_value), -1);
63
+ rb_define_method(mTester, "array_value", RUBY_METHOD_FUNC(array_value), -1);
42
64
  }
File without changes
data/Rakefile CHANGED
@@ -1,8 +1,9 @@
1
1
  # -*- mode: ruby; 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 'xot/rake'
8
9
  require 'xot/module'
@@ -11,9 +12,10 @@ require 'rucy/module'
11
12
  include Xot::Rake
12
13
 
13
14
 
14
- MODULE = Rucy
15
+ MODULES = [Xot, Rucy].map {|m| m.const_get :Module}
16
+ MODULE = MODULES.last
15
17
  DLNAME = 'tester'
16
- INCDIRS = [Rucy, Xot].map {|m| m.include_dirs}.flatten
18
+ INCDIRS = ruby_incdirs
17
19
  RUCY2RDOC = 'bin/rucy2rdoc'
18
20
  NPARAM_MAX = 8
19
21
  NTIMES = (0..NPARAM_MAX)
@@ -24,4 +26,4 @@ task :default => :build
24
26
  task :build => :lib
25
27
 
26
28
 
27
- [Xot, Rucy].each {|m| m.load_tasks}
29
+ MODULES.each {|m| m.load_tasks :lib, :ext, :test, :doc, :gem}
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.6
1
+ 0.1.7
data/bin/rucy2rdoc CHANGED
@@ -26,11 +26,11 @@ class Parser
26
26
 
27
27
  def parse_functions (lines)
28
28
  re = %r{
29
- (?:RUBY_)?DEF(\d+|N|_ALLOC)\( (\w+) \s* ((?:\, \s* \w+)*) \s* \) \s*
29
+ (?:RUCY_)?DEF(\d+|N|_ALLOC)\( (\w+) \s* ((?:\, \s* \w+)*) \s* \) \s*
30
30
  (\{ \s*
31
31
  .*?
32
32
  \}) \s*
33
- (?:RUBY_)?END
33
+ (?:RUCY_)?END
34
34
  }mx
35
35
  process_lines lines, re do |all, type, name, params, body|
36
36
  type = '-1' if type == 'N'
@@ -42,7 +42,7 @@ class Parser
42
42
  params = 'VALUE self' + params
43
43
  end
44
44
  @funs[name] = {
45
- :type => type,
45
+ :type => type,
46
46
  :params => params,
47
47
  :body => body
48
48
  }
@@ -72,7 +72,7 @@ class Parser
72
72
  }mx
73
73
  process_lines lines, re do |all, var, recv, define, name, super_|
74
74
  define += '_under' if recv
75
- recv += ", " if recv
75
+ recv += ', ' if recv
76
76
  super_ = 'rb_cObject' if !super_ && define =~ /class/
77
77
  super_ = ', ' + super_ if super_
78
78
  "#{var} = rb_#{define}(#{recv}#{name}#{super_});"
@@ -85,7 +85,10 @@ class Parser
85
85
  \( \s* (?: (\"\w+(?:\=|\?\!)?\") \s* \, \s* )? (\w+) \s* \) \s* ;
86
86
  }mx
87
87
  process_lines lines, re do |all, obj, define, symbol, name|
88
- type = @funs[name][:type]
88
+ fun = @funs[name]
89
+ next unless fun
90
+
91
+ type = fun[:type]
89
92
  if type == '_ALLOC'
90
93
  "rb_#{define}(#{obj}, #{name});"
91
94
  else