rubex 0.1 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +3 -2
- data/.travis.yml +9 -1
- data/CONTRIBUTING.md +2 -2
- data/README.md +4 -1
- data/Rakefile +2 -2
- data/bin/rubex +4 -5
- data/lib/rubex.rb +4 -4
- data/lib/rubex/ast.rb +4 -1
- data/lib/rubex/ast/expression.rb +22 -1191
- data/lib/rubex/ast/expression/actual_arg_list.rb +40 -0
- data/lib/rubex/ast/expression/analysed_element_ref.rb +26 -0
- data/lib/rubex/ast/expression/analysed_element_ref/c_var_element_ref.rb +30 -0
- data/lib/rubex/ast/expression/analysed_element_ref/ruby_object_element_ref.rb +42 -0
- data/lib/rubex/ast/expression/arg_declaration.rb +43 -0
- data/lib/rubex/ast/expression/binary.rb +57 -0
- data/lib/rubex/ast/expression/binary/binary_boolean.rb +23 -0
- data/lib/rubex/ast/expression/binary/binary_boolean_special_op.rb +20 -0
- data/lib/rubex/ast/expression/binary/empty_classes.rb +62 -0
- data/lib/rubex/ast/expression/block_given.rb +15 -0
- data/lib/rubex/ast/expression/coerce_object.rb +15 -0
- data/lib/rubex/ast/expression/command_call.rb +74 -0
- data/lib/rubex/ast/expression/command_call/struct_or_union_member_call.rb +38 -0
- data/lib/rubex/ast/expression/element_ref.rb +64 -0
- data/lib/rubex/ast/expression/empty.rb +13 -0
- data/lib/rubex/ast/expression/from_ruby_object.rb +20 -0
- data/lib/rubex/ast/expression/func_ptr_arg_declaration.rb +21 -0
- data/lib/rubex/ast/expression/func_ptr_internal_arg_declaration.rb +13 -0
- data/lib/rubex/ast/expression/literal.rb +30 -0
- data/lib/rubex/ast/expression/literal/array_lit.rb +51 -0
- data/lib/rubex/ast/expression/literal/c_null.rb +15 -0
- data/lib/rubex/ast/expression/literal/char.rb +36 -0
- data/lib/rubex/ast/expression/literal/double.rb +14 -0
- data/lib/rubex/ast/expression/literal/false.rb +33 -0
- data/lib/rubex/ast/expression/literal/hash_lit.rb +45 -0
- data/lib/rubex/ast/expression/literal/int.rb +14 -0
- data/lib/rubex/ast/expression/literal/nil.rb +14 -0
- data/lib/rubex/ast/expression/literal/ruby_symbol.rb +22 -0
- data/lib/rubex/ast/expression/literal/string_lit.rb +45 -0
- data/lib/rubex/ast/expression/literal/true.rb +29 -0
- data/lib/rubex/ast/expression/method_call.rb +52 -0
- data/lib/rubex/ast/expression/method_call/c_function_call.rb +40 -0
- data/lib/rubex/ast/expression/method_call/ruby_method_call.rb +83 -0
- data/lib/rubex/ast/expression/name.rb +127 -0
- data/lib/rubex/ast/expression/ruby_constant.rb +25 -0
- data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_array_element_ref.rb +20 -0
- data/lib/rubex/ast/expression/ruby_object_element_ref/ruby_hash_element_ref.rb +22 -0
- data/lib/rubex/ast/expression/self.rb +15 -0
- data/lib/rubex/ast/expression/size_of.rb +22 -0
- data/lib/rubex/ast/expression/struct_or_union_member_call/element_ref_member_call.rb +23 -0
- data/lib/rubex/ast/expression/to_ruby_object.rb +21 -0
- data/lib/rubex/ast/expression/typecast.rb +20 -0
- data/lib/rubex/ast/expression/typecast_to.rb +10 -0
- data/lib/rubex/ast/expression/unary.rb +37 -0
- data/lib/rubex/ast/expression/unary_base.rb +24 -0
- data/lib/rubex/ast/expression/unary_base/ampersand.rb +16 -0
- data/lib/rubex/ast/expression/unary_base/unary_bit_not.rb +18 -0
- data/lib/rubex/ast/expression/unary_base/unary_not.rb +18 -0
- data/lib/rubex/ast/expression/unary_base/unary_sub.rb +18 -0
- data/lib/rubex/ast/node.rb +111 -111
- data/lib/rubex/ast/statement.rb +9 -1160
- data/lib/rubex/ast/statement/alias.rb +43 -0
- data/lib/rubex/ast/statement/argument_list.rb +59 -0
- data/lib/rubex/ast/statement/assign.rb +35 -0
- data/lib/rubex/ast/statement/begin_block.rb +14 -0
- data/lib/rubex/ast/statement/begin_block/begin.rb +202 -0
- data/lib/rubex/ast/statement/begin_block/else.rb +21 -0
- data/lib/rubex/ast/statement/begin_block/ensure.rb +21 -0
- data/lib/rubex/ast/statement/begin_block/rescue.rb +34 -0
- data/lib/rubex/ast/statement/break.rb +18 -0
- data/lib/rubex/ast/statement/c_array_decl.rb +49 -0
- data/lib/rubex/ast/statement/c_base_type.rb +26 -0
- data/lib/rubex/ast/statement/c_function_decl.rb +30 -0
- data/lib/rubex/ast/statement/c_ptr_decl.rb +52 -0
- data/lib/rubex/ast/statement/c_ptr_decl/c_ptr_func_decl.rb +25 -0
- data/lib/rubex/ast/statement/c_struct_or_union_def.rb +49 -0
- data/lib/rubex/ast/statement/expression.rb +26 -0
- data/lib/rubex/ast/statement/for.rb +73 -0
- data/lib/rubex/ast/statement/forward_decl.rb +31 -0
- data/lib/rubex/ast/statement/if_block.rb +64 -0
- data/lib/rubex/ast/statement/if_block/else.rb +30 -0
- data/lib/rubex/ast/statement/if_block/elsif.rb +22 -0
- data/lib/rubex/ast/statement/if_block/helper.rb +38 -0
- data/lib/rubex/ast/statement/print.rb +49 -0
- data/lib/rubex/ast/statement/raise.rb +66 -0
- data/lib/rubex/ast/statement/return.rb +45 -0
- data/lib/rubex/ast/statement/var_decl.rb +49 -0
- data/lib/rubex/ast/statement/while.rb +34 -0
- data/lib/rubex/ast/statement/yield.rb +41 -0
- data/lib/rubex/ast/top_statement.rb +1 -815
- data/lib/rubex/ast/top_statement/c_bindings.rb +145 -0
- data/lib/rubex/ast/top_statement/klass.rb +125 -0
- data/lib/rubex/ast/top_statement/klass/attached_klass.rb +417 -0
- data/lib/rubex/ast/top_statement/method_def.rb +110 -0
- data/lib/rubex/ast/top_statement/method_def/c_function_def.rb +26 -0
- data/lib/rubex/ast/top_statement/method_def/ruby_method_def.rb +33 -0
- data/lib/rubex/cli.rb +26 -0
- data/lib/rubex/code_writer.rb +1 -1
- data/lib/rubex/compiler.rb +49 -28
- data/lib/rubex/compiler_config.rb +4 -2
- data/lib/rubex/constants.rb +71 -71
- data/lib/rubex/data_type.rb +9 -675
- data/lib/rubex/data_type/c_array.rb +33 -0
- data/lib/rubex/data_type/c_function.rb +23 -0
- data/lib/rubex/data_type/c_ptr.rb +71 -0
- data/lib/rubex/data_type/c_str.rb +23 -0
- data/lib/rubex/data_type/c_struct_or_union.rb +23 -0
- data/lib/rubex/data_type/char.rb +30 -0
- data/lib/rubex/data_type/f_32.rb +38 -0
- data/lib/rubex/data_type/f_64.rb +38 -0
- data/lib/rubex/data_type/int.rb +32 -0
- data/lib/rubex/data_type/int/c_boolean.rb +13 -0
- data/lib/rubex/data_type/int_16.rb +32 -0
- data/lib/rubex/data_type/int_32.rb +32 -0
- data/lib/rubex/data_type/int_64.rb +36 -0
- data/lib/rubex/data_type/int_8.rb +33 -0
- data/lib/rubex/data_type/l_int.rb +38 -0
- data/lib/rubex/data_type/l_l_int.rb +26 -0
- data/lib/rubex/data_type/ruby_method.rb +22 -0
- data/lib/rubex/data_type/ruby_object.rb +19 -0
- data/lib/rubex/data_type/ruby_object/boolean.rb +11 -0
- data/lib/rubex/data_type/ruby_object/boolean/false_type.rb +5 -0
- data/lib/rubex/data_type/ruby_object/boolean/true_type.rb +5 -0
- data/lib/rubex/data_type/ruby_object/nil_type.rb +9 -0
- data/lib/rubex/data_type/ruby_object/ruby_array.rb +10 -0
- data/lib/rubex/data_type/ruby_object/ruby_constant.rb +18 -0
- data/lib/rubex/data_type/ruby_object/ruby_constant/ruby_class.rb +18 -0
- data/lib/rubex/data_type/ruby_object/ruby_hash.rb +9 -0
- data/lib/rubex/data_type/ruby_object/ruby_string.rb +10 -0
- data/lib/rubex/data_type/ruby_object/ruby_symbol.rb +10 -0
- data/lib/rubex/data_type/type_def.rb +34 -0
- data/lib/rubex/data_type/u_char.rb +27 -0
- data/lib/rubex/data_type/u_int.rb +32 -0
- data/lib/rubex/data_type/u_int_16.rb +22 -0
- data/lib/rubex/data_type/u_int_32.rb +22 -0
- data/lib/rubex/data_type/u_int_64.rb +26 -0
- data/lib/rubex/data_type/u_int_8.rb +22 -0
- data/lib/rubex/data_type/u_l_int.rb +36 -0
- data/lib/rubex/data_type/u_l_int/size_t.rb +10 -0
- data/lib/rubex/data_type/u_l_l_int.rb +26 -0
- data/lib/rubex/data_type/void.rb +15 -0
- data/lib/rubex/data_type_helpers/float_helpers.rb +8 -0
- data/lib/rubex/data_type_helpers/helpers.rb +48 -0
- data/lib/rubex/data_type_helpers/int_helpers.rb +10 -0
- data/lib/rubex/data_type_helpers/u_int_helpers.rb +11 -0
- data/lib/rubex/helpers.rb +35 -118
- data/lib/rubex/helpers/node_type_methods.rb +9 -0
- data/lib/rubex/helpers/writers.rb +79 -0
- data/lib/rubex/parser.racc +83 -34
- data/lib/rubex/parser.racc.rb +233 -184
- data/lib/rubex/version.rb +2 -2
- data/rubex.gemspec +2 -0
- data/spec/basic_ruby_method_spec.rb +1 -1
- data/spec/binding_ptr_args_spec.rb +2 -2
- data/spec/bitwise_operators_spec.rb +1 -1
- data/spec/blocks_spec.rb +2 -2
- data/spec/c_bindings_spec.rb +1 -1
- data/spec/c_constants_spec.rb +1 -1
- data/spec/c_function_ptrs_spec.rb +1 -1
- data/spec/c_functions_spec.rb +2 -2
- data/spec/c_struct_interface_spec.rb +1 -1
- data/spec/call_by_reference_spec.rb +2 -2
- data/spec/class_methods_spec.rb +2 -2
- data/spec/class_spec.rb +4 -4
- data/spec/cli_spec.rb +43 -0
- data/spec/comments_spec.rb +2 -2
- data/spec/default_args_spec.rb +21 -23
- data/spec/error_handling_spec.rb +1 -1
- data/spec/examples_spec.rb +4 -4
- data/spec/expressions_spec.rb +1 -1
- data/spec/fixtures/cli/cli.rubex +3 -0
- data/spec/fixtures/examples/array_to_hash.rubex +1 -1
- data/spec/fixtures/examples/rcsv.rubex +10 -6
- data/spec/fixtures/loops/loops.rubex +1 -1
- data/spec/fixtures/ruby_strings/string_blank_bm.rb +7 -5
- data/spec/fixtures/struct/struct.rubex +7 -2
- data/spec/fixtures/temp_allocation/temp_allocation.rubex +8 -0
- data/spec/if_else_spec.rb +3 -7
- data/spec/implicit_lib_include_spec.rb +1 -1
- data/spec/init_ruby_objects_with_literal_syntax_spec.rb +1 -1
- data/spec/loops_spec.rb +1 -1
- data/spec/recursion_spec.rb +18 -21
- data/spec/ruby_constant_method_calls_spec.rb +4 -4
- data/spec/ruby_operators_spec.rb +1 -1
- data/spec/ruby_raise_spec.rb +1 -1
- data/spec/ruby_strings_spec.rb +3 -3
- data/spec/ruby_symbols_spec.rb +1 -1
- data/spec/ruby_types_spec.rb +2 -2
- data/spec/spec_helper.rb +42 -10
- data/spec/statement_expression_spec.rb +3 -3
- data/spec/static_array_spec.rb +3 -3
- data/spec/string_literals_spec.rb +2 -2
- data/spec/struct_spec.rb +4 -4
- data/spec/temp_allocation_spec.rb +35 -0
- data/spec/typecasting_spec.rb +2 -2
- data/spec/var_declarions_spec.rb +2 -2
- metadata +168 -3
@@ -0,0 +1,38 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class LInt
|
4
|
+
include IntHelpers
|
5
|
+
def to_s
|
6
|
+
'long int'
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_ruby_object(arg)
|
10
|
+
"LONG2NUM(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_ruby_object(arg)
|
14
|
+
"NUM2LONG(#{arg})"
|
15
|
+
end
|
16
|
+
|
17
|
+
def lint?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def p_formatter
|
22
|
+
'%ld'
|
23
|
+
end
|
24
|
+
|
25
|
+
def <=>(other)
|
26
|
+
if other.char? || other.int8? || other.int16? || other.int32? ||
|
27
|
+
other .int64? || other.uint8? || other.uint16? || other.uint32? ||
|
28
|
+
other.int?
|
29
|
+
1
|
30
|
+
elsif other.lint?
|
31
|
+
0
|
32
|
+
else
|
33
|
+
-1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class LLInt
|
4
|
+
include IntHelpers
|
5
|
+
def to_s
|
6
|
+
'long long int'
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_ruby_object(arg)
|
10
|
+
"LL2NUM(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_ruby_object(arg)
|
14
|
+
"NUM2LL(#{arg})"
|
15
|
+
end
|
16
|
+
|
17
|
+
def llint?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def p_formatter
|
22
|
+
'%ll'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class RubyMethod
|
4
|
+
include Helpers
|
5
|
+
|
6
|
+
attr_reader :name, :c_name, :type
|
7
|
+
attr_accessor :scope, :arg_list
|
8
|
+
|
9
|
+
def initialize(name, c_name, scope, arg_list)
|
10
|
+
@name = name
|
11
|
+
@c_name = c_name
|
12
|
+
@scope = scope
|
13
|
+
@arg_list = arg_list
|
14
|
+
@type = RubyObject.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def ruby_method?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class RubyConstant < RubyObject
|
4
|
+
attr_reader :name, :type
|
5
|
+
|
6
|
+
def initialize(name)
|
7
|
+
@name = name
|
8
|
+
# FIXME: make this flexible so that consts set to primitive types can be
|
9
|
+
# easily converted to C types.
|
10
|
+
@type = RubyObject.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def ruby_constant?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class RubyClass < RubyConstant
|
4
|
+
attr_reader :name, :c_name, :scope, :ancestor
|
5
|
+
|
6
|
+
def initialize(name, c_name, scope, ancestor)
|
7
|
+
@name = name
|
8
|
+
@c_name = c_name
|
9
|
+
@scope = scope
|
10
|
+
@ancestor = ancestor
|
11
|
+
end
|
12
|
+
|
13
|
+
def ruby_class?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
# FIXME: Find out a better way to generically find the old type of a typedef
|
4
|
+
# when the new type is encountered. Should cover cases where the new type
|
5
|
+
# is aliased with some other name too. In other words, reach the actual
|
6
|
+
# type in the most generic way possible without too many checks.
|
7
|
+
class TypeDef
|
8
|
+
# include Helpers
|
9
|
+
attr_reader :type, :old_type, :new_type
|
10
|
+
|
11
|
+
def initialize(old_type, new_type, type)
|
12
|
+
@old_type = old_type
|
13
|
+
@new_type = new_type
|
14
|
+
@type = type
|
15
|
+
end
|
16
|
+
|
17
|
+
def alias_type?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
@new_type.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def base_type
|
26
|
+
@old_type
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(meth, *args, &block)
|
30
|
+
@old_type.send(meth, *args, &block)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class UChar
|
4
|
+
include Helpers
|
5
|
+
|
6
|
+
def to_s
|
7
|
+
'unsigned char'
|
8
|
+
end
|
9
|
+
|
10
|
+
def from_ruby_object(arg)
|
11
|
+
"(unsigned char)NUM2INT(#{arg})"
|
12
|
+
end
|
13
|
+
|
14
|
+
def p_formatter
|
15
|
+
'%d'
|
16
|
+
end
|
17
|
+
|
18
|
+
def uchar?
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
def <=>(other)
|
23
|
+
(other.char? || other.uchar?) ? 0 : 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class UInt
|
4
|
+
include UIntHelpers
|
5
|
+
def to_s
|
6
|
+
'unsigned int'
|
7
|
+
end
|
8
|
+
|
9
|
+
def from_ruby_object(arg)
|
10
|
+
"(unsigned int)NUM2UINT(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def uint?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def p_formatter
|
18
|
+
'%u'
|
19
|
+
end
|
20
|
+
|
21
|
+
def <=>(other)
|
22
|
+
if other.char? || other.int8? || other.int16? || other.uint8? || other.uint16?
|
23
|
+
1
|
24
|
+
elsif other.uint? || other.int? || other.int32? || other.uint32?
|
25
|
+
0
|
26
|
+
else
|
27
|
+
-1
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class UInt16
|
4
|
+
include UIntHelpers
|
5
|
+
def to_s
|
6
|
+
'uint16_t'
|
7
|
+
end
|
8
|
+
|
9
|
+
def from_ruby_object(arg)
|
10
|
+
"(uint16_t)NUM2UINT(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def uint16?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def p_formatter
|
18
|
+
'%u'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class UInt32
|
4
|
+
include UIntHelpers
|
5
|
+
def to_s
|
6
|
+
'uint32_t'
|
7
|
+
end
|
8
|
+
|
9
|
+
def from_ruby_object(arg)
|
10
|
+
"(int32_t)NUM2UINT(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def uint32?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def p_formatter
|
18
|
+
'%u'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class UInt64
|
4
|
+
include UIntHelpers
|
5
|
+
def to_s
|
6
|
+
'uint64_t'
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_ruby_object(arg)
|
10
|
+
"ULONG2NUM(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_ruby_object(arg)
|
14
|
+
"(int64_t)NUM2UINT(#{arg})"
|
15
|
+
end
|
16
|
+
|
17
|
+
def uint64?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def p_formatter
|
22
|
+
'%lu'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class UInt8
|
4
|
+
include UIntHelpers
|
5
|
+
def to_s
|
6
|
+
'uint8_t'
|
7
|
+
end
|
8
|
+
|
9
|
+
def from_ruby_object(arg)
|
10
|
+
"(uint8_t)NUM2UINT(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def uint8?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def p_formatter
|
18
|
+
'%u'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Rubex
|
2
|
+
module DataType
|
3
|
+
class ULInt
|
4
|
+
include UIntHelpers
|
5
|
+
def to_s
|
6
|
+
'unsigned long int'
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_ruby_object(arg)
|
10
|
+
"ULONG2NUM(#{arg})"
|
11
|
+
end
|
12
|
+
|
13
|
+
def from_ruby_object(arg)
|
14
|
+
"NUM2ULONG(#{arg})"
|
15
|
+
end
|
16
|
+
|
17
|
+
def ulint?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def p_formatter
|
22
|
+
'%lu'
|
23
|
+
end
|
24
|
+
|
25
|
+
def <=>(other)
|
26
|
+
if other.char? || other.int8? || other.int16? || other.int32? || other .int64? || other.uint8? || other.uint16? || other.uint32? || other.int?
|
27
|
+
1
|
28
|
+
elsif other.ulint?
|
29
|
+
0
|
30
|
+
else
|
31
|
+
-1
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|