rdl 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
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