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,304 @@
1
+ node_types18 = %w[
2
+ method
3
+ fbody
4
+ cfunc
5
+ scope
6
+ block
7
+ if
8
+ case
9
+ when
10
+ opt_n
11
+ while
12
+ until
13
+ iter
14
+ for
15
+ break
16
+ next
17
+ redo
18
+ retry
19
+ begin
20
+ rescue
21
+ resbody
22
+ ensure
23
+ and
24
+ or
25
+ not
26
+ masgn
27
+ lasgn
28
+ dasgn
29
+ dasgn_curr
30
+ gasgn
31
+ iasgn
32
+ cdecl
33
+ cvasgn
34
+ cvdecl
35
+ op_asgn1
36
+ op_asgn2
37
+ op_asgn_and
38
+ op_asgn_or
39
+ call
40
+ fcall
41
+ vcall
42
+ super
43
+ zsuper
44
+ array
45
+ zarray
46
+ hash
47
+ return
48
+ yield
49
+ lvar
50
+ dvar
51
+ gvar
52
+ ivar
53
+ const
54
+ cvar
55
+ nth_ref
56
+ back_ref
57
+ match
58
+ match2
59
+ match3
60
+ lit
61
+ str
62
+ dstr
63
+ xstr
64
+ dxstr
65
+ evstr
66
+ dregx
67
+ dregx_once
68
+ args
69
+ argscat
70
+ argspush
71
+ splat
72
+ to_ary
73
+ svalue
74
+ block_arg
75
+ block_pass
76
+ defn
77
+ defs
78
+ alias
79
+ valias
80
+ undef
81
+ class
82
+ module
83
+ sclass
84
+ colon2
85
+ colon3
86
+ cref
87
+ dot2
88
+ dot3
89
+ flip2
90
+ flip3
91
+ attrset
92
+ self
93
+ nil
94
+ true
95
+ false
96
+ defined
97
+ newline
98
+ postexe
99
+ dmethod
100
+ bmethod
101
+ memo
102
+ ifunc
103
+ dsym
104
+ attrasgn
105
+ regex
106
+ fixnum
107
+ number
108
+ hexnum
109
+ binnum
110
+ octnum
111
+ float
112
+ negate
113
+ last
114
+ file
115
+ preexe
116
+ ]
117
+
118
+ node_types19 = %w[
119
+ scope
120
+ block
121
+ if
122
+ case
123
+ when
124
+ opt_n
125
+ while
126
+ until
127
+ iter
128
+ for
129
+ break
130
+ next
131
+ redo
132
+ retry
133
+ begin
134
+ rescue
135
+ resbody
136
+ ensure
137
+ and
138
+ or
139
+ masgn
140
+ lasgn
141
+ dasgn
142
+ dasgn_curr
143
+ gasgn
144
+ iasgn
145
+ iasgn2
146
+ cdecl
147
+ cvasgn
148
+ cvdecl
149
+ op_asgn1
150
+ op_asgn2
151
+ op_asgn_and
152
+ op_asgn_or
153
+ call
154
+ fcall
155
+ vcall
156
+ super
157
+ zsuper
158
+ array
159
+ zarray
160
+ values
161
+ hash
162
+ return
163
+ yield
164
+ lvar
165
+ dvar
166
+ gvar
167
+ ivar
168
+ const
169
+ cvar
170
+ nth_ref
171
+ back_ref
172
+ match
173
+ match2
174
+ match3
175
+ lit
176
+ str
177
+ dstr
178
+ xstr
179
+ dxstr
180
+ evstr
181
+ dregx
182
+ dregx_once
183
+ args
184
+ args_aux
185
+ opt_arg
186
+ postarg
187
+ argscat
188
+ argspush
189
+ splat
190
+ to_ary
191
+ block_arg
192
+ block_pass
193
+ defn
194
+ defs
195
+ alias
196
+ valias
197
+ undef
198
+ class
199
+ module
200
+ sclass
201
+ colon2
202
+ colon3
203
+ dot2
204
+ dot3
205
+ flip2
206
+ flip3
207
+ self
208
+ nil
209
+ true
210
+ false
211
+ errinfo
212
+ defined
213
+ postexe
214
+ alloca
215
+ bmethod
216
+ memo
217
+ ifunc
218
+ dsym
219
+ attrasgn
220
+ prelude
221
+ lambda
222
+ optblock
223
+ last
224
+ file
225
+ regex
226
+ number
227
+ float
228
+ encoding
229
+ preexe
230
+ ]
231
+
232
+ def write_node_types(list, version)
233
+ File.open("node_types#{version}.cpp", "wb") do |f|
234
+ f.puts <<EOF
235
+ /* This file is generated by node_types.rb. Do not edit. */
236
+
237
+ #include "node_types#{version}.hpp"
238
+
239
+ #include <stdio.h>
240
+
241
+ namespace melbourne {
242
+ namespace grammar#{version} {
243
+ static const char node_types[] = {
244
+ EOF
245
+
246
+ indexes = [0]
247
+ list.each do |type|
248
+ f.puts(" \"#{type}\\0\"")
249
+ indexes.push indexes.last + type.size + 1
250
+ end
251
+
252
+ f.puts(" };")
253
+ f.puts
254
+
255
+ f.puts(" static const unsigned short node_types_offsets[] = {")
256
+
257
+ f.puts indexes.map { |i| " #{i}" }.join(",\n")
258
+
259
+ f.puts <<EOF
260
+ };
261
+
262
+ const char *get_node_type_string(enum node_type node) {
263
+ if(node < #{list.size}) {
264
+ return node_types + node_types_offsets[node];
265
+ } else {
266
+ #define NODE_STRING_MESSAGE_LEN 20
267
+ static char msg[NODE_STRING_MESSAGE_LEN];
268
+ snprintf(msg, NODE_STRING_MESSAGE_LEN, "unknown node type: %d", node);
269
+ return msg;
270
+ }
271
+ }
272
+ }; // namespace grammar#{version}
273
+ }; // namespace melbourne
274
+ EOF
275
+ end
276
+
277
+ File.open("node_types#{version}.hpp", "wb") do |f|
278
+ f.puts <<EOF
279
+ #ifndef MEL_NODE_TYPES#{version}_HPP
280
+ #define MEL_NODE_TYPES#{version}_HPP
281
+ /* This file is generated by node_types.rb. Do not edit. */
282
+
283
+ namespace melbourne {
284
+ namespace grammar#{version} {
285
+ enum node_type {
286
+ EOF
287
+
288
+ f.puts list.map { |x| " NODE_#{x.upcase}" }.join(",\n")
289
+
290
+ f.puts <<EOF
291
+ };
292
+
293
+ const char *get_node_type_string(enum node_type nt);
294
+
295
+ }; // namespace grammar#{version}
296
+ }; // namespace melbourne
297
+
298
+ #endif
299
+ EOF
300
+ end
301
+ end
302
+
303
+ write_node_types node_types18, "18"
304
+ write_node_types node_types19, "19"
@@ -0,0 +1,255 @@
1
+ /* This file is generated by node_types.rb. Do not edit. */
2
+
3
+ #include "node_types18.hpp"
4
+
5
+ #include <stdio.h>
6
+
7
+ namespace melbourne {
8
+ namespace grammar18 {
9
+ static const char node_types[] = {
10
+ "method\0"
11
+ "fbody\0"
12
+ "cfunc\0"
13
+ "scope\0"
14
+ "block\0"
15
+ "if\0"
16
+ "case\0"
17
+ "when\0"
18
+ "opt_n\0"
19
+ "while\0"
20
+ "until\0"
21
+ "iter\0"
22
+ "for\0"
23
+ "break\0"
24
+ "next\0"
25
+ "redo\0"
26
+ "retry\0"
27
+ "begin\0"
28
+ "rescue\0"
29
+ "resbody\0"
30
+ "ensure\0"
31
+ "and\0"
32
+ "or\0"
33
+ "not\0"
34
+ "masgn\0"
35
+ "lasgn\0"
36
+ "dasgn\0"
37
+ "dasgn_curr\0"
38
+ "gasgn\0"
39
+ "iasgn\0"
40
+ "cdecl\0"
41
+ "cvasgn\0"
42
+ "cvdecl\0"
43
+ "op_asgn1\0"
44
+ "op_asgn2\0"
45
+ "op_asgn_and\0"
46
+ "op_asgn_or\0"
47
+ "call\0"
48
+ "fcall\0"
49
+ "vcall\0"
50
+ "super\0"
51
+ "zsuper\0"
52
+ "array\0"
53
+ "zarray\0"
54
+ "hash\0"
55
+ "return\0"
56
+ "yield\0"
57
+ "lvar\0"
58
+ "dvar\0"
59
+ "gvar\0"
60
+ "ivar\0"
61
+ "const\0"
62
+ "cvar\0"
63
+ "nth_ref\0"
64
+ "back_ref\0"
65
+ "match\0"
66
+ "match2\0"
67
+ "match3\0"
68
+ "lit\0"
69
+ "str\0"
70
+ "dstr\0"
71
+ "xstr\0"
72
+ "dxstr\0"
73
+ "evstr\0"
74
+ "dregx\0"
75
+ "dregx_once\0"
76
+ "args\0"
77
+ "argscat\0"
78
+ "argspush\0"
79
+ "splat\0"
80
+ "to_ary\0"
81
+ "svalue\0"
82
+ "block_arg\0"
83
+ "block_pass\0"
84
+ "defn\0"
85
+ "defs\0"
86
+ "alias\0"
87
+ "valias\0"
88
+ "undef\0"
89
+ "class\0"
90
+ "module\0"
91
+ "sclass\0"
92
+ "colon2\0"
93
+ "colon3\0"
94
+ "cref\0"
95
+ "dot2\0"
96
+ "dot3\0"
97
+ "flip2\0"
98
+ "flip3\0"
99
+ "attrset\0"
100
+ "self\0"
101
+ "nil\0"
102
+ "true\0"
103
+ "false\0"
104
+ "defined\0"
105
+ "newline\0"
106
+ "postexe\0"
107
+ "dmethod\0"
108
+ "bmethod\0"
109
+ "memo\0"
110
+ "ifunc\0"
111
+ "dsym\0"
112
+ "attrasgn\0"
113
+ "regex\0"
114
+ "fixnum\0"
115
+ "number\0"
116
+ "hexnum\0"
117
+ "binnum\0"
118
+ "octnum\0"
119
+ "float\0"
120
+ "negate\0"
121
+ "last\0"
122
+ "file\0"
123
+ "preexe\0"
124
+ };
125
+
126
+ static const unsigned short node_types_offsets[] = {
127
+ 0,
128
+ 7,
129
+ 13,
130
+ 19,
131
+ 25,
132
+ 31,
133
+ 34,
134
+ 39,
135
+ 44,
136
+ 50,
137
+ 56,
138
+ 62,
139
+ 67,
140
+ 71,
141
+ 77,
142
+ 82,
143
+ 87,
144
+ 93,
145
+ 99,
146
+ 106,
147
+ 114,
148
+ 121,
149
+ 125,
150
+ 128,
151
+ 132,
152
+ 138,
153
+ 144,
154
+ 150,
155
+ 161,
156
+ 167,
157
+ 173,
158
+ 179,
159
+ 186,
160
+ 193,
161
+ 202,
162
+ 211,
163
+ 223,
164
+ 234,
165
+ 239,
166
+ 245,
167
+ 251,
168
+ 257,
169
+ 264,
170
+ 270,
171
+ 277,
172
+ 282,
173
+ 289,
174
+ 295,
175
+ 300,
176
+ 305,
177
+ 310,
178
+ 315,
179
+ 321,
180
+ 326,
181
+ 334,
182
+ 343,
183
+ 349,
184
+ 356,
185
+ 363,
186
+ 367,
187
+ 371,
188
+ 376,
189
+ 381,
190
+ 387,
191
+ 393,
192
+ 399,
193
+ 410,
194
+ 415,
195
+ 423,
196
+ 432,
197
+ 438,
198
+ 445,
199
+ 452,
200
+ 462,
201
+ 473,
202
+ 478,
203
+ 483,
204
+ 489,
205
+ 496,
206
+ 502,
207
+ 508,
208
+ 515,
209
+ 522,
210
+ 529,
211
+ 536,
212
+ 541,
213
+ 546,
214
+ 551,
215
+ 557,
216
+ 563,
217
+ 571,
218
+ 576,
219
+ 580,
220
+ 585,
221
+ 591,
222
+ 599,
223
+ 607,
224
+ 615,
225
+ 623,
226
+ 631,
227
+ 636,
228
+ 642,
229
+ 647,
230
+ 656,
231
+ 662,
232
+ 669,
233
+ 676,
234
+ 683,
235
+ 690,
236
+ 697,
237
+ 703,
238
+ 710,
239
+ 715,
240
+ 720,
241
+ 727
242
+ };
243
+
244
+ const char *get_node_type_string(enum node_type node) {
245
+ if(node < 114) {
246
+ return node_types + node_types_offsets[node];
247
+ } else {
248
+ #define NODE_STRING_MESSAGE_LEN 20
249
+ static char msg[NODE_STRING_MESSAGE_LEN];
250
+ snprintf(msg, NODE_STRING_MESSAGE_LEN, "unknown node type: %d", node);
251
+ return msg;
252
+ }
253
+ }
254
+ }; // namespace grammar18
255
+ }; // namespace melbourne
@@ -0,0 +1,129 @@
1
+ #ifndef MEL_NODE_TYPES18_HPP
2
+ #define MEL_NODE_TYPES18_HPP
3
+ /* This file is generated by node_types.rb. Do not edit. */
4
+
5
+ namespace melbourne {
6
+ namespace grammar18 {
7
+ enum node_type {
8
+ NODE_METHOD,
9
+ NODE_FBODY,
10
+ NODE_CFUNC,
11
+ NODE_SCOPE,
12
+ NODE_BLOCK,
13
+ NODE_IF,
14
+ NODE_CASE,
15
+ NODE_WHEN,
16
+ NODE_OPT_N,
17
+ NODE_WHILE,
18
+ NODE_UNTIL,
19
+ NODE_ITER,
20
+ NODE_FOR,
21
+ NODE_BREAK,
22
+ NODE_NEXT,
23
+ NODE_REDO,
24
+ NODE_RETRY,
25
+ NODE_BEGIN,
26
+ NODE_RESCUE,
27
+ NODE_RESBODY,
28
+ NODE_ENSURE,
29
+ NODE_AND,
30
+ NODE_OR,
31
+ NODE_NOT,
32
+ NODE_MASGN,
33
+ NODE_LASGN,
34
+ NODE_DASGN,
35
+ NODE_DASGN_CURR,
36
+ NODE_GASGN,
37
+ NODE_IASGN,
38
+ NODE_CDECL,
39
+ NODE_CVASGN,
40
+ NODE_CVDECL,
41
+ NODE_OP_ASGN1,
42
+ NODE_OP_ASGN2,
43
+ NODE_OP_ASGN_AND,
44
+ NODE_OP_ASGN_OR,
45
+ NODE_CALL,
46
+ NODE_FCALL,
47
+ NODE_VCALL,
48
+ NODE_SUPER,
49
+ NODE_ZSUPER,
50
+ NODE_ARRAY,
51
+ NODE_ZARRAY,
52
+ NODE_HASH,
53
+ NODE_RETURN,
54
+ NODE_YIELD,
55
+ NODE_LVAR,
56
+ NODE_DVAR,
57
+ NODE_GVAR,
58
+ NODE_IVAR,
59
+ NODE_CONST,
60
+ NODE_CVAR,
61
+ NODE_NTH_REF,
62
+ NODE_BACK_REF,
63
+ NODE_MATCH,
64
+ NODE_MATCH2,
65
+ NODE_MATCH3,
66
+ NODE_LIT,
67
+ NODE_STR,
68
+ NODE_DSTR,
69
+ NODE_XSTR,
70
+ NODE_DXSTR,
71
+ NODE_EVSTR,
72
+ NODE_DREGX,
73
+ NODE_DREGX_ONCE,
74
+ NODE_ARGS,
75
+ NODE_ARGSCAT,
76
+ NODE_ARGSPUSH,
77
+ NODE_SPLAT,
78
+ NODE_TO_ARY,
79
+ NODE_SVALUE,
80
+ NODE_BLOCK_ARG,
81
+ NODE_BLOCK_PASS,
82
+ NODE_DEFN,
83
+ NODE_DEFS,
84
+ NODE_ALIAS,
85
+ NODE_VALIAS,
86
+ NODE_UNDEF,
87
+ NODE_CLASS,
88
+ NODE_MODULE,
89
+ NODE_SCLASS,
90
+ NODE_COLON2,
91
+ NODE_COLON3,
92
+ NODE_CREF,
93
+ NODE_DOT2,
94
+ NODE_DOT3,
95
+ NODE_FLIP2,
96
+ NODE_FLIP3,
97
+ NODE_ATTRSET,
98
+ NODE_SELF,
99
+ NODE_NIL,
100
+ NODE_TRUE,
101
+ NODE_FALSE,
102
+ NODE_DEFINED,
103
+ NODE_NEWLINE,
104
+ NODE_POSTEXE,
105
+ NODE_DMETHOD,
106
+ NODE_BMETHOD,
107
+ NODE_MEMO,
108
+ NODE_IFUNC,
109
+ NODE_DSYM,
110
+ NODE_ATTRASGN,
111
+ NODE_REGEX,
112
+ NODE_FIXNUM,
113
+ NODE_NUMBER,
114
+ NODE_HEXNUM,
115
+ NODE_BINNUM,
116
+ NODE_OCTNUM,
117
+ NODE_FLOAT,
118
+ NODE_NEGATE,
119
+ NODE_LAST,
120
+ NODE_FILE,
121
+ NODE_PREEXE
122
+ };
123
+
124
+ const char *get_node_type_string(enum node_type nt);
125
+
126
+ }; // namespace grammar18
127
+ }; // namespace melbourne
128
+
129
+ #endif