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,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