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
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