rubex 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (197) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -2
  3. data/.travis.yml +9 -1
  4. data/CONTRIBUTING.md +2 -2
  5. data/README.md +4 -1
  6. data/Rakefile +2 -2
  7. data/bin/rubex +4 -5
  8. data/lib/rubex.rb +4 -4
  9. data/lib/rubex/ast.rb +4 -1
  10. data/lib/rubex/ast/expression.rb +22 -1191
  11. data/lib/rubex/ast/expression/actual_arg_list.rb +40 -0
  12. data/lib/rubex/ast/expression/analysed_element_ref.rb +26 -0
  13. data/lib/rubex/ast/expression/analysed_element_ref/c_var_element_ref.rb +30 -0
  14. data/lib/rubex/ast/expression/analysed_element_ref/ruby_object_element_ref.rb +42 -0
  15. data/lib/rubex/ast/expression/arg_declaration.rb +43 -0
  16. data/lib/rubex/ast/expression/binary.rb +57 -0
  17. data/lib/rubex/ast/expression/binary/binary_boolean.rb +23 -0
  18. data/lib/rubex/ast/expression/binary/binary_boolean_special_op.rb +20 -0
  19. data/lib/rubex/ast/expression/binary/empty_classes.rb +62 -0
  20. data/lib/rubex/ast/expression/block_given.rb +15 -0
  21. data/lib/rubex/ast/expression/coerce_object.rb +15 -0
  22. data/lib/rubex/ast/expression/command_call.rb +74 -0
  23. data/lib/rubex/ast/expression/command_call/struct_or_union_member_call.rb +38 -0
  24. data/lib/rubex/ast/expression/element_ref.rb +64 -0
  25. data/lib/rubex/ast/expression/empty.rb +13 -0
  26. data/lib/rubex/ast/expression/from_ruby_object.rb +20 -0
  27. data/lib/rubex/ast/expression/func_ptr_arg_declaration.rb +21 -0
  28. data/lib/rubex/ast/expression/func_ptr_internal_arg_declaration.rb +13 -0
  29. data/lib/rubex/ast/expression/literal.rb +30 -0
  30. data/lib/rubex/ast/expression/literal/array_lit.rb +51 -0
  31. data/lib/rubex/ast/expression/literal/c_null.rb +15 -0
  32. data/lib/rubex/ast/expression/literal/char.rb +36 -0
  33. data/lib/rubex/ast/expression/literal/double.rb +14 -0
  34. data/lib/rubex/ast/expression/literal/false.rb +33 -0
  35. data/lib/rubex/ast/expression/literal/hash_lit.rb +45 -0
  36. data/lib/rubex/ast/expression/literal/int.rb +14 -0
  37. data/lib/rubex/ast/expression/literal/nil.rb +14 -0
  38. data/lib/rubex/ast/expression/literal/ruby_symbol.rb +22 -0
  39. data/lib/rubex/ast/expression/literal/string_lit.rb +45 -0
  40. data/lib/rubex/ast/expression/literal/true.rb +29 -0
  41. data/lib/rubex/ast/expression/method_call.rb +52 -0
  42. data/lib/rubex/ast/expression/method_call/c_function_call.rb +40 -0
  43. data/lib/rubex/ast/expression/method_call/ruby_method_call.rb +83 -0
  44. data/lib/rubex/ast/expression/name.rb +127 -0
  45. data/lib/rubex/ast/expression/ruby_constant.rb +25 -0
  46. data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_array_element_ref.rb +20 -0
  47. data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_hash_element_ref.rb +22 -0
  48. data/lib/rubex/ast/expression/self.rb +15 -0
  49. data/lib/rubex/ast/expression/size_of.rb +22 -0
  50. data/lib/rubex/ast/expression/struct_or_union_member_call/element_ref_member_call.rb +23 -0
  51. data/lib/rubex/ast/expression/to_ruby_object.rb +21 -0
  52. data/lib/rubex/ast/expression/typecast.rb +20 -0
  53. data/lib/rubex/ast/expression/typecast_to.rb +10 -0
  54. data/lib/rubex/ast/expression/unary.rb +37 -0
  55. data/lib/rubex/ast/expression/unary_base.rb +24 -0
  56. data/lib/rubex/ast/expression/unary_base/ampersand.rb +16 -0
  57. data/lib/rubex/ast/expression/unary_base/unary_bit_not.rb +18 -0
  58. data/lib/rubex/ast/expression/unary_base/unary_not.rb +18 -0
  59. data/lib/rubex/ast/expression/unary_base/unary_sub.rb +18 -0
  60. data/lib/rubex/ast/node.rb +111 -111
  61. data/lib/rubex/ast/statement.rb +9 -1160
  62. data/lib/rubex/ast/statement/alias.rb +43 -0
  63. data/lib/rubex/ast/statement/argument_list.rb +59 -0
  64. data/lib/rubex/ast/statement/assign.rb +35 -0
  65. data/lib/rubex/ast/statement/begin_block.rb +14 -0
  66. data/lib/rubex/ast/statement/begin_block/begin.rb +202 -0
  67. data/lib/rubex/ast/statement/begin_block/else.rb +21 -0
  68. data/lib/rubex/ast/statement/begin_block/ensure.rb +21 -0
  69. data/lib/rubex/ast/statement/begin_block/rescue.rb +34 -0
  70. data/lib/rubex/ast/statement/break.rb +18 -0
  71. data/lib/rubex/ast/statement/c_array_decl.rb +49 -0
  72. data/lib/rubex/ast/statement/c_base_type.rb +26 -0
  73. data/lib/rubex/ast/statement/c_function_decl.rb +30 -0
  74. data/lib/rubex/ast/statement/c_ptr_decl.rb +52 -0
  75. data/lib/rubex/ast/statement/c_ptr_decl/c_ptr_func_decl.rb +25 -0
  76. data/lib/rubex/ast/statement/c_struct_or_union_def.rb +49 -0
  77. data/lib/rubex/ast/statement/expression.rb +26 -0
  78. data/lib/rubex/ast/statement/for.rb +73 -0
  79. data/lib/rubex/ast/statement/forward_decl.rb +31 -0
  80. data/lib/rubex/ast/statement/if_block.rb +64 -0
  81. data/lib/rubex/ast/statement/if_block/else.rb +30 -0
  82. data/lib/rubex/ast/statement/if_block/elsif.rb +22 -0
  83. data/lib/rubex/ast/statement/if_block/helper.rb +38 -0
  84. data/lib/rubex/ast/statement/print.rb +49 -0
  85. data/lib/rubex/ast/statement/raise.rb +66 -0
  86. data/lib/rubex/ast/statement/return.rb +45 -0
  87. data/lib/rubex/ast/statement/var_decl.rb +49 -0
  88. data/lib/rubex/ast/statement/while.rb +34 -0
  89. data/lib/rubex/ast/statement/yield.rb +41 -0
  90. data/lib/rubex/ast/top_statement.rb +1 -815
  91. data/lib/rubex/ast/top_statement/c_bindings.rb +145 -0
  92. data/lib/rubex/ast/top_statement/klass.rb +125 -0
  93. data/lib/rubex/ast/top_statement/klass/attached_klass.rb +417 -0
  94. data/lib/rubex/ast/top_statement/method_def.rb +110 -0
  95. data/lib/rubex/ast/top_statement/method_def/c_function_def.rb +26 -0
  96. data/lib/rubex/ast/top_statement/method_def/ruby_method_def.rb +33 -0
  97. data/lib/rubex/cli.rb +26 -0
  98. data/lib/rubex/code_writer.rb +1 -1
  99. data/lib/rubex/compiler.rb +49 -28
  100. data/lib/rubex/compiler_config.rb +4 -2
  101. data/lib/rubex/constants.rb +71 -71
  102. data/lib/rubex/data_type.rb +9 -675
  103. data/lib/rubex/data_type/c_array.rb +33 -0
  104. data/lib/rubex/data_type/c_function.rb +23 -0
  105. data/lib/rubex/data_type/c_ptr.rb +71 -0
  106. data/lib/rubex/data_type/c_str.rb +23 -0
  107. data/lib/rubex/data_type/c_struct_or_union.rb +23 -0
  108. data/lib/rubex/data_type/char.rb +30 -0
  109. data/lib/rubex/data_type/f_32.rb +38 -0
  110. data/lib/rubex/data_type/f_64.rb +38 -0
  111. data/lib/rubex/data_type/int.rb +32 -0
  112. data/lib/rubex/data_type/int/c_boolean.rb +13 -0
  113. data/lib/rubex/data_type/int_16.rb +32 -0
  114. data/lib/rubex/data_type/int_32.rb +32 -0
  115. data/lib/rubex/data_type/int_64.rb +36 -0
  116. data/lib/rubex/data_type/int_8.rb +33 -0
  117. data/lib/rubex/data_type/l_int.rb +38 -0
  118. data/lib/rubex/data_type/l_l_int.rb +26 -0
  119. data/lib/rubex/data_type/ruby_method.rb +22 -0
  120. data/lib/rubex/data_type/ruby_object.rb +19 -0
  121. data/lib/rubex/data_type/ruby_object/boolean.rb +11 -0
  122. data/lib/rubex/data_type/ruby_object/boolean/false_type.rb +5 -0
  123. data/lib/rubex/data_type/ruby_object/boolean/true_type.rb +5 -0
  124. data/lib/rubex/data_type/ruby_object/nil_type.rb +9 -0
  125. data/lib/rubex/data_type/ruby_object/ruby_array.rb +10 -0
  126. data/lib/rubex/data_type/ruby_object/ruby_constant.rb +18 -0
  127. data/lib/rubex/data_type/ruby_object/ruby_constant/ruby_class.rb +18 -0
  128. data/lib/rubex/data_type/ruby_object/ruby_hash.rb +9 -0
  129. data/lib/rubex/data_type/ruby_object/ruby_string.rb +10 -0
  130. data/lib/rubex/data_type/ruby_object/ruby_symbol.rb +10 -0
  131. data/lib/rubex/data_type/type_def.rb +34 -0
  132. data/lib/rubex/data_type/u_char.rb +27 -0
  133. data/lib/rubex/data_type/u_int.rb +32 -0
  134. data/lib/rubex/data_type/u_int_16.rb +22 -0
  135. data/lib/rubex/data_type/u_int_32.rb +22 -0
  136. data/lib/rubex/data_type/u_int_64.rb +26 -0
  137. data/lib/rubex/data_type/u_int_8.rb +22 -0
  138. data/lib/rubex/data_type/u_l_int.rb +36 -0
  139. data/lib/rubex/data_type/u_l_int/size_t.rb +10 -0
  140. data/lib/rubex/data_type/u_l_l_int.rb +26 -0
  141. data/lib/rubex/data_type/void.rb +15 -0
  142. data/lib/rubex/data_type_helpers/float_helpers.rb +8 -0
  143. data/lib/rubex/data_type_helpers/helpers.rb +48 -0
  144. data/lib/rubex/data_type_helpers/int_helpers.rb +10 -0
  145. data/lib/rubex/data_type_helpers/u_int_helpers.rb +11 -0
  146. data/lib/rubex/helpers.rb +35 -118
  147. data/lib/rubex/helpers/node_type_methods.rb +9 -0
  148. data/lib/rubex/helpers/writers.rb +79 -0
  149. data/lib/rubex/parser.racc +83 -34
  150. data/lib/rubex/parser.racc.rb +233 -184
  151. data/lib/rubex/version.rb +2 -2
  152. data/rubex.gemspec +2 -0
  153. data/spec/basic_ruby_method_spec.rb +1 -1
  154. data/spec/binding_ptr_args_spec.rb +2 -2
  155. data/spec/bitwise_operators_spec.rb +1 -1
  156. data/spec/blocks_spec.rb +2 -2
  157. data/spec/c_bindings_spec.rb +1 -1
  158. data/spec/c_constants_spec.rb +1 -1
  159. data/spec/c_function_ptrs_spec.rb +1 -1
  160. data/spec/c_functions_spec.rb +2 -2
  161. data/spec/c_struct_interface_spec.rb +1 -1
  162. data/spec/call_by_reference_spec.rb +2 -2
  163. data/spec/class_methods_spec.rb +2 -2
  164. data/spec/class_spec.rb +4 -4
  165. data/spec/cli_spec.rb +43 -0
  166. data/spec/comments_spec.rb +2 -2
  167. data/spec/default_args_spec.rb +21 -23
  168. data/spec/error_handling_spec.rb +1 -1
  169. data/spec/examples_spec.rb +4 -4
  170. data/spec/expressions_spec.rb +1 -1
  171. data/spec/fixtures/cli/cli.rubex +3 -0
  172. data/spec/fixtures/examples/array_to_hash.rubex +1 -1
  173. data/spec/fixtures/examples/rcsv.rubex +10 -6
  174. data/spec/fixtures/loops/loops.rubex +1 -1
  175. data/spec/fixtures/ruby_strings/string_blank_bm.rb +7 -5
  176. data/spec/fixtures/struct/struct.rubex +7 -2
  177. data/spec/fixtures/temp_allocation/temp_allocation.rubex +8 -0
  178. data/spec/if_else_spec.rb +3 -7
  179. data/spec/implicit_lib_include_spec.rb +1 -1
  180. data/spec/init_ruby_objects_with_literal_syntax_spec.rb +1 -1
  181. data/spec/loops_spec.rb +1 -1
  182. data/spec/recursion_spec.rb +18 -21
  183. data/spec/ruby_constant_method_calls_spec.rb +4 -4
  184. data/spec/ruby_operators_spec.rb +1 -1
  185. data/spec/ruby_raise_spec.rb +1 -1
  186. data/spec/ruby_strings_spec.rb +3 -3
  187. data/spec/ruby_symbols_spec.rb +1 -1
  188. data/spec/ruby_types_spec.rb +2 -2
  189. data/spec/spec_helper.rb +42 -10
  190. data/spec/statement_expression_spec.rb +3 -3
  191. data/spec/static_array_spec.rb +3 -3
  192. data/spec/string_literals_spec.rb +2 -2
  193. data/spec/struct_spec.rb +4 -4
  194. data/spec/temp_allocation_spec.rb +35 -0
  195. data/spec/typecasting_spec.rb +2 -2
  196. data/spec/var_declarions_spec.rb +2 -2
  197. metadata +168 -3
@@ -0,0 +1,33 @@
1
+ module Rubex
2
+ module DataType
3
+ class CArray
4
+ include Helpers
5
+ # Dimension of the array
6
+ attr_reader :dimension
7
+ # Type of elements stored in array
8
+ attr_reader :type # FIXME: Make this base_type to make it more explicit.
9
+
10
+ def initialize(dimension, type)
11
+ @dimension = dimension
12
+ @type = type
13
+ end
14
+
15
+ def carray?
16
+ true
17
+ end
18
+
19
+ def <=>(other)
20
+ @type <=>
21
+ if self.class == other.class
22
+ other.type
23
+ else
24
+ other
25
+ end
26
+ end
27
+
28
+ def base_type
29
+ @type
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,23 @@
1
+ module Rubex
2
+ module DataType
3
+ class CFunction
4
+ include Helpers
5
+ attr_reader :name, :type, :c_name
6
+ attr_accessor :scope, :arg_list
7
+
8
+ # FIXME: all attributes should be initialized upon class creation to maintain
9
+ # sanity and consistency.
10
+ def initialize(name, c_name, arg_list, type, scope)
11
+ @name = name
12
+ @c_name = c_name
13
+ @arg_list = arg_list
14
+ @type = type
15
+ @scope = scope
16
+ end
17
+
18
+ def c_function?
19
+ true
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,71 @@
1
+ module Rubex
2
+ module DataType
3
+ class CPtr
4
+ include Helpers
5
+ # The data type that this pointer is pointing to.
6
+ attr_reader :type
7
+
8
+ def initialize(type)
9
+ @type = type
10
+ end
11
+
12
+ def p_formatter
13
+ '%s' if char_ptr?
14
+ end
15
+
16
+ def cptr?
17
+ true
18
+ end
19
+
20
+ def to_s
21
+ base_type = @type.base_type
22
+ if base_type.c_function?
23
+ ptr = ptr_level
24
+
25
+ str = "#{base_type.type} (#{ptr} #{base_type.c_name})"
26
+ str << '(' + base_type.arg_list.map { |e| e.type.to_s }.join(',') + ')'
27
+ else
28
+ t = @type
29
+ str = '*'
30
+ if t.cptr?
31
+ str << '*'
32
+ t = t.type
33
+ end
34
+ str.prepend t.to_s
35
+ str
36
+ end
37
+ end
38
+
39
+ def base_type
40
+ return @type unless @type.is_a?(self.class)
41
+ @type.base_type
42
+ end
43
+
44
+ def ptr_level
45
+ temp = @type
46
+ ptr = '*'
47
+ while temp.cptr?
48
+ ptr << '*'
49
+ temp = @type.type
50
+ end
51
+
52
+ ptr
53
+ end
54
+
55
+ # from a Ruby function get a pointer to some value.
56
+ def from_ruby_object(arg)
57
+ return "StringValueCStr(#{arg})" if @type.char?
58
+ arg
59
+ end
60
+
61
+ def to_ruby_object(arg)
62
+ return "rb_str_new2(#{arg})" if @type.char?
63
+ arg
64
+ end
65
+
66
+ def <=>(_other)
67
+ -1
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,23 @@
1
+ module Rubex
2
+ module DataType
3
+ class CStr
4
+ include Helpers
5
+
6
+ def cstr?
7
+ true
8
+ end
9
+
10
+ def p_formatter
11
+ '%s'
12
+ end
13
+
14
+ def from_ruby_object(arg)
15
+ "StringValueCStr(#{arg})"
16
+ end
17
+
18
+ def to_ruby_object(arg)
19
+ "rb_str_new_cstr(#{arg})"
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Rubex
2
+ module DataType
3
+ class CStructOrUnion
4
+ include Helpers
5
+ attr_reader :kind, :name, :c_name, :scope
6
+
7
+ def initialize(kind, name, c_name, scope)
8
+ @kind = kind
9
+ @name = name
10
+ @c_name = c_name
11
+ @scope = scope
12
+ end
13
+
14
+ def struct_or_union?
15
+ true
16
+ end
17
+
18
+ def to_s
19
+ @c_name.to_s
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,30 @@
1
+ module Rubex
2
+ module DataType
3
+ class Char
4
+ include Helpers
5
+ def to_s
6
+ 'char'
7
+ end
8
+
9
+ def to_ruby_object(arg, _literal = false)
10
+ "#{Rubex::C_FUNC_CHAR2RUBYSTR}(#{arg})"
11
+ end
12
+
13
+ def from_ruby_object(arg)
14
+ "(char)NUM2INT(#{arg})"
15
+ end
16
+
17
+ def p_formatter
18
+ '%c'
19
+ end
20
+
21
+ def char?
22
+ true
23
+ end
24
+
25
+ def <=>(other)
26
+ other.char? ? 0 : 1
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,38 @@
1
+ module Rubex
2
+ module DataType
3
+ class F32
4
+ include FloatHelpers
5
+ def to_s
6
+ 'float'
7
+ end
8
+
9
+ def to_ruby_object(arg)
10
+ "rb_float_new((double)(#{arg}))"
11
+ end
12
+
13
+ def from_ruby_object(arg)
14
+ "(float)NUM2DBL(#{arg})"
15
+ end
16
+
17
+ def float32?
18
+ true
19
+ end
20
+
21
+ def p_formatter
22
+ '%f'
23
+ end
24
+
25
+ def <=>(other)
26
+ if other.char? || other.int8? || other.int16? || other.int32? ||
27
+ other.int64? || other.int? || other.uint8? || other.uint16? ||
28
+ other.uint32? || other.uint64?
29
+ 1
30
+ elsif other.float32?
31
+ 0
32
+ else # other is float64
33
+ -1
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ module Rubex
2
+ module DataType
3
+ class F64
4
+ include FloatHelpers
5
+ def to_s
6
+ 'double'
7
+ end
8
+
9
+ def to_ruby_object(arg)
10
+ "rb_float_new(#{arg})"
11
+ end
12
+
13
+ def from_ruby_object(arg)
14
+ "NUM2DBL(#{arg})"
15
+ end
16
+
17
+ def float64?
18
+ true
19
+ end
20
+
21
+ def p_formatter
22
+ '%f'
23
+ end
24
+
25
+ def <=>(other)
26
+ if other.char? || other.int8? || other.int16? || other.int32? ||
27
+ other.int64? || other.int? || other.uint8? || other.uint16? ||
28
+ other.uint32? || other.uint64? || other.float32?
29
+ 1
30
+ elsif other.float64?
31
+ 0
32
+ else
33
+ -1
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ module Rubex
2
+ module DataType
3
+ class Int
4
+ include IntHelpers
5
+ def to_s
6
+ 'int'
7
+ end
8
+
9
+ def from_ruby_object(arg)
10
+ "NUM2INT(#{arg})"
11
+ end
12
+
13
+ def int?
14
+ true
15
+ end
16
+
17
+ def p_formatter
18
+ '%d'
19
+ end
20
+
21
+ def <=>(other)
22
+ if other.char? || other.int8? || other.int16?
23
+ 1
24
+ elsif other.int? || other.int32?
25
+ 0
26
+ else # other is int64 or greater
27
+ -1
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,13 @@
1
+ module Rubex
2
+ module DataType
3
+ class CBoolean < Int
4
+ def cbool?
5
+ true
6
+ end
7
+
8
+ def to_ruby_object(arg)
9
+ Rubex::C_MACRO_INT2BOOL + '(' + arg + ')'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,32 @@
1
+ module Rubex
2
+ module DataType
3
+ class Int16
4
+ include IntHelpers
5
+ def to_s
6
+ 'int16_t'
7
+ end
8
+
9
+ def from_ruby_object(arg)
10
+ "(int16_t)NUM2INT(#{arg})"
11
+ end
12
+
13
+ def int16?
14
+ true
15
+ end
16
+
17
+ def p_formatter
18
+ '%d'
19
+ end
20
+
21
+ def <=>(other)
22
+ if other.char? || other.int8?
23
+ 1
24
+ elsif other.int16?
25
+ 0
26
+ else
27
+ -1
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ module Rubex
2
+ module DataType
3
+ class Int32
4
+ include IntHelpers
5
+ def to_s
6
+ 'int32_t'
7
+ end
8
+
9
+ def from_ruby_object(arg)
10
+ "(int32_t)NUM2INT(#{arg})"
11
+ end
12
+
13
+ def int32?
14
+ true
15
+ end
16
+
17
+ def p_formatter
18
+ '%d'
19
+ end
20
+
21
+ def <=>(other)
22
+ if other.char? || other.int8? || other.int16?
23
+ 1
24
+ elsif other.int32? || other.int?
25
+ 0
26
+ else
27
+ -1
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,36 @@
1
+ module Rubex
2
+ module DataType
3
+ class Int64
4
+ include IntHelpers
5
+ def to_s
6
+ 'int64_t'
7
+ end
8
+
9
+ def to_ruby_object(arg)
10
+ "LONG2NUM(#{arg})"
11
+ end
12
+
13
+ def from_ruby_object(arg)
14
+ "(int64_t)NUM2LONG(#{arg})"
15
+ end
16
+
17
+ def p_formatter
18
+ '%ld'
19
+ end
20
+
21
+ def int64?
22
+ true
23
+ end
24
+
25
+ def <=>(other)
26
+ if other.char? || other.int8? || other.int16? || other.int32? || other.int?
27
+ 1
28
+ elsif other.int64?
29
+ 0
30
+ else
31
+ -1
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,33 @@
1
+ module Rubex
2
+ module DataType
3
+ class Int8
4
+ include IntHelpers
5
+
6
+ def to_s
7
+ 'int8_t'
8
+ end
9
+
10
+ def from_ruby_object(arg)
11
+ "(int8_t)NUM2INT(#{arg})"
12
+ end
13
+
14
+ def int8?
15
+ true
16
+ end
17
+
18
+ def p_formatter
19
+ '%d'
20
+ end
21
+
22
+ def <=>(other)
23
+ if other.char?
24
+ 1
25
+ elsif other.int8?
26
+ 0
27
+ else
28
+ -1
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end