rdl 1.0.0.rc1

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 (89) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rails_types.rb +1 -0
  3. data/lib/rdl.rb +56 -0
  4. data/lib/rdl/config.rb +121 -0
  5. data/lib/rdl/contracts/and.rb +29 -0
  6. data/lib/rdl/contracts/contract.rb +7 -0
  7. data/lib/rdl/contracts/flat.rb +31 -0
  8. data/lib/rdl/contracts/or.rb +25 -0
  9. data/lib/rdl/contracts/proc.rb +24 -0
  10. data/lib/rdl/switch.rb +20 -0
  11. data/lib/rdl/types/annotated_arg.rb +41 -0
  12. data/lib/rdl/types/finitehash.rb +81 -0
  13. data/lib/rdl/types/generic.rb +100 -0
  14. data/lib/rdl/types/intersection.rb +66 -0
  15. data/lib/rdl/types/lexer.rex +39 -0
  16. data/lib/rdl/types/lexer.rex.rb +148 -0
  17. data/lib/rdl/types/method.rb +219 -0
  18. data/lib/rdl/types/nil.rb +50 -0
  19. data/lib/rdl/types/nominal.rb +80 -0
  20. data/lib/rdl/types/optional.rb +54 -0
  21. data/lib/rdl/types/parser.racc +150 -0
  22. data/lib/rdl/types/parser.tab.rb +654 -0
  23. data/lib/rdl/types/singleton.rb +62 -0
  24. data/lib/rdl/types/structural.rb +72 -0
  25. data/lib/rdl/types/top.rb +50 -0
  26. data/lib/rdl/types/tuple.rb +61 -0
  27. data/lib/rdl/types/type.rb +24 -0
  28. data/lib/rdl/types/type_inferencer.rb +73 -0
  29. data/lib/rdl/types/union.rb +74 -0
  30. data/lib/rdl/types/var.rb +51 -0
  31. data/lib/rdl/types/vararg.rb +54 -0
  32. data/lib/rdl/types/wild.rb +26 -0
  33. data/lib/rdl/util.rb +56 -0
  34. data/lib/rdl/wrap.rb +505 -0
  35. data/lib/rdl_types.rb +2 -0
  36. data/types/other/chronic.rb +5 -0
  37. data/types/other/paperclip_attachment.rb +7 -0
  38. data/types/other/securerandom.rb +4 -0
  39. data/types/rails-4.2.1/fixnum.rb +3 -0
  40. data/types/rails-4.2.1/string.rb +3 -0
  41. data/types/rails-tmp/action_dispatch.rb +406 -0
  42. data/types/rails-tmp/active_record.rb +406 -0
  43. data/types/rails-tmp/devise_contracts.rb +216 -0
  44. data/types/ruby-2.2.0/_aliases.rb +4 -0
  45. data/types/ruby-2.2.0/abbrev.rb +5 -0
  46. data/types/ruby-2.2.0/array.rb +137 -0
  47. data/types/ruby-2.2.0/base64.rb +10 -0
  48. data/types/ruby-2.2.0/basic_object.rb +13 -0
  49. data/types/ruby-2.2.0/benchmark.rb +11 -0
  50. data/types/ruby-2.2.0/bigdecimal.rb +15 -0
  51. data/types/ruby-2.2.0/bigmath.rb +12 -0
  52. data/types/ruby-2.2.0/class.rb +17 -0
  53. data/types/ruby-2.2.0/complex.rb +42 -0
  54. data/types/ruby-2.2.0/coverage.rb +6 -0
  55. data/types/ruby-2.2.0/csv.rb +5 -0
  56. data/types/ruby-2.2.0/date.rb +6 -0
  57. data/types/ruby-2.2.0/dir.rb +38 -0
  58. data/types/ruby-2.2.0/encoding.rb +23 -0
  59. data/types/ruby-2.2.0/enumerable.rb +98 -0
  60. data/types/ruby-2.2.0/enumerator.rb +26 -0
  61. data/types/ruby-2.2.0/exception.rb +15 -0
  62. data/types/ruby-2.2.0/file.rb +124 -0
  63. data/types/ruby-2.2.0/fileutils.rb +6 -0
  64. data/types/ruby-2.2.0/fixnum.rb +45 -0
  65. data/types/ruby-2.2.0/float.rb +54 -0
  66. data/types/ruby-2.2.0/gem.rb +245 -0
  67. data/types/ruby-2.2.0/hash.rb +72 -0
  68. data/types/ruby-2.2.0/integer.rb +31 -0
  69. data/types/ruby-2.2.0/io.rb +103 -0
  70. data/types/ruby-2.2.0/kernel.rb +89 -0
  71. data/types/ruby-2.2.0/marshal.rb +5 -0
  72. data/types/ruby-2.2.0/matchdata.rb +26 -0
  73. data/types/ruby-2.2.0/math.rb +53 -0
  74. data/types/ruby-2.2.0/numeric.rb +46 -0
  75. data/types/ruby-2.2.0/object.rb +73 -0
  76. data/types/ruby-2.2.0/pathname.rb +106 -0
  77. data/types/ruby-2.2.0/process.rb +127 -0
  78. data/types/ruby-2.2.0/random.rb +15 -0
  79. data/types/ruby-2.2.0/range.rb +38 -0
  80. data/types/ruby-2.2.0/rational.rb +31 -0
  81. data/types/ruby-2.2.0/regexp.rb +30 -0
  82. data/types/ruby-2.2.0/set.rb +58 -0
  83. data/types/ruby-2.2.0/string.rb +145 -0
  84. data/types/ruby-2.2.0/strscan.rb +7 -0
  85. data/types/ruby-2.2.0/symbol.rb +29 -0
  86. data/types/ruby-2.2.0/time.rb +68 -0
  87. data/types/ruby-2.2.0/uri.rb +18 -0
  88. data/types/ruby-2.2.0/yaml.rb +5 -0
  89. metadata +131 -0
@@ -0,0 +1,50 @@
1
+ require_relative 'type'
2
+
3
+ module RDL::Type
4
+ class NilType < Type
5
+ @@cache = nil
6
+
7
+ class << self
8
+ alias :__new__ :new
9
+ end
10
+
11
+ def self.new
12
+ @@cache = NilType.__new__ unless @@cache
13
+ return @@cache
14
+ end
15
+
16
+ def initialize
17
+ super
18
+ end
19
+
20
+ def to_s
21
+ "nil"
22
+ end
23
+
24
+ def eql?(other)
25
+ self == other
26
+ end
27
+
28
+ def ==(other)
29
+ other.instance_of? NilType
30
+ end
31
+
32
+ def <=(other)
33
+ true
34
+ end
35
+
36
+ def member?(obj, *args)
37
+ t = RDL::Util.rdl_type obj
38
+ return t <= self if t
39
+ obj.nil?
40
+ end
41
+
42
+ def instantiate(inst)
43
+ return self
44
+ end
45
+
46
+ def hash
47
+ 13
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,80 @@
1
+ require_relative 'type'
2
+
3
+ module RDL::Type
4
+ class NominalType < Type
5
+ attr_reader :name # string
6
+
7
+ @@cache = {}
8
+
9
+ class << self
10
+ alias :__new__ :new
11
+ end
12
+
13
+ def self.new(name)
14
+ name = name.to_s
15
+ return NilType.new if name == "NilClass"
16
+ t = @@cache[name]
17
+ return t if t
18
+ t = self.__new__ name
19
+ return (@@cache[name] = t) # assignment evaluates to t
20
+ end
21
+
22
+ def initialize(name)
23
+ @name = name
24
+ end
25
+
26
+ def eql?(other)
27
+ self == other
28
+ end
29
+
30
+ def ==(other)
31
+ return (other.instance_of? self.class) && (other.name == @name)
32
+ end
33
+
34
+ def hash # :nodoc:
35
+ return @name.hash
36
+ end
37
+
38
+ def to_s
39
+ return @name
40
+ end
41
+
42
+ def klass
43
+ @klass = RDL::Util.to_class(name) unless @klass
44
+ return @klass
45
+ end
46
+
47
+ def <=(other)
48
+ k = klass
49
+ return true if other.instance_of? TopType
50
+ return k.ancestors.member?(other.klass) if other.instance_of? NominalType
51
+ # return self <= other.base if other.instance_of? GenericType # raw subtyping not allowed
52
+ if other.instance_of? StructuralType
53
+ # similar logic in GenericType
54
+ other.methods.each_pair { |m, t|
55
+ return false unless k.method_defined? m
56
+ if RDL::Wrap.has_contracts?(k, m, :type)
57
+ types = RDL::Wrap.get_contracts(k, m, :type)
58
+ return false unless types.all? { |t_self| t_self <= t }
59
+ end
60
+ }
61
+ return true
62
+ end
63
+ if other.instance_of? UnionType
64
+ other.types.each {|ot| return true if self <= ot}
65
+ end
66
+ return false
67
+ end
68
+
69
+ def member?(obj, *args)
70
+ t = RDL::Util.rdl_type obj
71
+ return t <= self if t
72
+ return true if obj.nil?
73
+ return obj.is_a? klass
74
+ end
75
+
76
+ def instantiate(inst)
77
+ return self
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,54 @@
1
+ require_relative 'type'
2
+
3
+ module RDL::Type
4
+ class OptionalType < Type
5
+ attr_reader :type
6
+
7
+ @@cache = {}
8
+
9
+ class << self
10
+ alias :__new__ :new
11
+ end
12
+
13
+ def self.new(type)
14
+ t = @@cache[type]
15
+ return t if t
16
+ raise RuntimeError, "Attempt to create vararg type with non-type" unless type.is_a? Type
17
+ t = OptionalType.__new__ type
18
+ return (@@cache[type] = t) # assignment evaluates to t
19
+ end
20
+
21
+ def initialize(type)
22
+ raise "Can't have optional optional type" if type.class == OptionalType
23
+ raise "Can't have optional vararg type" if type.class == VarargType
24
+ @type = type
25
+ super()
26
+ end
27
+
28
+ def to_s
29
+ if @type.instance_of? UnionType
30
+ "?(#{@type.to_s})"
31
+ else
32
+ "?#{@type.to_s}"
33
+ end
34
+ end
35
+
36
+ def eql?(other)
37
+ self == other
38
+ end
39
+
40
+ def ==(other) # :nodoc:
41
+ return (other.instance_of? OptionalType) && (other.type == @type)
42
+ end
43
+
44
+ # Note: no member?, because these can only appear in MethodType, where they're handled specially
45
+
46
+ def instantiate(inst)
47
+ return OptionalType.new(@type.instantiate(inst))
48
+ end
49
+
50
+ def hash # :nodoc:
51
+ return 57 + @type.hash
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,150 @@
1
+ class Parser
2
+ prechigh
3
+ left COMMA
4
+ right RARROW
5
+ left OR
6
+ preclow
7
+
8
+ start entry
9
+
10
+ token DOUBLE_HASH CONST_BEGIN RASSOC
11
+ token OR FIXNUM FLOAT COLON RARROW ID SYMBOL SPECIAL_ID STRING
12
+ token LPAREN RPAREN LBRACE RBRACE LBRACKET RBRACKET
13
+ token COMMA QUERY STAR LESS GREATER
14
+ token EOF
15
+
16
+ rule
17
+
18
+ entry:
19
+ method_type { result = val[0] }
20
+ | bare_type { result = val[0] }
21
+
22
+ bare_type:
23
+ DOUBLE_HASH type_expr {
24
+ result = val[1]
25
+ }
26
+
27
+ method_type:
28
+ LPAREN arg_list RPAREN block RARROW type_expr {
29
+ result = RDL::Type::MethodType.new val[1], val[3], val[5]
30
+ }
31
+ | LPAREN arg_list RPAREN block RARROW type_expr ID {
32
+ result = RDL::Type::MethodType.new val[1], val[3], RDL::Type::AnnotatedArgType.new(val[6], val[5])
33
+ }
34
+
35
+ method_sig_list:
36
+ ID COLON method_type { result = [val[0].to_sym, val[2]] }
37
+ | ID COLON method_type COMMA method_sig_list { result = [val[0].to_sym, val[2]] + val[4] }
38
+
39
+ arg_list:
40
+ { result = [] }
41
+ | nonempty_arg_list { result = val[0] }
42
+ | named_arg_list {
43
+ result = [RDL::Type::FiniteHashType.new(Hash[*val[0]])]
44
+ }
45
+ nonempty_arg_list:
46
+ arg { result = [val[0]] }
47
+ | arg COMMA nonempty_arg_list { result = val[2].unshift val[0] }
48
+ | arg COMMA named_arg_list { # named arg list must come last
49
+ result = [val[0], RDL::Type::FiniteHashType.new(Hash[*val[2]])]
50
+ }
51
+ arg:
52
+ base_arg { result = val[0] }
53
+ | base_arg ID { result = RDL::Type::AnnotatedArgType.new(val[1], val[0]) }
54
+ named_arg_list:
55
+ named_arg { result = val[0] }
56
+ | named_arg COMMA named_arg_list { result = val[0] + val[2] }
57
+ named_arg:
58
+ ID COLON base_arg_query_only { result = [val[0].to_sym, val[2]] }
59
+
60
+ base_arg:
61
+ QUERY type_expr { result = RDL::Type::OptionalType.new val[1] }
62
+ | STAR type_expr { result = RDL::Type::VarargType.new val[1] }
63
+ | type_expr { result = val[0] }
64
+ base_arg_query_only:
65
+ QUERY type_expr { result = RDL::Type::OptionalType.new val[1] }
66
+ | type_expr { result = val[0] }
67
+
68
+ block:
69
+ { result = nil }
70
+ | LBRACE method_type RBRACE { result = val[1] }
71
+
72
+ type_expr:
73
+ union_type { result = val[0] }
74
+ | LPAREN type_expr RPAREN { result = val[1] }
75
+
76
+ type_expr_comma_list:
77
+ type_expr { result = [val[0]] }
78
+ | type_expr COMMA type_expr_comma_list { result = [val[0]] + val[2] }
79
+
80
+ hash_expr:
81
+ | named_arg { result = val[0] }
82
+ | FIXNUM RASSOC union_type { result = [val[0].to_i, val[2]] }
83
+ | FLOAT RASSOC union_type { result = [val[0].to_f, val[2]] }
84
+ | CONST_BEGIN ID RBRACE RASSOC union_type {
85
+ result = [Kernel.const_get(val[0]), val[2]]
86
+ }
87
+ | STRING RASSOC union_type { result = [val[0], val[2]] } # strings are allowed as finite hash keys
88
+
89
+ hash_expr_comma_list:
90
+ hash_expr { result = val[0] }
91
+ | hash_expr COMMA hash_expr_comma_list { result = val[0] + val[2] }
92
+
93
+ union_type:
94
+ single_type { result = val[0] }
95
+ | single_type OR union_type { result = RDL::Type::UnionType.new val[0], val[2] }
96
+
97
+ single_type:
98
+ SYMBOL { result = RDL::Type::SingletonType.new(val[0].to_sym) }
99
+ | ID {
100
+ if val[0] == 'nil' then
101
+ result = RDL::Type::NilType.new
102
+ elsif val[0] =~ /^[a-z_]+\w*\'?/ then
103
+ result = RDL::Type::VarType.new(val[0].to_sym)
104
+ else
105
+ result = RDL::Type::NominalType.new val[0]
106
+ end
107
+ }
108
+ | SPECIAL_ID {
109
+ if $__rdl_special_types.has_key? val[0] then
110
+ result = $__rdl_special_types[val[0]]
111
+ else
112
+ fail "Unexpected special type identifier #{val[0]}"
113
+ end
114
+ }
115
+ | ID LESS type_expr_comma_list GREATER {
116
+ n = RDL::Type::NominalType.new(val[0])
117
+ result = RDL::Type::GenericType.new(n, *val[2])
118
+ }
119
+ | LBRACKET type_expr_comma_list RBRACKET {
120
+ result = RDL::Type::TupleType.new(*val[1])
121
+ }
122
+ | LBRACKET method_sig_list RBRACKET {
123
+ result = RDL::Type::StructuralType.new(Hash[*val[1]])
124
+ }
125
+ | LBRACE hash_expr_comma_list RBRACE {
126
+ result = RDL::Type::FiniteHashType.new(Hash[*val[1]])
127
+ }
128
+ | FIXNUM { result = RDL::Type::SingletonType.new(val[0].to_i) }
129
+ | FLOAT { result = RDL::Type::SingletonType.new(val[0].to_f) }
130
+ | CONST_BEGIN ID RBRACE {
131
+ result = RDL::Type::SingletonType.new(Kernel.const_get(val[1]))
132
+ }
133
+ # The following can't be used in SingletonTypes because those compare using .equal?
134
+ # | STRING { result = RDL::Type::SingletonType.new(val[0]) }
135
+
136
+ ---- header ----
137
+
138
+ require_relative 'lexer.rex'
139
+
140
+ module RDL::Type
141
+
142
+ ---- inner ----
143
+
144
+ def initialize()
145
+ @yydebug = true
146
+ end
147
+
148
+ ---- footer ----
149
+
150
+ end
@@ -0,0 +1,654 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.12
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ require_relative 'lexer.rex'
11
+
12
+ module RDL::Type
13
+
14
+ class Parser < Racc::Parser
15
+
16
+ module_eval(<<'...end parser.racc/module_eval...', 'parser.racc', 143)
17
+
18
+ def initialize()
19
+ @yydebug = true
20
+ end
21
+
22
+ ...end parser.racc/module_eval...
23
+ ##### State transition tables begin ###
24
+
25
+ racc_action_table = [
26
+ 18, 56, 16, 17, 62, 25, 11, 13, 50, 9,
27
+ 58, 15, 59, 14, 32, 26, 27, 18, 50, 16,
28
+ 17, 32, 25, 11, 13, 4, 9, 60, 15, 61,
29
+ 14, 57, 26, 27, 18, 5, 16, 17, 63, 12,
30
+ 11, 13, 64, 9, 65, 15, 66, 14, 18, 73,
31
+ 16, 17, 68, 12, 11, 13, 53, 37, 49, 15,
32
+ 18, 14, 16, 17, 75, 12, 11, 13, 5, 9,
33
+ 48, 15, 18, 14, 16, 17, 47, 12, 11, 13,
34
+ 46, 9, 80, 15, 18, 14, 16, 17, 45, 12,
35
+ 11, 13, 32, 9, 83, 15, 18, 14, 16, 17,
36
+ 5, 12, 11, 13, 31, 9, 86, 15, 18, 14,
37
+ 16, 17, 87, 33, 11, 13, 29, 9, 89, 15,
38
+ 18, 14, 16, 17, 90, 12, 11, 13, 6, 93,
39
+ 56, 15, 18, 14, 16, 17, nil, 12, 11, 13,
40
+ nil, 9, nil, 15, 18, 14, 16, 17, nil, 12,
41
+ 11, 13, nil, nil, nil, 15, 18, 14, 16, 17,
42
+ nil, 12, 11, 13, nil, 9, nil, 15, 18, 14,
43
+ 16, 17, nil, 12, 11, 13, nil, nil, nil, 15,
44
+ 18, 14, 16, 17, nil, 12, 11, 13, nil, 9,
45
+ nil, 15, 18, 14, 16, 17, nil, 12, 11, 13,
46
+ nil, 9, nil, 15, 18, 14, 16, 17, nil, 12,
47
+ 11, 13, nil, nil, nil, 15, 41, 14, 39, 40,
48
+ 41, 37, 39, 40, 42, 37, nil, nil, 42 ]
49
+
50
+ racc_action_check = [
51
+ 5, 33, 5, 5, 41, 5, 5, 5, 25, 5,
52
+ 35, 5, 36, 5, 33, 5, 5, 47, 37, 47,
53
+ 47, 25, 47, 47, 47, 0, 47, 39, 47, 40,
54
+ 47, 34, 47, 47, 50, 0, 50, 50, 42, 50,
55
+ 50, 50, 43, 50, 44, 50, 45, 50, 31, 50,
56
+ 31, 31, 46, 31, 31, 31, 30, 49, 24, 31,
57
+ 83, 31, 83, 83, 55, 83, 83, 83, 56, 83,
58
+ 23, 83, 9, 83, 9, 9, 22, 9, 9, 9,
59
+ 19, 9, 62, 9, 73, 9, 73, 73, 18, 73,
60
+ 73, 73, 12, 73, 67, 73, 32, 73, 32, 32,
61
+ 68, 32, 32, 32, 10, 32, 76, 32, 14, 32,
62
+ 14, 14, 80, 14, 14, 14, 6, 14, 84, 14,
63
+ 63, 14, 63, 63, 86, 63, 63, 63, 1, 88,
64
+ 90, 63, 4, 63, 4, 4, nil, 4, 4, 4,
65
+ nil, 4, nil, 4, 60, 4, 60, 60, nil, 60,
66
+ 60, 60, nil, nil, nil, 60, 57, 60, 57, 57,
67
+ nil, 57, 57, 57, nil, 57, nil, 57, 87, 57,
68
+ 87, 87, nil, 87, 87, 87, nil, nil, nil, 87,
69
+ 26, 87, 26, 26, nil, 26, 26, 26, nil, 26,
70
+ nil, 26, 27, 26, 27, 27, nil, 27, 27, 27,
71
+ nil, 27, nil, 27, 61, 27, 61, 61, nil, 61,
72
+ 61, 61, nil, nil, nil, 61, 64, 61, 64, 64,
73
+ 15, 64, 15, 15, 64, 15, nil, nil, 15 ]
74
+
75
+ racc_action_pointer = [
76
+ 20, 128, nil, nil, 126, -6, 116, nil, nil, 66,
77
+ 100, nil, 69, nil, 102, 214, nil, nil, 77, 64,
78
+ nil, nil, 74, 59, 56, -2, 174, 186, nil, nil,
79
+ 40, 42, 90, -9, 29, -10, -8, 8, nil, 20,
80
+ 22, -7, 31, 40, 26, 28, 35, 11, nil, 46,
81
+ 28, nil, nil, nil, nil, 40, 53, 150, nil, nil,
82
+ 138, 198, 64, 114, 210, nil, nil, 91, 85, nil,
83
+ nil, nil, nil, 78, nil, nil, 104, nil, nil, nil,
84
+ 105, nil, nil, 54, 100, nil, 113, 162, 118, nil,
85
+ 120, nil, nil, nil ]
86
+
87
+ racc_action_default = [
88
+ -50, -50, -1, -2, -50, -8, -50, -3, -26, -50,
89
+ -38, -40, -41, -42, -50, -30, -47, -48, -50, -50,
90
+ -9, -10, -11, -14, -16, -41, -50, -50, -21, 94,
91
+ -50, -50, -50, -41, -28, -50, -50, -50, -31, -50,
92
+ -50, -50, -50, -36, -50, -50, -24, -50, -15, -50,
93
+ -50, -19, -20, -27, -39, -50, -50, -50, -44, -45,
94
+ -50, -50, -50, -50, -30, -46, -49, -50, -50, -12,
95
+ -13, -17, -18, -50, -23, -43, -6, -29, -32, -33,
96
+ -50, -35, -37, -50, -50, -22, -50, -50, -4, -25,
97
+ -50, -7, -34, -5 ]
98
+
99
+ racc_goto_table = [
100
+ 7, 28, 36, 2, 54, 30, 44, 38, 21, 20,
101
+ 35, 67, 72, 19, 3, 1, nil, nil, nil, nil,
102
+ nil, nil, 51, 52, nil, nil, nil, nil, 55, nil,
103
+ nil, nil, nil, 78, 79, nil, 81, nil, nil, nil,
104
+ nil, nil, nil, 28, nil, nil, 74, nil, nil, nil,
105
+ 70, 69, 71, 77, nil, 82, 38, nil, nil, 76,
106
+ 92, nil, nil, nil, nil, nil, nil, nil, nil, 85,
107
+ nil, 84, nil, nil, 91, nil, nil, nil, nil, 88 ]
108
+
109
+ racc_goto_check = [
110
+ 4, 4, 7, 2, 14, 4, 17, 12, 9, 8,
111
+ 15, 6, 13, 5, 3, 1, nil, nil, nil, nil,
112
+ nil, nil, 4, 4, nil, nil, nil, nil, 15, nil,
113
+ nil, nil, nil, 14, 14, nil, 14, nil, nil, nil,
114
+ nil, nil, nil, 4, nil, nil, 4, nil, nil, nil,
115
+ 9, 8, 9, 15, nil, 17, 12, nil, nil, 2,
116
+ 14, nil, nil, nil, nil, nil, nil, nil, nil, 4,
117
+ nil, 2, nil, nil, 7, nil, nil, nil, nil, 4 ]
118
+
119
+ racc_goto_pointer = [
120
+ nil, 15, 3, 14, -4, 8, -35, -12, 4, 3,
121
+ nil, nil, -8, -38, -27, -4, nil, -9, nil ]
122
+
123
+ racc_goto_default = [
124
+ nil, nil, nil, nil, 34, nil, nil, nil, nil, nil,
125
+ 22, 23, 24, nil, 8, nil, 43, nil, 10 ]
126
+
127
+ racc_reduce_table = [
128
+ 0, 0, :racc_error,
129
+ 1, 27, :_reduce_1,
130
+ 1, 27, :_reduce_2,
131
+ 2, 29, :_reduce_3,
132
+ 6, 28, :_reduce_4,
133
+ 7, 28, :_reduce_5,
134
+ 3, 33, :_reduce_6,
135
+ 5, 33, :_reduce_7,
136
+ 0, 31, :_reduce_8,
137
+ 1, 31, :_reduce_9,
138
+ 1, 31, :_reduce_10,
139
+ 1, 34, :_reduce_11,
140
+ 3, 34, :_reduce_12,
141
+ 3, 34, :_reduce_13,
142
+ 1, 36, :_reduce_14,
143
+ 2, 36, :_reduce_15,
144
+ 1, 35, :_reduce_16,
145
+ 3, 35, :_reduce_17,
146
+ 3, 38, :_reduce_18,
147
+ 2, 37, :_reduce_19,
148
+ 2, 37, :_reduce_20,
149
+ 1, 37, :_reduce_21,
150
+ 2, 39, :_reduce_22,
151
+ 1, 39, :_reduce_23,
152
+ 0, 32, :_reduce_24,
153
+ 3, 32, :_reduce_25,
154
+ 1, 30, :_reduce_26,
155
+ 3, 30, :_reduce_27,
156
+ 1, 41, :_reduce_28,
157
+ 3, 41, :_reduce_29,
158
+ 0, 42, :_reduce_none,
159
+ 1, 42, :_reduce_31,
160
+ 3, 42, :_reduce_32,
161
+ 3, 42, :_reduce_33,
162
+ 5, 42, :_reduce_34,
163
+ 3, 42, :_reduce_35,
164
+ 1, 43, :_reduce_36,
165
+ 3, 43, :_reduce_37,
166
+ 1, 40, :_reduce_38,
167
+ 3, 40, :_reduce_39,
168
+ 1, 44, :_reduce_40,
169
+ 1, 44, :_reduce_41,
170
+ 1, 44, :_reduce_42,
171
+ 4, 44, :_reduce_43,
172
+ 3, 44, :_reduce_44,
173
+ 3, 44, :_reduce_45,
174
+ 3, 44, :_reduce_46,
175
+ 1, 44, :_reduce_47,
176
+ 1, 44, :_reduce_48,
177
+ 3, 44, :_reduce_49 ]
178
+
179
+ racc_reduce_n = 50
180
+
181
+ racc_shift_n = 94
182
+
183
+ racc_token_table = {
184
+ false => 0,
185
+ :error => 1,
186
+ :COMMA => 2,
187
+ :RARROW => 3,
188
+ :OR => 4,
189
+ :DOUBLE_HASH => 5,
190
+ :CONST_BEGIN => 6,
191
+ :RASSOC => 7,
192
+ :FIXNUM => 8,
193
+ :FLOAT => 9,
194
+ :COLON => 10,
195
+ :ID => 11,
196
+ :SYMBOL => 12,
197
+ :SPECIAL_ID => 13,
198
+ :STRING => 14,
199
+ :LPAREN => 15,
200
+ :RPAREN => 16,
201
+ :LBRACE => 17,
202
+ :RBRACE => 18,
203
+ :LBRACKET => 19,
204
+ :RBRACKET => 20,
205
+ :QUERY => 21,
206
+ :STAR => 22,
207
+ :LESS => 23,
208
+ :GREATER => 24,
209
+ :EOF => 25 }
210
+
211
+ racc_nt_base = 26
212
+
213
+ racc_use_result_var = true
214
+
215
+ Racc_arg = [
216
+ racc_action_table,
217
+ racc_action_check,
218
+ racc_action_default,
219
+ racc_action_pointer,
220
+ racc_goto_table,
221
+ racc_goto_check,
222
+ racc_goto_default,
223
+ racc_goto_pointer,
224
+ racc_nt_base,
225
+ racc_reduce_table,
226
+ racc_token_table,
227
+ racc_shift_n,
228
+ racc_reduce_n,
229
+ racc_use_result_var ]
230
+
231
+ Racc_token_to_s_table = [
232
+ "$end",
233
+ "error",
234
+ "COMMA",
235
+ "RARROW",
236
+ "OR",
237
+ "DOUBLE_HASH",
238
+ "CONST_BEGIN",
239
+ "RASSOC",
240
+ "FIXNUM",
241
+ "FLOAT",
242
+ "COLON",
243
+ "ID",
244
+ "SYMBOL",
245
+ "SPECIAL_ID",
246
+ "STRING",
247
+ "LPAREN",
248
+ "RPAREN",
249
+ "LBRACE",
250
+ "RBRACE",
251
+ "LBRACKET",
252
+ "RBRACKET",
253
+ "QUERY",
254
+ "STAR",
255
+ "LESS",
256
+ "GREATER",
257
+ "EOF",
258
+ "$start",
259
+ "entry",
260
+ "method_type",
261
+ "bare_type",
262
+ "type_expr",
263
+ "arg_list",
264
+ "block",
265
+ "method_sig_list",
266
+ "nonempty_arg_list",
267
+ "named_arg_list",
268
+ "arg",
269
+ "base_arg",
270
+ "named_arg",
271
+ "base_arg_query_only",
272
+ "union_type",
273
+ "type_expr_comma_list",
274
+ "hash_expr",
275
+ "hash_expr_comma_list",
276
+ "single_type" ]
277
+
278
+ Racc_debug_parser = false
279
+
280
+ ##### State transition tables end #####
281
+
282
+ # reduce 0 omitted
283
+
284
+ module_eval(<<'.,.,', 'parser.racc', 18)
285
+ def _reduce_1(val, _values, result)
286
+ result = val[0]
287
+ result
288
+ end
289
+ .,.,
290
+
291
+ module_eval(<<'.,.,', 'parser.racc', 19)
292
+ def _reduce_2(val, _values, result)
293
+ result = val[0]
294
+ result
295
+ end
296
+ .,.,
297
+
298
+ module_eval(<<'.,.,', 'parser.racc', 23)
299
+ def _reduce_3(val, _values, result)
300
+ result = val[1]
301
+
302
+ result
303
+ end
304
+ .,.,
305
+
306
+ module_eval(<<'.,.,', 'parser.racc', 28)
307
+ def _reduce_4(val, _values, result)
308
+ result = RDL::Type::MethodType.new val[1], val[3], val[5]
309
+
310
+ result
311
+ end
312
+ .,.,
313
+
314
+ module_eval(<<'.,.,', 'parser.racc', 31)
315
+ def _reduce_5(val, _values, result)
316
+ result = RDL::Type::MethodType.new val[1], val[3], RDL::Type::AnnotatedArgType.new(val[6], val[5])
317
+
318
+ result
319
+ end
320
+ .,.,
321
+
322
+ module_eval(<<'.,.,', 'parser.racc', 35)
323
+ def _reduce_6(val, _values, result)
324
+ result = [val[0].to_sym, val[2]]
325
+ result
326
+ end
327
+ .,.,
328
+
329
+ module_eval(<<'.,.,', 'parser.racc', 36)
330
+ def _reduce_7(val, _values, result)
331
+ result = [val[0].to_sym, val[2]] + val[4]
332
+ result
333
+ end
334
+ .,.,
335
+
336
+ module_eval(<<'.,.,', 'parser.racc', 39)
337
+ def _reduce_8(val, _values, result)
338
+ result = []
339
+ result
340
+ end
341
+ .,.,
342
+
343
+ module_eval(<<'.,.,', 'parser.racc', 40)
344
+ def _reduce_9(val, _values, result)
345
+ result = val[0]
346
+ result
347
+ end
348
+ .,.,
349
+
350
+ module_eval(<<'.,.,', 'parser.racc', 42)
351
+ def _reduce_10(val, _values, result)
352
+ result = [RDL::Type::FiniteHashType.new(Hash[*val[0]])]
353
+
354
+ result
355
+ end
356
+ .,.,
357
+
358
+ module_eval(<<'.,.,', 'parser.racc', 45)
359
+ def _reduce_11(val, _values, result)
360
+ result = [val[0]]
361
+ result
362
+ end
363
+ .,.,
364
+
365
+ module_eval(<<'.,.,', 'parser.racc', 46)
366
+ def _reduce_12(val, _values, result)
367
+ result = val[2].unshift val[0]
368
+ result
369
+ end
370
+ .,.,
371
+
372
+ module_eval(<<'.,.,', 'parser.racc', 47)
373
+ def _reduce_13(val, _values, result)
374
+ # named arg list must come last
375
+ result = [val[0], RDL::Type::FiniteHashType.new(Hash[*val[2]])]
376
+
377
+ result
378
+ end
379
+ .,.,
380
+
381
+ module_eval(<<'.,.,', 'parser.racc', 51)
382
+ def _reduce_14(val, _values, result)
383
+ result = val[0]
384
+ result
385
+ end
386
+ .,.,
387
+
388
+ module_eval(<<'.,.,', 'parser.racc', 52)
389
+ def _reduce_15(val, _values, result)
390
+ result = RDL::Type::AnnotatedArgType.new(val[1], val[0])
391
+ result
392
+ end
393
+ .,.,
394
+
395
+ module_eval(<<'.,.,', 'parser.racc', 54)
396
+ def _reduce_16(val, _values, result)
397
+ result = val[0]
398
+ result
399
+ end
400
+ .,.,
401
+
402
+ module_eval(<<'.,.,', 'parser.racc', 55)
403
+ def _reduce_17(val, _values, result)
404
+ result = val[0] + val[2]
405
+ result
406
+ end
407
+ .,.,
408
+
409
+ module_eval(<<'.,.,', 'parser.racc', 57)
410
+ def _reduce_18(val, _values, result)
411
+ result = [val[0].to_sym, val[2]]
412
+ result
413
+ end
414
+ .,.,
415
+
416
+ module_eval(<<'.,.,', 'parser.racc', 60)
417
+ def _reduce_19(val, _values, result)
418
+ result = RDL::Type::OptionalType.new val[1]
419
+ result
420
+ end
421
+ .,.,
422
+
423
+ module_eval(<<'.,.,', 'parser.racc', 61)
424
+ def _reduce_20(val, _values, result)
425
+ result = RDL::Type::VarargType.new val[1]
426
+ result
427
+ end
428
+ .,.,
429
+
430
+ module_eval(<<'.,.,', 'parser.racc', 62)
431
+ def _reduce_21(val, _values, result)
432
+ result = val[0]
433
+ result
434
+ end
435
+ .,.,
436
+
437
+ module_eval(<<'.,.,', 'parser.racc', 64)
438
+ def _reduce_22(val, _values, result)
439
+ result = RDL::Type::OptionalType.new val[1]
440
+ result
441
+ end
442
+ .,.,
443
+
444
+ module_eval(<<'.,.,', 'parser.racc', 65)
445
+ def _reduce_23(val, _values, result)
446
+ result = val[0]
447
+ result
448
+ end
449
+ .,.,
450
+
451
+ module_eval(<<'.,.,', 'parser.racc', 68)
452
+ def _reduce_24(val, _values, result)
453
+ result = nil
454
+ result
455
+ end
456
+ .,.,
457
+
458
+ module_eval(<<'.,.,', 'parser.racc', 69)
459
+ def _reduce_25(val, _values, result)
460
+ result = val[1]
461
+ result
462
+ end
463
+ .,.,
464
+
465
+ module_eval(<<'.,.,', 'parser.racc', 72)
466
+ def _reduce_26(val, _values, result)
467
+ result = val[0]
468
+ result
469
+ end
470
+ .,.,
471
+
472
+ module_eval(<<'.,.,', 'parser.racc', 73)
473
+ def _reduce_27(val, _values, result)
474
+ result = val[1]
475
+ result
476
+ end
477
+ .,.,
478
+
479
+ module_eval(<<'.,.,', 'parser.racc', 76)
480
+ def _reduce_28(val, _values, result)
481
+ result = [val[0]]
482
+ result
483
+ end
484
+ .,.,
485
+
486
+ module_eval(<<'.,.,', 'parser.racc', 77)
487
+ def _reduce_29(val, _values, result)
488
+ result = [val[0]] + val[2]
489
+ result
490
+ end
491
+ .,.,
492
+
493
+ # reduce 30 omitted
494
+
495
+ module_eval(<<'.,.,', 'parser.racc', 80)
496
+ def _reduce_31(val, _values, result)
497
+ result = val[0]
498
+ result
499
+ end
500
+ .,.,
501
+
502
+ module_eval(<<'.,.,', 'parser.racc', 81)
503
+ def _reduce_32(val, _values, result)
504
+ result = [val[0].to_i, val[2]]
505
+ result
506
+ end
507
+ .,.,
508
+
509
+ module_eval(<<'.,.,', 'parser.racc', 82)
510
+ def _reduce_33(val, _values, result)
511
+ result = [val[0].to_f, val[2]]
512
+ result
513
+ end
514
+ .,.,
515
+
516
+ module_eval(<<'.,.,', 'parser.racc', 84)
517
+ def _reduce_34(val, _values, result)
518
+ result = [Kernel.const_get(val[0]), val[2]]
519
+
520
+ result
521
+ end
522
+ .,.,
523
+
524
+ module_eval(<<'.,.,', 'parser.racc', 86)
525
+ def _reduce_35(val, _values, result)
526
+ result = [val[0], val[2]]
527
+ result
528
+ end
529
+ .,.,
530
+
531
+ module_eval(<<'.,.,', 'parser.racc', 89)
532
+ def _reduce_36(val, _values, result)
533
+ result = val[0]
534
+ result
535
+ end
536
+ .,.,
537
+
538
+ module_eval(<<'.,.,', 'parser.racc', 90)
539
+ def _reduce_37(val, _values, result)
540
+ result = val[0] + val[2]
541
+ result
542
+ end
543
+ .,.,
544
+
545
+ module_eval(<<'.,.,', 'parser.racc', 93)
546
+ def _reduce_38(val, _values, result)
547
+ result = val[0]
548
+ result
549
+ end
550
+ .,.,
551
+
552
+ module_eval(<<'.,.,', 'parser.racc', 94)
553
+ def _reduce_39(val, _values, result)
554
+ result = RDL::Type::UnionType.new val[0], val[2]
555
+ result
556
+ end
557
+ .,.,
558
+
559
+ module_eval(<<'.,.,', 'parser.racc', 97)
560
+ def _reduce_40(val, _values, result)
561
+ result = RDL::Type::SingletonType.new(val[0].to_sym)
562
+ result
563
+ end
564
+ .,.,
565
+
566
+ module_eval(<<'.,.,', 'parser.racc', 99)
567
+ def _reduce_41(val, _values, result)
568
+ if val[0] == 'nil' then
569
+ result = RDL::Type::NilType.new
570
+ elsif val[0] =~ /^[a-z_]+\w*\'?/ then
571
+ result = RDL::Type::VarType.new(val[0].to_sym)
572
+ else
573
+ result = RDL::Type::NominalType.new val[0]
574
+ end
575
+
576
+ result
577
+ end
578
+ .,.,
579
+
580
+ module_eval(<<'.,.,', 'parser.racc', 108)
581
+ def _reduce_42(val, _values, result)
582
+ if $__rdl_special_types.has_key? val[0] then
583
+ result = $__rdl_special_types[val[0]]
584
+ else
585
+ fail "Unexpected special type identifier #{val[0]}"
586
+ end
587
+
588
+ result
589
+ end
590
+ .,.,
591
+
592
+ module_eval(<<'.,.,', 'parser.racc', 115)
593
+ def _reduce_43(val, _values, result)
594
+ n = RDL::Type::NominalType.new(val[0])
595
+ result = RDL::Type::GenericType.new(n, *val[2])
596
+
597
+ result
598
+ end
599
+ .,.,
600
+
601
+ module_eval(<<'.,.,', 'parser.racc', 119)
602
+ def _reduce_44(val, _values, result)
603
+ result = RDL::Type::TupleType.new(*val[1])
604
+
605
+ result
606
+ end
607
+ .,.,
608
+
609
+ module_eval(<<'.,.,', 'parser.racc', 122)
610
+ def _reduce_45(val, _values, result)
611
+ result = RDL::Type::StructuralType.new(Hash[*val[1]])
612
+
613
+ result
614
+ end
615
+ .,.,
616
+
617
+ module_eval(<<'.,.,', 'parser.racc', 125)
618
+ def _reduce_46(val, _values, result)
619
+ result = RDL::Type::FiniteHashType.new(Hash[*val[1]])
620
+
621
+ result
622
+ end
623
+ .,.,
624
+
625
+ module_eval(<<'.,.,', 'parser.racc', 127)
626
+ def _reduce_47(val, _values, result)
627
+ result = RDL::Type::SingletonType.new(val[0].to_i)
628
+ result
629
+ end
630
+ .,.,
631
+
632
+ module_eval(<<'.,.,', 'parser.racc', 128)
633
+ def _reduce_48(val, _values, result)
634
+ result = RDL::Type::SingletonType.new(val[0].to_f)
635
+ result
636
+ end
637
+ .,.,
638
+
639
+ module_eval(<<'.,.,', 'parser.racc', 130)
640
+ def _reduce_49(val, _values, result)
641
+ result = RDL::Type::SingletonType.new(Kernel.const_get(val[1]))
642
+
643
+ result
644
+ end
645
+ .,.,
646
+
647
+ def _reduce_none(val, _values, result)
648
+ val[0]
649
+ end
650
+
651
+ end # class Parser
652
+
653
+
654
+ end