mutant-melbourne 2.0.1

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 (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,18 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class Encoding < Node
6
+ attr_accessor :name
7
+
8
+ def initialize(line, name)
9
+ @line = line
10
+ @name = name
11
+ end
12
+
13
+ def to_sexp
14
+ [:encoding, @name]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,138 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class Begin < Node
6
+ attr_accessor :rescue
7
+
8
+ def initialize(line, body)
9
+ @line = line
10
+ @rescue = body || NilLiteral.new(line)
11
+ end
12
+
13
+ def to_sexp
14
+ @rescue.to_sexp
15
+ end
16
+ end
17
+
18
+ EnsureType = 1
19
+
20
+ class Ensure < Node
21
+ attr_accessor :body, :ensure
22
+
23
+ def initialize(line, body, ensr)
24
+ @line = line
25
+ @body = body || NilLiteral.new(line)
26
+ @ensure = ensr
27
+ end
28
+
29
+ def to_sexp
30
+ [:ensure, @body.to_sexp, @ensure.to_sexp]
31
+ end
32
+ end
33
+
34
+ RescueType = 0
35
+
36
+ class Rescue < Node
37
+ attr_accessor :body, :rescue, :else
38
+
39
+ def initialize(line, body, rescue_body, else_body)
40
+ @line = line
41
+ @body = body
42
+ @rescue = rescue_body
43
+ @else = else_body
44
+ end
45
+
46
+ def to_sexp
47
+ sexp = [:rescue, @body.to_sexp, @rescue.to_sexp]
48
+ sexp << @else.to_sexp if @else
49
+ sexp
50
+ end
51
+ end
52
+
53
+ class RescueCondition < Node
54
+ attr_accessor :conditions, :assignment, :body, :next, :splat
55
+
56
+ def initialize(line, conditions, body, nxt)
57
+ @line = line
58
+ @next = nxt
59
+ @splat = nil
60
+ @assignment = nil
61
+
62
+ case conditions
63
+ when ArrayLiteral
64
+ @conditions = conditions
65
+ when ConcatArgs
66
+ @conditions = conditions.array
67
+ @splat = RescueSplat.new line, conditions.rest
68
+ when SplatValue
69
+ @splat = RescueSplat.new line, conditions.value
70
+ when nil
71
+ condition = ConstantAccess.new line, :StandardError
72
+ @conditions = ArrayLiteral.new line, [condition]
73
+ end
74
+
75
+ case body
76
+ when Block
77
+ @assignment = body.array.shift if assignment? body.array.first
78
+ @body = body
79
+ when nil
80
+ @body = NilLiteral.new line
81
+ else
82
+ if assignment? body
83
+ @assignment = body
84
+ @body = NilLiteral.new line
85
+ else
86
+ @body = body
87
+ end
88
+ end
89
+ end
90
+
91
+ def assignment?(node)
92
+ case node
93
+ when VariableAssignment
94
+ value = node.value
95
+ when AttributeAssignment
96
+ value = node.arguments.array.last
97
+ else
98
+ return false
99
+ end
100
+
101
+ return true if value.kind_of? CurrentException
102
+ end
103
+
104
+ def to_sexp
105
+ array = @conditions.to_sexp
106
+ array << @assignment.to_sexp if @assignment
107
+ array << @splat.to_sexp if @splat
108
+
109
+ sexp = [:resbody, array]
110
+ case @body
111
+ when Block
112
+ sexp << (@body ? @body.array.map { |x| x.to_sexp } : nil)
113
+ when nil
114
+ sexp << nil
115
+ else
116
+ sexp << @body.to_sexp
117
+ end
118
+
119
+ sexp << @next.to_sexp if @next
120
+
121
+ sexp
122
+ end
123
+ end
124
+
125
+ class RescueSplat < Node
126
+ attr_accessor :value
127
+
128
+ def initialize(line, value)
129
+ @line = line
130
+ @value = value
131
+ end
132
+
133
+ def to_sexp
134
+ [:splat, @value.to_sexp]
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,11 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class File < Node
6
+ def to_sexp
7
+ [:file]
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,89 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class AsciiGrapher
6
+ def initialize(ast, node_kind=Node)
7
+ @ast = ast
8
+ @node_kind = node_kind
9
+ end
10
+
11
+ def print
12
+ graph_node @ast
13
+ end
14
+
15
+ def indented_print(level, value)
16
+ puts "#{" " * level}#{value}"
17
+ end
18
+
19
+ def print_node(node, level, idx=nil)
20
+ name = node.class.to_s.split("::").last
21
+
22
+ name = "#{name} [#{idx}]" if idx
23
+
24
+ indented_print level, name
25
+ end
26
+
27
+ def graph_node(node, level=0, idx=nil)
28
+ print_node node, level, idx
29
+ level += 2
30
+
31
+ nodes = []
32
+ node.instance_variables.each do |v|
33
+ next if v == "@compiler"
34
+
35
+ value = node.instance_variable_get v
36
+
37
+ # lame, yes. remove when Node doesn't have @body by default
38
+ next if v == "@body" and value.nil? and not v.respond_to? :body=
39
+
40
+ if value.kind_of? @node_kind
41
+ nodes << [v, value]
42
+ else
43
+ graph_value v, value, level
44
+ end
45
+ end
46
+
47
+ nodes.each do |name, n|
48
+ puts "#{" " * level}#{name}: \\"
49
+ graph_node n, level + 2
50
+ end
51
+ end
52
+
53
+ def graph_simple(name, value, level)
54
+ puts "#{" " * level}#{name}: #{value}"
55
+ end
56
+
57
+ def graph_value(name, value, level)
58
+ case value
59
+ when NilClass, String
60
+ graph_simple name, value.inspect, level
61
+ when Symbol
62
+ puts "#{" " * level}#{name}: :#{value}"
63
+ when TrueClass, FalseClass, Fixnum
64
+ graph_simple name, value, level
65
+ when Array
66
+ if value.empty?
67
+ puts "#{" " * level}#{name}: []"
68
+ else
69
+ puts "#{" " * level}#{name}: ["
70
+ nodes = []
71
+ value.each_with_index do |v,i|
72
+ if v.kind_of? @node_kind
73
+ nodes << [v, i]
74
+ else
75
+ graph_value "[#{i}] ", v, level + 2
76
+ end
77
+ end
78
+
79
+ nodes.each { |n| graph_node n[0], level + 2, n[1] }
80
+
81
+ puts "#{' ' * level}]"
82
+ end
83
+ else
84
+ graph_simple name, value.class, level
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,207 @@
1
+ # -*- encoding: us-ascii -*-
2
+
3
+ module Rubinius
4
+ module AST
5
+ class ArrayLiteral < Node
6
+ attr_accessor :body
7
+
8
+ def initialize(line, array)
9
+ @line = line
10
+ @body = array
11
+ end
12
+
13
+ def to_sexp
14
+ @body.inject([:array]) { |s, x| s << x.to_sexp }
15
+ end
16
+ end
17
+
18
+ class EmptyArray < Node
19
+ def to_sexp
20
+ [:array]
21
+ end
22
+ end
23
+
24
+ class FalseLiteral < Node
25
+ def to_sexp
26
+ [:false]
27
+ end
28
+ end
29
+
30
+ class TrueLiteral < Node
31
+ def to_sexp
32
+ [:true]
33
+ end
34
+ end
35
+
36
+ class FloatLiteral < Node
37
+ attr_accessor :value
38
+
39
+ def initialize(line, str)
40
+ @line = line
41
+ @value = str.to_f
42
+ end
43
+
44
+ def to_sexp
45
+ [:lit, @value]
46
+ end
47
+ end
48
+
49
+ class HashLiteral < Node
50
+ attr_accessor :array
51
+
52
+ def initialize(line, array)
53
+ @line = line
54
+ @array = array
55
+ end
56
+
57
+ def to_sexp
58
+ @array.inject([:hash]) { |s, x| s << x.to_sexp }
59
+ end
60
+ end
61
+
62
+ class SymbolLiteral < Node
63
+ attr_accessor :value
64
+
65
+ def initialize(line, sym)
66
+ @line = line
67
+ @value = sym
68
+ end
69
+
70
+ def to_sexp
71
+ [:lit, @value]
72
+ end
73
+ end
74
+
75
+ class NilLiteral < Node
76
+ def to_sexp
77
+ [:nil]
78
+ end
79
+ end
80
+
81
+ class NumberLiteral < Node
82
+ attr_accessor :value
83
+
84
+ def initialize(line, value)
85
+ @line = line
86
+ @value = value
87
+ end
88
+
89
+ def to_sexp
90
+ [:lit, @value]
91
+ end
92
+ end
93
+
94
+ class FixnumLiteral < NumberLiteral
95
+ def initialize(line, value)
96
+ @line = line
97
+ @value = value
98
+ end
99
+ end
100
+
101
+ class Range < Node
102
+ attr_accessor :start, :finish
103
+
104
+ def initialize(line, start, finish)
105
+ @line = line
106
+ @start = start
107
+ @finish = finish
108
+ end
109
+
110
+ def to_sexp
111
+ [:dot2, @start.to_sexp, @finish.to_sexp]
112
+ end
113
+ end
114
+
115
+ class RangeExclude < Range
116
+ def initialize(line, start, finish)
117
+ @line = line
118
+ @start = start
119
+ @finish = finish
120
+ end
121
+
122
+ def to_sexp
123
+ [:dot3, @start.to_sexp, @finish.to_sexp]
124
+ end
125
+ end
126
+
127
+ class RegexLiteral < Node
128
+ attr_accessor :source, :options
129
+
130
+ def initialize(line, str, flags)
131
+ @line = line
132
+ @source = str
133
+ @options = flags
134
+ end
135
+
136
+ def to_sexp
137
+ [:regex, @source, @options]
138
+ end
139
+ end
140
+
141
+ class StringLiteral < Node
142
+ attr_accessor :string
143
+
144
+ def initialize(line, str)
145
+ @line = line
146
+ @string = str
147
+ end
148
+
149
+ def to_sexp
150
+ [:str, @string]
151
+ end
152
+ end
153
+
154
+ class DynamicString < StringLiteral
155
+ attr_accessor :array, :options
156
+
157
+ def initialize(line, str, array)
158
+ @line = line
159
+ @string = str
160
+ @array = array
161
+ end
162
+
163
+ def sexp_name
164
+ :dstr
165
+ end
166
+
167
+ def to_sexp
168
+ @array.inject([sexp_name, @string]) { |s, x| s << x.to_sexp }
169
+ end
170
+ end
171
+
172
+ class DynamicSymbol < DynamicString
173
+ def sexp_name
174
+ :dsym
175
+ end
176
+ end
177
+
178
+ class DynamicExecuteString < DynamicString
179
+ def sexp_name
180
+ :dxstr
181
+ end
182
+ end
183
+
184
+ class DynamicRegex < DynamicString
185
+ def initialize(line, str, array, flags)
186
+ super line, str, array
187
+ @options = flags || 0
188
+ end
189
+
190
+ def sexp_name
191
+ :dregx
192
+ end
193
+ end
194
+
195
+ class DynamicOnceRegex < DynamicRegex
196
+ def sexp_name
197
+ :dregx_once
198
+ end
199
+ end
200
+
201
+ class ExecuteString < StringLiteral
202
+ def to_sexp
203
+ [:xstr, @string]
204
+ end
205
+ end
206
+ end
207
+ end