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/ext/rucy/tester.cpp CHANGED
@@ -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,41 +18,25 @@ log (const char* str)
18
18
  }
19
19
 
20
20
 
21
- /*
22
- return last log.
23
- */
24
- RUBY_DEFN(last_log)
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
- RUBY_END
36
-
37
21
  /*
38
22
  return all logs.
39
23
  */
40
- RUBY_DEF0(all_logs)
24
+ RUCY_DEF0(all_logs)
41
25
  {
42
26
  std::vector<Value> a;
43
27
  for (size_t i = 0; i < logs.size(); ++i) a.push_back(logs[i].c_str());
44
28
  return value(a.size(), &a[0]);
45
29
  }
46
- RUBY_END
30
+ RUCY_END
47
31
 
48
32
  /*
49
33
  clcear all logs.
50
34
  */
51
- RUBY_DEF0(clear_logs)
35
+ RUCY_DEF0(clear_logs)
52
36
  {
53
37
  logs.clear();
54
38
  }
55
- RUBY_END
39
+ RUCY_END
56
40
 
57
41
 
58
42
  void Init_value ();
@@ -65,12 +49,13 @@ void Init_class ();
65
49
  extern "C" void
66
50
  Init_tester ()
67
51
  {
68
- if (!init()) return;
52
+ RUCY_TRY
53
+
54
+ init();
69
55
 
70
56
  Module mRucy = define_module("Rucy");
71
57
  Module mTester = mRucy.define_module("Tester");
72
58
 
73
- mTester.define_function("last_log", last_log);
74
59
  mTester.define_function("all_logs", all_logs);
75
60
  mTester.define_function("clear_logs", clear_logs);
76
61
 
@@ -79,4 +64,6 @@ Init_tester ()
79
64
  Init_function();
80
65
  Init_struct ();
81
66
  Init_class ();
67
+
68
+ RUCY_CATCH
82
69
  }
data/ext/rucy/value.cpp CHANGED
@@ -1,36 +1,58 @@
1
- #include <rucy.h>
1
+ #include "rucy.h"
2
2
 
3
3
 
4
4
  using namespace Rucy;
5
5
 
6
6
 
7
7
  static
8
- RUBY_DEFN(true_to_value)
8
+ RUCY_DEFN(true_to_value)
9
9
  {
10
10
  return value(true);
11
11
  }
12
- RUBY_END
12
+ RUCY_END
13
13
 
14
14
  static
15
- RUBY_DEFN(false_to_value)
15
+ RUCY_DEFN(false_to_value)
16
16
  {
17
17
  return value(false);
18
18
  }
19
- RUBY_END
19
+ RUCY_END
20
20
 
21
21
  static
22
- RUBY_DEFN(NULL_to_value)
22
+ RUCY_DEFN(NULL_to_value)
23
23
  {
24
24
  return nil();
25
25
  }
26
- RUBY_END
26
+ RUCY_END
27
27
 
28
28
  static
29
- RUBY_DEFN(nil_value)
29
+ RUCY_DEFN(nil_value)
30
30
  {
31
31
  return nil();
32
32
  }
33
- RUBY_END
33
+ RUCY_END
34
+
35
+ static
36
+ RUCY_DEFN(array_value)
37
+ {
38
+ const Value* a = argv;
39
+ switch (argc)
40
+ {
41
+ case 1: return array(a[0]);
42
+ case 2: return array(a[0], a[1]);
43
+ case 3: return array(a[0], a[1], a[2]);
44
+ case 4: return array(a[0], a[1], a[2], a[3]);
45
+ case 5: return array(a[0], a[1], a[2], a[3], a[4]);
46
+ case 6: return array(a[0], a[1], a[2], a[3], a[4], a[5]);
47
+ case 7: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
48
+ case 8: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]);
49
+ case 9: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);
50
+ case 10: return array(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]);
51
+ case 0:
52
+ default: argument_error(__FILE__, __LINE__);
53
+ }
54
+ }
55
+ RUCY_END
34
56
 
35
57
 
36
58
  void
@@ -43,4 +65,5 @@ Init_value ()
43
65
  mTester.define_method("false_to_value", false_to_value);
44
66
  mTester.define_method("null_to_value", NULL_to_value);
45
67
  mTester.define_method("nil_value", nil_value);
68
+ mTester.define_method("array_value", array_value);
46
69
  }
data/include/rucy/class.h CHANGED
@@ -18,13 +18,15 @@ namespace Rucy
18
18
 
19
19
  public:
20
20
 
21
- Class (VALUE v = Qnil);
21
+ Class (RubyValue v = nil());
22
22
 
23
- Class define_alloc_func (RubyFunction0 fun);
23
+ void define_alloc_func (RubyFunction0 fun);
24
24
 
25
- Class define_alloc_func (const char* name, RubyFunction0 fun);
25
+ void define_alloc_func (const char* name, RubyFunction0 fun);
26
26
  // for RUBY_METHOD macro
27
27
 
28
+ void define_clear_override_flags (RubyFunction0 fun);
29
+
28
30
  };// Class
29
31
 
30
32
 
@@ -5,8 +5,8 @@
5
5
 
6
6
 
7
7
  #include <stdexcept>
8
- #include <typeinfo>
9
- #include <rucy/class.h>
8
+ #include <xot/exception.h>
9
+ #include <rucy/value.h>
10
10
 
11
11
 
12
12
  namespace Rucy
@@ -22,7 +22,7 @@ namespace Rucy
22
22
 
23
23
  RubyException (Value exception);
24
24
 
25
- RubyException (Value type, const char* format, ...);
25
+ RubyException (Value exception, const char* format, ...);
26
26
 
27
27
  const char* what () const throw();
28
28
 
@@ -35,100 +35,46 @@ namespace Rucy
35
35
  };// RubyException
36
36
 
37
37
 
38
- struct RubyJumptag
38
+ struct RubyJumpTag
39
39
  {
40
40
 
41
41
  public:
42
42
 
43
43
  int tag;
44
44
 
45
- RubyJumptag (int tag);
45
+ RubyJumpTag (int tag);
46
46
 
47
- };// RubyJumptag
47
+ };// RubyJumpTag
48
48
 
49
49
 
50
50
  void raise (const char* format = NULL, ...);
51
51
 
52
- void raise (VALUE exception, const char* format = NULL, ...);
52
+ void raise (RubyValue exception, const char* format = NULL, ...);
53
53
 
54
54
 
55
- void type_error (const char* format = NULL, ...);
55
+ void rucy_error (const char* file, int line, const char* format = NULL, ...);
56
56
 
57
- void argument_error (const char* format = NULL, ...);
57
+ void type_error (const char* file, int line, const char* format = NULL, ...);
58
58
 
59
- void arg_count_error (
59
+ void argument_error (const char* file, int line, const char* format = NULL, ...);
60
+
61
+ void arg_count_error (const char* file, int line,
60
62
  const char* method, int nargs, int nargs_expected,
61
63
  int n1 = -1, int n2 = -1, int n3 = -1, int n4 = -1, int n5 = -1,
62
64
  int n6 = -1, int n7 = -1, int n8 = -1, int n9 = -1, int n10 = -1);
63
65
 
64
- void index_error (const char* format = NULL, ...);
66
+ void invalid_state_error (const char* file, int line, const char* format = NULL, ...);
65
67
 
66
- void not_implemented_error (const char* format = NULL, ...);
68
+ void invalid_object_error (const char* file, int line, const char* format = NULL, ...);
67
69
 
70
+ void index_error (const char* file, int line, const char* format = NULL, ...);
68
71
 
69
- void system_error (const char* format = NULL, ...);
72
+ void not_implemented_error (const char* file, int line, const char* format = NULL, ...);
70
73
 
71
- void invalid_object_error (const char* format = NULL, ...);
74
+ void system_error (const char* file, int line, const char* format = NULL, ...);
72
75
 
73
76
 
74
77
  }// Rucy
75
78
 
76
79
 
77
- #define RUBY_TRY \
78
- VALUE RUCY__rubyexception__ = Qnil; \
79
- int RUCY__rubyjumptag__ = 0; \
80
- \
81
- goto RUCY__ruby_try_start__; \
82
- \
83
- RUCY__ruby_jump_tag__: \
84
- if (RUCY__rubyjumptag__) rb_jump_tag(RUCY__rubyjumptag__); \
85
- RUBY_THROW(rb_exc_new2(Rucy::native_error_class(), "Bad jump tag.")); \
86
- \
87
- RUCY__ruby_raise_exception__: \
88
- rb_exc_raise(RUCY__rubyexception__); \
89
- \
90
- RUCY__ruby_try_start__: \
91
- try \
92
- {
93
-
94
- #define RUBY_CATCH \
95
- } \
96
- catch (const Rucy::RubyJumptag& e) \
97
- { \
98
- RUCY__rubyjumptag__ = e.tag; \
99
- goto RUCY__ruby_jump_tag__; \
100
- } \
101
- catch (const Rucy::RubyException& e) \
102
- { \
103
- RUBY_THROW(e.value()); \
104
- } \
105
- catch (const std::exception& e) \
106
- { \
107
- Rucy::String text = e.what(), type = typeid(e).name(); \
108
- if (!type.empty()) \
109
- { \
110
- if (!text.empty()) text += " "; \
111
- text += "[" + type + "]"; \
112
- } \
113
- RUBY_THROW(rb_exc_new2(Rucy::native_error_class(), text.c_str())); \
114
- } \
115
- catch (const std::string& s) \
116
- { \
117
- RUBY_THROW(rb_exc_new2(Rucy::native_error_class(), s.c_str())); \
118
- } \
119
- catch (const char* s) \
120
- { \
121
- RUBY_THROW(rb_exc_new2(Rucy::native_error_class(), s)); \
122
- } \
123
- catch (...) \
124
- { \
125
- RUBY_THROW(rb_exc_new2( \
126
- Rucy::native_error_class(), "Unknown C++ exception was thrown.")); \
127
- }
128
-
129
- #define RUBY_THROW(exception) \
130
- RUCY__rubyexception__ = (exception); \
131
- goto RUCY__ruby_raise_exception__
132
-
133
-
134
80
  #endif//EOH