mutant-melbourne 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/LICENSE +25 -0
  2. data/README.md +69 -0
  3. data/Rakefile +14 -0
  4. data/ext/melbourne/.gitignore +3 -0
  5. data/ext/melbourne/bstring-license.txt +29 -0
  6. data/ext/melbourne/bstrlib.c +2687 -0
  7. data/ext/melbourne/bstrlib.h +267 -0
  8. data/ext/melbourne/encoding_compat.cpp +188 -0
  9. data/ext/melbourne/encoding_compat.hpp +57 -0
  10. data/ext/melbourne/extconf.rb +87 -0
  11. data/ext/melbourne/grammar18.cpp +11280 -0
  12. data/ext/melbourne/grammar18.hpp +13 -0
  13. data/ext/melbourne/grammar18.y +6088 -0
  14. data/ext/melbourne/grammar19.cpp +12420 -0
  15. data/ext/melbourne/grammar19.hpp +11 -0
  16. data/ext/melbourne/grammar19.y +7113 -0
  17. data/ext/melbourne/lex.c.blt +152 -0
  18. data/ext/melbourne/lex.c.tab +136 -0
  19. data/ext/melbourne/local_state.hpp +43 -0
  20. data/ext/melbourne/melbourne.cpp +88 -0
  21. data/ext/melbourne/melbourne.hpp +19 -0
  22. data/ext/melbourne/node18.hpp +262 -0
  23. data/ext/melbourne/node19.hpp +271 -0
  24. data/ext/melbourne/node_types.rb +304 -0
  25. data/ext/melbourne/node_types18.cpp +255 -0
  26. data/ext/melbourne/node_types18.hpp +129 -0
  27. data/ext/melbourne/node_types19.cpp +249 -0
  28. data/ext/melbourne/node_types19.hpp +126 -0
  29. data/ext/melbourne/parser_state18.hpp +181 -0
  30. data/ext/melbourne/parser_state19.hpp +251 -0
  31. data/ext/melbourne/quark.cpp +42 -0
  32. data/ext/melbourne/quark.hpp +45 -0
  33. data/ext/melbourne/symbols.cpp +224 -0
  34. data/ext/melbourne/symbols.hpp +119 -0
  35. data/ext/melbourne/var_table18.cpp +83 -0
  36. data/ext/melbourne/var_table18.hpp +33 -0
  37. data/ext/melbourne/var_table19.cpp +65 -0
  38. data/ext/melbourne/var_table19.hpp +35 -0
  39. data/ext/melbourne/visitor18.cpp +963 -0
  40. data/ext/melbourne/visitor18.hpp +12 -0
  41. data/ext/melbourne/visitor19.cpp +960 -0
  42. data/ext/melbourne/visitor19.hpp +15 -0
  43. data/lib/compiler/ast/constants.rb +81 -0
  44. data/lib/compiler/ast/control_flow.rb +290 -0
  45. data/lib/compiler/ast/data.rb +14 -0
  46. data/lib/compiler/ast/definitions.rb +749 -0
  47. data/lib/compiler/ast/encoding.rb +18 -0
  48. data/lib/compiler/ast/exceptions.rb +138 -0
  49. data/lib/compiler/ast/file.rb +11 -0
  50. data/lib/compiler/ast/grapher.rb +89 -0
  51. data/lib/compiler/ast/literals.rb +207 -0
  52. data/lib/compiler/ast/node.rb +362 -0
  53. data/lib/compiler/ast/operators.rb +106 -0
  54. data/lib/compiler/ast/self.rb +15 -0
  55. data/lib/compiler/ast/sends.rb +615 -0
  56. data/lib/compiler/ast/transforms.rb +298 -0
  57. data/lib/compiler/ast/values.rb +88 -0
  58. data/lib/compiler/ast/variables.rb +351 -0
  59. data/lib/compiler/ast.rb +20 -0
  60. data/lib/compiler/locals.rb +109 -0
  61. data/lib/melbourne/processor.rb +651 -0
  62. data/lib/melbourne/version.rb +3 -0
  63. data/lib/melbourne.rb +143 -0
  64. metadata +112 -0
@@ -0,0 +1,15 @@
1
+ #ifndef MEL_VISITOR19_HPP
2
+ #define MEL_VISITOR19_HPP
3
+
4
+ namespace melbourne {
5
+ namespace grammar19 {
6
+ rb_parser_state *parser_alloc_state();
7
+ void *pt_allocate(rb_parser_state *st, int size);
8
+ void pt_free(rb_parser_state *st);
9
+
10
+ void create_error(rb_parser_state *parser_state, char *msg);
11
+ };
12
+ };
13
+
14
+ #endif
15
+
@@ -0,0 +1,81 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+
6
+ class TypeConstant < Node
7
+ def initialize(line)
8
+ @line = line
9
+ end
10
+ end
11
+
12
+ class ScopedConstant < Node
13
+ attr_accessor :parent, :name
14
+
15
+ def initialize(line, parent, name)
16
+ @line = line
17
+ @parent = parent
18
+ @name = name
19
+ end
20
+
21
+ def to_sexp
22
+ [:colon2, @parent.to_sexp, @name]
23
+ end
24
+
25
+ alias_method :assign_sexp, :to_sexp
26
+ end
27
+
28
+ class ToplevelConstant < Node
29
+ attr_accessor :name
30
+
31
+ def initialize(line, name)
32
+ @line = line
33
+ @name = name
34
+ end
35
+
36
+ def to_sexp
37
+ [:colon3, @name]
38
+ end
39
+
40
+ alias_method :assign_sexp, :to_sexp
41
+ end
42
+
43
+ class ConstantAccess < Node
44
+ attr_accessor :name
45
+
46
+ def initialize(line, name)
47
+ @line = line
48
+ @name = name
49
+ end
50
+
51
+ def assign_sexp
52
+ @name
53
+ end
54
+
55
+ def to_sexp
56
+ [:const, @name]
57
+ end
58
+ end
59
+
60
+ class ConstantAssignment < Node
61
+ attr_accessor :constant, :value
62
+
63
+ def initialize(line, expr, value)
64
+ @line = line
65
+ @value = value
66
+
67
+ if expr.kind_of? Symbol
68
+ @constant = ConstantAccess.new line, expr
69
+ else
70
+ @constant = expr
71
+ end
72
+ end
73
+
74
+ def to_sexp
75
+ sexp = [:cdecl, @constant.assign_sexp]
76
+ sexp << @value.to_sexp if @value
77
+ sexp
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,290 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class Case < Node
6
+ attr_accessor :whens, :else
7
+
8
+ def initialize(line, whens, else_body)
9
+ @line = line
10
+ @whens = whens
11
+ @else = else_body || NilLiteral.new(line)
12
+ end
13
+
14
+ def receiver_sexp
15
+ nil
16
+ end
17
+
18
+ def to_sexp
19
+ else_sexp = @else.kind_of?(NilLiteral) ? nil : @else.to_sexp
20
+ sexp = [:case, receiver_sexp]
21
+ sexp << [:whens] + @whens.map { |x| x.to_sexp }
22
+ sexp << else_sexp
23
+ sexp
24
+ end
25
+ end
26
+
27
+ class ReceiverCase < Case
28
+ attr_accessor :receiver
29
+
30
+ def initialize(line, receiver, whens, else_body)
31
+ @line = line
32
+ @receiver = receiver
33
+ @whens = whens
34
+ @else = else_body || NilLiteral.new(line)
35
+ end
36
+
37
+ def receiver_sexp
38
+ @receiver.to_sexp
39
+ end
40
+ end
41
+
42
+ class When < Node
43
+ attr_accessor :conditions, :body, :single, :splat
44
+
45
+ def initialize(line, conditions, body)
46
+ @line = line
47
+ @body = body || NilLiteral.new(line)
48
+ @splat = nil
49
+ @single = nil
50
+
51
+ if conditions.kind_of? ConcatArgs
52
+ @splat = SplatWhen.new line, conditions.rest
53
+ conditions = conditions.array
54
+ end
55
+
56
+ if conditions.kind_of? ArrayLiteral
57
+ if conditions.body.last.kind_of? When
58
+ last = conditions.body.pop
59
+ if last.conditions.kind_of? ArrayLiteral
60
+ conditions.body.concat last.conditions.body
61
+ elsif last.single
62
+ @splat = SplatWhen.new line, last.single
63
+ else
64
+ @splat = SplatWhen.new line, last.conditions
65
+ end
66
+ end
67
+
68
+ if conditions.body.size == 1 and !@splat
69
+ @single = conditions.body.first
70
+ else
71
+ @conditions = conditions
72
+ end
73
+ elsif conditions.kind_of? SplatValue
74
+ @splat = SplatWhen.new line, conditions.value
75
+ @conditions = nil
76
+ else
77
+ @conditions = conditions
78
+ end
79
+ end
80
+
81
+ def to_sexp
82
+ if @single
83
+ conditions_sexp = [:array, @single.to_sexp]
84
+ else
85
+ conditions_sexp = @conditions.to_sexp
86
+ conditions_sexp << @splat.to_sexp if @splat
87
+ end
88
+ [:when, conditions_sexp, @body.to_sexp]
89
+ end
90
+ end
91
+
92
+ class SplatWhen < Node
93
+ attr_accessor :condition
94
+
95
+ def initialize(line, condition)
96
+ @line = line
97
+ @condition = condition
98
+ end
99
+
100
+ def to_sexp
101
+ [:when, @condition.to_sexp, nil]
102
+ end
103
+ end
104
+
105
+ class Flip2 < Node
106
+ def initialize(line, start, finish)
107
+ @line = line
108
+ @start = start
109
+ @finish = finish
110
+ end
111
+
112
+ def sexp_name
113
+ :flip2
114
+ end
115
+
116
+ def exclusive?
117
+ false
118
+ end
119
+
120
+ def to_sexp
121
+ [sexp_name, @start.to_sexp, @finish.to_sexp]
122
+ end
123
+ end
124
+
125
+ class Flip3 < Flip2
126
+ def sexp_name
127
+ :flip3
128
+ end
129
+
130
+ def exclusive?
131
+ true
132
+ end
133
+ end
134
+
135
+ class If < Node
136
+ attr_accessor :condition, :body, :else
137
+
138
+ def initialize(line, condition, body, else_body)
139
+ @line = line
140
+ @condition = condition
141
+ @body = body || NilLiteral.new(line)
142
+ @else = else_body || NilLiteral.new(line)
143
+ end
144
+
145
+ def to_sexp
146
+ else_sexp = @else.kind_of?(NilLiteral) ? nil : @else.to_sexp
147
+ [:if, @condition.to_sexp, @body.to_sexp, else_sexp]
148
+ end
149
+ end
150
+
151
+ class While < Node
152
+ attr_accessor :condition, :body, :check_first
153
+
154
+ def initialize(line, condition, body, check_first)
155
+ @line = line
156
+ @condition = condition
157
+ @body = body || NilLiteral.new(line)
158
+ @check_first = check_first
159
+ end
160
+
161
+ def sexp_name
162
+ :while
163
+ end
164
+
165
+ def to_sexp
166
+ [sexp_name, @condition.to_sexp, @body.to_sexp, @check_first]
167
+ end
168
+ end
169
+
170
+ class Until < While
171
+ def sexp_name
172
+ :until
173
+ end
174
+ end
175
+
176
+ class Match < Node
177
+ attr_accessor :pattern
178
+
179
+ def initialize(line, pattern, flags)
180
+ @line = line
181
+ @pattern = RegexLiteral.new line, pattern, flags
182
+ end
183
+
184
+ def to_sexp
185
+ [:match, @pattern.to_sexp]
186
+ end
187
+ end
188
+
189
+ class Match2 < Node
190
+ attr_accessor :pattern, :value
191
+
192
+ def initialize(line, pattern, value)
193
+ @line = line
194
+ @pattern = pattern
195
+ @value = value
196
+ end
197
+
198
+ def to_sexp
199
+ [:match2, @pattern.to_sexp, @value.to_sexp]
200
+ end
201
+ end
202
+
203
+ class Match3 < Node
204
+ attr_accessor :pattern, :value
205
+
206
+ def initialize(line, pattern, value)
207
+ @line = line
208
+ @pattern = pattern
209
+ @value = value
210
+ end
211
+
212
+ def to_sexp
213
+ [:match3, @pattern.to_sexp, @value.to_sexp]
214
+ end
215
+ end
216
+
217
+ class Break < Node
218
+ attr_accessor :value
219
+
220
+ def initialize(line, expr)
221
+ @line = line
222
+ @value = expr || NilLiteral.new(line)
223
+ end
224
+
225
+ def jump_error(g, name)
226
+ g.push_rubinius
227
+ g.push_literal name
228
+ g.send :jump_error, 1
229
+ end
230
+
231
+ def sexp_name
232
+ :break
233
+ end
234
+
235
+ def to_sexp
236
+ sexp = [sexp_name]
237
+ sexp << @value.to_sexp if @value
238
+ sexp
239
+ end
240
+ end
241
+
242
+ class Next < Break
243
+ def initialize(line, value)
244
+ @line = line
245
+ @value = value
246
+ end
247
+
248
+ def sexp_name
249
+ :next
250
+ end
251
+ end
252
+
253
+ class Redo < Break
254
+ def initialize(line)
255
+ @line = line
256
+ end
257
+
258
+ def to_sexp
259
+ [:redo]
260
+ end
261
+ end
262
+
263
+ class Retry < Break
264
+ def initialize(line)
265
+ @line = line
266
+ end
267
+
268
+ def to_sexp
269
+ [:retry]
270
+ end
271
+ end
272
+
273
+ class Return < Node
274
+ attr_accessor :value
275
+
276
+ def initialize(line, expr)
277
+ @line = line
278
+ @value = expr
279
+ @splat = nil
280
+ end
281
+
282
+ def to_sexp
283
+ sexp = [:return]
284
+ sexp << @value.to_sexp if @value
285
+ sexp << @splat.to_sexp if @splat
286
+ sexp
287
+ end
288
+ end
289
+ end
290
+ end
@@ -0,0 +1,14 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class EndData < Node
6
+ attr_accessor :data
7
+
8
+ def initialize(offset, body)
9
+ @offset = offset
10
+ @body = body || NilLiteral.new(1)
11
+ end
12
+ end
13
+ end
14
+ end