kanayago 0.1.1 → 0.3.0

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 (97) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +12 -0
  3. data/.ruby-version +1 -0
  4. data/README.md +20 -29
  5. data/Rakefile +24 -120
  6. data/ext/kanayago/extconf.rb +14 -0
  7. data/ext/kanayago/kanayago.c +554 -235
  8. data/ext/kanayago/kanayago.h +5 -0
  9. data/ext/kanayago/literal_node.c +343 -0
  10. data/ext/kanayago/literal_node.h +30 -0
  11. data/ext/kanayago/pattern_node.c +78 -0
  12. data/ext/kanayago/pattern_node.h +13 -0
  13. data/ext/kanayago/scope_node.c +34 -0
  14. data/ext/kanayago/scope_node.h +8 -0
  15. data/ext/kanayago/statement_node.c +795 -0
  16. data/ext/kanayago/statement_node.h +66 -0
  17. data/ext/kanayago/string_node.c +192 -0
  18. data/ext/kanayago/string_node.h +19 -0
  19. data/ext/kanayago/variable_node.c +72 -0
  20. data/ext/kanayago/variable_node.h +12 -0
  21. data/lib/kanayago/literal_node.rb +87 -0
  22. data/lib/kanayago/pattern_node.rb +19 -0
  23. data/lib/kanayago/statement_node.rb +222 -0
  24. data/lib/kanayago/string_node.rb +43 -0
  25. data/lib/kanayago/variable_node.rb +23 -0
  26. data/lib/kanayago/version.rb +1 -1
  27. data/lib/kanayago.rb +22 -0
  28. data/patch/3.4/copy_target.rb +78 -0
  29. data/patch/3.4/kanayago.patch +162 -0
  30. data/patch/head/copy_target.rb +84 -0
  31. data/patch/head/kanayago.patch +162 -0
  32. data/sample/minitest_generator.rb +266 -0
  33. data/sample/test_generator.rb +272 -0
  34. data/script/setup_parser.rb +136 -0
  35. data/typeprof.conf.json +9 -0
  36. metadata +30 -64
  37. data/ext/kanayago/ccan/check_type/check_type.h +0 -63
  38. data/ext/kanayago/ccan/container_of/container_of.h +0 -142
  39. data/ext/kanayago/ccan/list/list.h +0 -791
  40. data/ext/kanayago/ccan/str/str.h +0 -17
  41. data/ext/kanayago/constant.h +0 -53
  42. data/ext/kanayago/id.h +0 -347
  43. data/ext/kanayago/id_table.h +0 -39
  44. data/ext/kanayago/internal/array.h +0 -151
  45. data/ext/kanayago/internal/basic_operators.h +0 -64
  46. data/ext/kanayago/internal/bignum.h +0 -244
  47. data/ext/kanayago/internal/bits.h +0 -568
  48. data/ext/kanayago/internal/compile.h +0 -34
  49. data/ext/kanayago/internal/compilers.h +0 -107
  50. data/ext/kanayago/internal/complex.h +0 -29
  51. data/ext/kanayago/internal/encoding.h +0 -36
  52. data/ext/kanayago/internal/error.h +0 -218
  53. data/ext/kanayago/internal/fixnum.h +0 -184
  54. data/ext/kanayago/internal/gc.h +0 -322
  55. data/ext/kanayago/internal/hash.h +0 -191
  56. data/ext/kanayago/internal/imemo.h +0 -261
  57. data/ext/kanayago/internal/io.h +0 -140
  58. data/ext/kanayago/internal/numeric.h +0 -274
  59. data/ext/kanayago/internal/parse.h +0 -117
  60. data/ext/kanayago/internal/rational.h +0 -71
  61. data/ext/kanayago/internal/re.h +0 -28
  62. data/ext/kanayago/internal/ruby_parser.h +0 -125
  63. data/ext/kanayago/internal/sanitizers.h +0 -297
  64. data/ext/kanayago/internal/serial.h +0 -23
  65. data/ext/kanayago/internal/static_assert.h +0 -16
  66. data/ext/kanayago/internal/string.h +0 -186
  67. data/ext/kanayago/internal/symbol.h +0 -45
  68. data/ext/kanayago/internal/thread.h +0 -79
  69. data/ext/kanayago/internal/variable.h +0 -72
  70. data/ext/kanayago/internal/vm.h +0 -137
  71. data/ext/kanayago/internal/warnings.h +0 -16
  72. data/ext/kanayago/internal.h +0 -108
  73. data/ext/kanayago/lex.c +0 -302
  74. data/ext/kanayago/method.h +0 -255
  75. data/ext/kanayago/node.c +0 -440
  76. data/ext/kanayago/node.h +0 -111
  77. data/ext/kanayago/node_name.inc +0 -224
  78. data/ext/kanayago/parse.c +0 -26931
  79. data/ext/kanayago/parse.h +0 -244
  80. data/ext/kanayago/parse.tmp.y +0 -16145
  81. data/ext/kanayago/parser_bits.h +0 -564
  82. data/ext/kanayago/parser_node.h +0 -32
  83. data/ext/kanayago/parser_st.c +0 -164
  84. data/ext/kanayago/parser_st.h +0 -162
  85. data/ext/kanayago/parser_value.h +0 -106
  86. data/ext/kanayago/probes.h +0 -4
  87. data/ext/kanayago/ruby_assert.h +0 -14
  88. data/ext/kanayago/ruby_atomic.h +0 -23
  89. data/ext/kanayago/ruby_parser.c +0 -1165
  90. data/ext/kanayago/rubyparser.h +0 -1391
  91. data/ext/kanayago/shape.h +0 -234
  92. data/ext/kanayago/st.c +0 -2339
  93. data/ext/kanayago/symbol.h +0 -123
  94. data/ext/kanayago/thread_pthread.h +0 -168
  95. data/ext/kanayago/universal_parser.c +0 -230
  96. data/ext/kanayago/vm_core.h +0 -2215
  97. data/ext/kanayago/vm_opts.h +0 -67
@@ -0,0 +1,795 @@
1
+ #include "statement_node.h"
2
+ #include "internal/ruby_parser.h"
3
+ #include "kanayago.h"
4
+ #include "rubyparser.h"
5
+
6
+ VALUE rb_cIfStatementNode;
7
+ VALUE rb_cUnlessStatementNode;
8
+ VALUE rb_cOrNode;
9
+ VALUE rb_cAndNode;
10
+ VALUE rb_cWhileNode;
11
+ VALUE rb_cUntilNode;
12
+ VALUE rb_cForNode;
13
+ VALUE rb_cAliasNode;
14
+ VALUE rb_cValiasNode;
15
+ VALUE rb_cUndefNode;
16
+ VALUE rb_cReturnNode;
17
+ VALUE rb_cGlobalAssignmentNode;
18
+ VALUE rb_cClassVariableAssignmentNode;
19
+ VALUE rb_cInstanceAssignmentNode;
20
+ VALUE rb_cLocalAssignmentNode;
21
+ VALUE rb_cSingletonDefinitionNode;
22
+ VALUE rb_cSingletonClassNode;
23
+ VALUE rb_cAttributeAssignmentNode;
24
+ VALUE rb_cSafeCallNode;
25
+ VALUE rb_cSuperNode;
26
+ VALUE rb_cZeroSuperNode;
27
+ VALUE rb_cCaseNode;
28
+ VALUE rb_cCase2Node;
29
+ VALUE rb_cCase3Node;
30
+ VALUE rb_cWhenNode;
31
+ VALUE rb_cRetryNode;
32
+ VALUE rb_cRedoNode;
33
+ VALUE rb_cBreakNode;
34
+ VALUE rb_cNextNode;
35
+ VALUE rb_cDefinedNode;
36
+ VALUE rb_cIterNode;
37
+ VALUE rb_cEnsureNode;
38
+ VALUE rb_cRescueNode;
39
+ VALUE rb_cRescueBodyNode;
40
+ VALUE rb_cOperatorAssignment1Node;
41
+ VALUE rb_cOperatorAssignment2Node;
42
+ VALUE rb_cOperatorAssignmentAndNode;
43
+ VALUE rb_cOperatorAssignmentOrNode;
44
+ VALUE rb_cOperatorConstantDeclarationNode;
45
+ VALUE rb_cYieldNode;
46
+ VALUE rb_cLambdaNode;
47
+ VALUE rb_cSplatNode;
48
+ VALUE rb_cBlockPassNode;
49
+ VALUE rb_cArgsAuxNode;
50
+ VALUE rb_cOptArgNode;
51
+ VALUE rb_cKwArgNode;
52
+ VALUE rb_cPostArgNode;
53
+ VALUE rb_cArgsCatNode;
54
+ VALUE rb_cArgsPushNode;
55
+ VALUE rb_cForMasgnNode;
56
+ VALUE rb_cMasgnNode;
57
+ VALUE rb_cDasgnNode;
58
+ VALUE rb_cOnceNode;
59
+ VALUE rb_cErrinfoNode;
60
+ VALUE rb_cPostexeNode;
61
+ VALUE rb_cErrorNode;
62
+
63
+ VALUE
64
+ if_statement_node_new(const NODE *node)
65
+ {
66
+ VALUE obj = rb_class_new_instance(0, 0, rb_cIfStatementNode);
67
+
68
+ rb_ivar_set(obj, rb_intern("@cond"), ast_to_node_instance(RNODE_IF(node)->nd_cond));
69
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_IF(node)->nd_body));
70
+ rb_ivar_set(obj, rb_intern("@else"), ast_to_node_instance(RNODE_IF(node)->nd_else));
71
+
72
+ return obj;
73
+ }
74
+
75
+ VALUE
76
+ unless_statement_node_new(const NODE *node)
77
+ {
78
+ VALUE obj = rb_class_new_instance(0, 0, rb_cUnlessStatementNode);
79
+
80
+ rb_ivar_set(obj, rb_intern("@cond"), ast_to_node_instance(RNODE_UNLESS(node)->nd_cond));
81
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_UNLESS(node)->nd_body));
82
+ rb_ivar_set(obj, rb_intern("@else"), ast_to_node_instance(RNODE_UNLESS(node)->nd_else));
83
+
84
+ return obj;
85
+ }
86
+
87
+ VALUE
88
+ or_node_new(const NODE *node)
89
+ {
90
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOrNode);
91
+
92
+ rb_ivar_set(obj, rb_intern("@first"), ast_to_node_instance(RNODE_OR(node)->nd_1st));
93
+ rb_ivar_set(obj, rb_intern("@second"), ast_to_node_instance(RNODE_OR(node)->nd_2nd));
94
+
95
+ return obj;
96
+ }
97
+
98
+ VALUE
99
+ and_node_new(const NODE *node)
100
+ {
101
+ VALUE obj = rb_class_new_instance(0, 0, rb_cAndNode);
102
+
103
+ rb_ivar_set(obj, rb_intern("@first"), ast_to_node_instance(RNODE_AND(node)->nd_1st));
104
+ rb_ivar_set(obj, rb_intern("@second"), ast_to_node_instance(RNODE_AND(node)->nd_2nd));
105
+
106
+ return obj;
107
+ }
108
+
109
+ VALUE
110
+ while_node_new(const NODE *node)
111
+ {
112
+ VALUE obj = rb_class_new_instance(0, 0, rb_cWhileNode);
113
+
114
+ rb_ivar_set(obj, rb_intern("@state"), LONG2FIX(RNODE_WHILE(node)->nd_state));
115
+ rb_ivar_set(obj, rb_intern("@cond"), ast_to_node_instance(RNODE_WHILE(node)->nd_cond));
116
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_WHILE(node)->nd_body));
117
+
118
+ return obj;
119
+ }
120
+
121
+ VALUE
122
+ until_node_new(const NODE *node)
123
+ {
124
+ VALUE obj = rb_class_new_instance(0, 0, rb_cUntilNode);
125
+
126
+ rb_ivar_set(obj, rb_intern("@state"), LONG2FIX(RNODE_UNTIL(node)->nd_state));
127
+ rb_ivar_set(obj, rb_intern("@cond"), ast_to_node_instance(RNODE_UNTIL(node)->nd_cond));
128
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_UNTIL(node)->nd_body));
129
+
130
+ return obj;
131
+ }
132
+
133
+ VALUE
134
+ for_node_new(const NODE *node)
135
+ {
136
+ VALUE obj = rb_class_new_instance(0, 0, rb_cForNode);
137
+
138
+ rb_ivar_set(obj, rb_intern("@iter"), ast_to_node_instance(RNODE_FOR(node)->nd_iter));
139
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_FOR(node)->nd_body));
140
+
141
+ return obj;
142
+ }
143
+
144
+ VALUE
145
+ alias_node_new(const NODE *node)
146
+ {
147
+ VALUE obj = rb_class_new_instance(0, 0, rb_cAliasNode);
148
+
149
+ rb_ivar_set(obj, rb_intern("@first"), ast_to_node_instance(RNODE_ALIAS(node)->nd_1st));
150
+ rb_ivar_set(obj, rb_intern("@second"), ast_to_node_instance(RNODE_ALIAS(node)->nd_2nd));
151
+
152
+ return obj;
153
+ }
154
+
155
+ VALUE
156
+ valias_node_new(const NODE *node)
157
+ {
158
+ VALUE obj = rb_class_new_instance(0, 0, rb_cValiasNode);
159
+
160
+ rb_ivar_set(obj, rb_intern("@alias"), ID2SYM(RNODE_VALIAS(node)->nd_alias));
161
+ rb_ivar_set(obj, rb_intern("@original"), ID2SYM(RNODE_VALIAS(node)->nd_orig));
162
+
163
+ return obj;
164
+ }
165
+
166
+ VALUE
167
+ undef_node_new(const NODE *node)
168
+ {
169
+ VALUE obj = rb_class_new_instance(0, 0, rb_cUndefNode);
170
+ VALUE undefs = rb_ary_new();
171
+
172
+ rb_parser_ary_t *nd_undefs = RNODE_UNDEF(node)->nd_undefs;
173
+
174
+ for (int i = 0; i < nd_undefs->len; i++) {
175
+ rb_ary_push(undefs, ast_to_node_instance((const NODE *)(nd_undefs->data[i])));
176
+ }
177
+
178
+ rb_ivar_set(obj, rb_intern("@undefs"), undefs);
179
+
180
+ return obj;
181
+ }
182
+
183
+ VALUE
184
+ return_node_new(const NODE *node)
185
+ {
186
+ VALUE obj = rb_class_new_instance(0, 0, rb_cReturnNode);
187
+
188
+ rb_ivar_set(obj, rb_intern("@statements"), ast_to_node_instance(RNODE_RETURN(node)->nd_stts));
189
+
190
+ return obj;
191
+ }
192
+
193
+ VALUE
194
+ global_assignment_node_new(const NODE *node)
195
+ {
196
+ VALUE obj = rb_class_new_instance(0, 0, rb_cGlobalAssignmentNode);
197
+
198
+ rb_ivar_set(obj, rb_intern("@id"), ID2SYM(RNODE_GASGN(node)->nd_vid));
199
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_GASGN(node)->nd_value));
200
+
201
+ return obj;
202
+ }
203
+
204
+ VALUE
205
+ class_variable_assignment_node_new(const NODE *node)
206
+ {
207
+ VALUE obj = rb_class_new_instance(0, 0, rb_cClassVariableAssignmentNode);
208
+
209
+ rb_ivar_set(obj, rb_intern("@id"), ID2SYM(RNODE_IASGN(node)->nd_vid));
210
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_IASGN(node)->nd_value));
211
+
212
+ return obj;
213
+ }
214
+
215
+ VALUE
216
+ instance_assignment_node_new(const NODE *node)
217
+ {
218
+ VALUE obj = rb_class_new_instance(0, 0, rb_cInstanceAssignmentNode);
219
+
220
+ rb_ivar_set(obj, rb_intern("@id"), ID2SYM(RNODE_IASGN(node)->nd_vid));
221
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_IASGN(node)->nd_value));
222
+
223
+ return obj;
224
+ }
225
+
226
+ VALUE
227
+ local_assignment_node_new(const NODE *node)
228
+ {
229
+ VALUE obj = rb_class_new_instance(0, 0, rb_cLocalAssignmentNode);
230
+
231
+ rb_ivar_set(obj, rb_intern("@id"), ID2SYM(RNODE_LASGN(node)->nd_vid));
232
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_LASGN(node)->nd_value));
233
+
234
+ return obj;
235
+ }
236
+
237
+ VALUE
238
+ singleton_definition_node_new(const NODE *node)
239
+ {
240
+ VALUE obj = rb_class_new_instance(0, 0, rb_cSingletonDefinitionNode);
241
+
242
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_DEFS(node)->nd_recv));
243
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_DEFS(node)->nd_mid));
244
+ rb_ivar_set(obj, rb_intern("@defn"), ast_to_node_instance(RNODE_DEFS(node)->nd_defn));
245
+
246
+ return obj;
247
+ }
248
+
249
+ VALUE
250
+ singleton_class_node_new(const NODE *node)
251
+ {
252
+ VALUE obj = rb_class_new_instance(0, 0, rb_cSingletonClassNode);
253
+
254
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_SCLASS(node)->nd_recv));
255
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_SCLASS(node)->nd_body));
256
+
257
+ return obj;
258
+ }
259
+
260
+ VALUE
261
+ attribute_assignment_node_new(const NODE *node)
262
+ {
263
+ VALUE obj = rb_class_new_instance(0, 0, rb_cAttributeAssignmentNode);
264
+
265
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_ATTRASGN(node)->nd_recv));
266
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_ATTRASGN(node)->nd_mid));
267
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_ATTRASGN(node)->nd_args));
268
+
269
+ return obj;
270
+ }
271
+
272
+ VALUE
273
+ safe_call_node_new(const NODE *node)
274
+ {
275
+ VALUE obj = rb_class_new_instance(0, 0, rb_cSafeCallNode);
276
+
277
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_QCALL(node)->nd_recv));
278
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_QCALL(node)->nd_mid));
279
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_QCALL(node)->nd_args));
280
+
281
+ return obj;
282
+ }
283
+
284
+ VALUE
285
+ super_node_new(const NODE *node)
286
+ {
287
+ VALUE obj = rb_class_new_instance(0, 0, rb_cSuperNode);
288
+
289
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_SUPER(node)->nd_args));
290
+
291
+ return obj;
292
+ }
293
+
294
+ VALUE
295
+ zero_super_node_new(const NODE *node)
296
+ {
297
+ VALUE obj = rb_class_new_instance(0, 0, rb_cZeroSuperNode);
298
+
299
+ return obj;
300
+ }
301
+
302
+ VALUE
303
+ case_node_new(const NODE *node)
304
+ {
305
+ VALUE obj = rb_class_new_instance(0, 0, rb_cCaseNode);
306
+
307
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_CASE(node)->nd_head));
308
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_CASE(node)->nd_body));
309
+
310
+ return obj;
311
+ }
312
+
313
+ VALUE
314
+ case2_node_new(const NODE *node)
315
+ {
316
+ VALUE obj = rb_class_new_instance(0, 0, rb_cCase2Node);
317
+
318
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_CASE2(node)->nd_body));
319
+
320
+ return obj;
321
+ }
322
+
323
+ VALUE
324
+ case3_node_new(const NODE *node)
325
+ {
326
+ VALUE obj = rb_class_new_instance(0, 0, rb_cCase3Node);
327
+
328
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_CASE3(node)->nd_head));
329
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_CASE3(node)->nd_body));
330
+
331
+ return obj;
332
+ }
333
+
334
+ VALUE
335
+ when_node_new(const NODE *node)
336
+ {
337
+ VALUE obj = rb_class_new_instance(0, 0, rb_cWhenNode);
338
+
339
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_WHEN(node)->nd_head));
340
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_WHEN(node)->nd_body));
341
+ rb_ivar_set(obj, rb_intern("@next"), ast_to_node_instance(RNODE_WHEN(node)->nd_next));
342
+
343
+ return obj;
344
+ }
345
+
346
+ VALUE
347
+ retry_node_new(const NODE *node)
348
+ {
349
+ VALUE obj = rb_class_new_instance(0, 0, rb_cRetryNode);
350
+
351
+ return obj;
352
+ }
353
+
354
+ VALUE
355
+ redo_node_new(const NODE *node)
356
+ {
357
+ VALUE obj = rb_class_new_instance(0, 0, rb_cRedoNode);
358
+
359
+ return obj;
360
+ }
361
+
362
+ VALUE
363
+ break_node_new(const NODE *node)
364
+ {
365
+ VALUE obj = rb_class_new_instance(0, 0, rb_cBreakNode);
366
+
367
+ rb_ivar_set(obj, rb_intern("@statements"),
368
+ ast_to_node_instance(RNODE_BREAK(node)->nd_stts));
369
+
370
+ return obj;
371
+ }
372
+
373
+ VALUE
374
+ next_node_new(const NODE *node)
375
+ {
376
+ VALUE obj = rb_class_new_instance(0, 0, rb_cNextNode);
377
+
378
+ rb_ivar_set(obj, rb_intern("@statements"),
379
+ ast_to_node_instance(RNODE_NEXT(node)->nd_stts));
380
+
381
+ return obj;
382
+ }
383
+
384
+ VALUE
385
+ defined_node_new(const NODE *node)
386
+ {
387
+ VALUE obj = rb_class_new_instance(0, 0, rb_cDefinedNode);
388
+
389
+ rb_ivar_set(obj, rb_intern("@head"),
390
+ ast_to_node_instance(RNODE_DEFINED(node)->nd_head));
391
+
392
+ return obj;
393
+ }
394
+
395
+ VALUE
396
+ iter_node_new(const NODE *node)
397
+ {
398
+ VALUE obj = rb_class_new_instance(0, 0, rb_cIterNode);
399
+
400
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_ITER(node)->nd_body));
401
+ rb_ivar_set(obj, rb_intern("@iter"), ast_to_node_instance(RNODE_ITER(node)->nd_iter));
402
+
403
+ return obj;
404
+ }
405
+
406
+ VALUE
407
+ ensure_node_new(const NODE *node)
408
+ {
409
+ VALUE obj = rb_class_new_instance(0, 0, rb_cEnsureNode);
410
+
411
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_ENSURE(node)->nd_head));
412
+ rb_ivar_set(obj, rb_intern("@ensr"), ast_to_node_instance(RNODE_ENSURE(node)->nd_ensr));
413
+
414
+ return obj;
415
+ }
416
+
417
+ VALUE
418
+ rescue_node_new(const NODE *node)
419
+ {
420
+ VALUE obj = rb_class_new_instance(0, 0, rb_cRescueNode);
421
+
422
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_RESCUE(node)->nd_head));
423
+ rb_ivar_set(obj, rb_intern("@resq"), ast_to_node_instance(RNODE_RESCUE(node)->nd_resq));
424
+ rb_ivar_set(obj, rb_intern("@else"), ast_to_node_instance(RNODE_RESCUE(node)->nd_else));
425
+
426
+ return obj;
427
+ }
428
+
429
+ VALUE
430
+ resbody_node_new(const NODE *node)
431
+ {
432
+ VALUE obj = rb_class_new_instance(0, 0, rb_cRescueBodyNode);
433
+
434
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_RESBODY(node)->nd_args));
435
+ rb_ivar_set(obj, rb_intern("@exc_var"), ast_to_node_instance(RNODE_RESBODY(node)->nd_exc_var));
436
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_RESBODY(node)->nd_body));
437
+ rb_ivar_set(obj, rb_intern("@next"), ast_to_node_instance(RNODE_RESBODY(node)->nd_next));
438
+
439
+ return obj;
440
+ }
441
+
442
+ VALUE
443
+ operator_assignment1_node_new(const NODE *node)
444
+ {
445
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOperatorAssignment1Node);
446
+
447
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_OP_ASGN1(node)->nd_recv));
448
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_OP_ASGN1(node)->nd_mid));
449
+ rb_ivar_set(obj, rb_intern("@index"), ast_to_node_instance(RNODE_OP_ASGN1(node)->nd_index));
450
+ rb_ivar_set(obj, rb_intern("@rvalue"), ast_to_node_instance(RNODE_OP_ASGN1(node)->nd_rvalue));
451
+
452
+ return obj;
453
+ }
454
+
455
+ VALUE
456
+ operator_assignment2_node_new(const NODE *node)
457
+ {
458
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOperatorAssignment2Node);
459
+
460
+ rb_ivar_set(obj, rb_intern("@recv"), ast_to_node_instance(RNODE_OP_ASGN2(node)->nd_recv));
461
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_OP_ASGN2(node)->nd_value));
462
+ rb_ivar_set(obj, rb_intern("@vid"), ID2SYM(RNODE_OP_ASGN2(node)->nd_vid));
463
+ rb_ivar_set(obj, rb_intern("@mid"), ID2SYM(RNODE_OP_ASGN2(node)->nd_mid));
464
+
465
+ return obj;
466
+ }
467
+
468
+ VALUE
469
+ operator_assignment_and_node_new(const NODE *node)
470
+ {
471
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOperatorAssignmentAndNode);
472
+
473
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_OP_ASGN_AND(node)->nd_head));
474
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_OP_ASGN_AND(node)->nd_value));
475
+
476
+ return obj;
477
+ }
478
+
479
+ VALUE
480
+ operator_assignment_or_node_new(const NODE *node)
481
+ {
482
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOperatorAssignmentOrNode);
483
+
484
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_OP_ASGN_OR(node)->nd_head));
485
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_OP_ASGN_OR(node)->nd_value));
486
+
487
+ return obj;
488
+ }
489
+
490
+ VALUE
491
+ operator_constant_declaration_node_new(const NODE *node)
492
+ {
493
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOperatorConstantDeclarationNode);
494
+
495
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_OP_CDECL(node)->nd_head));
496
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_OP_CDECL(node)->nd_value));
497
+ rb_ivar_set(obj, rb_intern("@aid"), ID2SYM(RNODE_OP_CDECL(node)->nd_aid));
498
+ rb_ivar_set(obj, rb_intern("@shareability"), INT2NUM(RNODE_OP_CDECL(node)->shareability));
499
+
500
+ return obj;
501
+ }
502
+
503
+ VALUE
504
+ yield_node_new(const NODE *node)
505
+ {
506
+ VALUE obj = rb_class_new_instance(0, 0, rb_cYieldNode);
507
+
508
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_YIELD(node)->nd_head));
509
+
510
+ return obj;
511
+ }
512
+
513
+ VALUE
514
+ lambda_node_new(const NODE *node)
515
+ {
516
+ VALUE obj = rb_class_new_instance(0, 0, rb_cLambdaNode);
517
+
518
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_LAMBDA(node)->nd_body));
519
+
520
+ return obj;
521
+ }
522
+
523
+ VALUE
524
+ splat_node_new(const NODE *node)
525
+ {
526
+ VALUE obj = rb_class_new_instance(0, 0, rb_cSplatNode);
527
+
528
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_SPLAT(node)->nd_head));
529
+
530
+ return obj;
531
+ }
532
+
533
+ VALUE
534
+ block_pass_node_new(const NODE *node)
535
+ {
536
+ VALUE obj = rb_class_new_instance(0, 0, rb_cBlockPassNode);
537
+
538
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_BLOCK_PASS(node)->nd_head));
539
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_BLOCK_PASS(node)->nd_body));
540
+ rb_ivar_set(obj, rb_intern("@forwarding"), RNODE_BLOCK_PASS(node)->forwarding ? Qtrue : Qfalse);
541
+
542
+ return obj;
543
+ }
544
+
545
+ VALUE
546
+ args_aux_node_new(const NODE *node)
547
+ {
548
+ VALUE obj = rb_class_new_instance(0, 0, rb_cArgsAuxNode);
549
+
550
+ rb_ivar_set(obj, rb_intern("@pid"), ID2SYM(RNODE_ARGS_AUX(node)->nd_pid));
551
+ rb_ivar_set(obj, rb_intern("@plen"), INT2NUM(RNODE_ARGS_AUX(node)->nd_plen));
552
+ rb_ivar_set(obj, rb_intern("@next"), ast_to_node_instance(RNODE_ARGS_AUX(node)->nd_next));
553
+
554
+ return obj;
555
+ }
556
+
557
+ VALUE
558
+ opt_arg_node_new(const NODE *node)
559
+ {
560
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOptArgNode);
561
+
562
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_OPT_ARG(node)->nd_body));
563
+ rb_ivar_set(obj, rb_intern("@next"), ast_to_node_instance((NODE *)RNODE_OPT_ARG(node)->nd_next));
564
+
565
+ return obj;
566
+ }
567
+
568
+ VALUE
569
+ kw_arg_node_new(const NODE *node)
570
+ {
571
+ VALUE obj = rb_class_new_instance(0, 0, rb_cKwArgNode);
572
+
573
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_KW_ARG(node)->nd_body));
574
+ rb_ivar_set(obj, rb_intern("@next"), ast_to_node_instance((NODE *)RNODE_KW_ARG(node)->nd_next));
575
+
576
+ return obj;
577
+ }
578
+
579
+ VALUE
580
+ post_arg_node_new(const NODE *node)
581
+ {
582
+ VALUE obj = rb_class_new_instance(0, 0, rb_cPostArgNode);
583
+
584
+ rb_ivar_set(obj, rb_intern("@first"), ast_to_node_instance(RNODE_POSTARG(node)->nd_1st));
585
+ rb_ivar_set(obj, rb_intern("@second"), ast_to_node_instance(RNODE_POSTARG(node)->nd_2nd));
586
+
587
+ return obj;
588
+ }
589
+
590
+ VALUE
591
+ args_cat_node_new(const NODE *node)
592
+ {
593
+ VALUE obj = rb_class_new_instance(0, 0, rb_cArgsCatNode);
594
+
595
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_ARGSCAT(node)->nd_head));
596
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_ARGSCAT(node)->nd_body));
597
+
598
+ return obj;
599
+ }
600
+
601
+ VALUE
602
+ args_push_node_new(const NODE *node)
603
+ {
604
+ VALUE obj = rb_class_new_instance(0, 0, rb_cArgsPushNode);
605
+
606
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_ARGSPUSH(node)->nd_head));
607
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_ARGSPUSH(node)->nd_body));
608
+
609
+ return obj;
610
+ }
611
+
612
+ VALUE
613
+ for_masgn_node_new(const NODE *node)
614
+ {
615
+ VALUE obj = rb_class_new_instance(0, 0, rb_cForMasgnNode);
616
+
617
+ rb_ivar_set(obj, rb_intern("@var"), ast_to_node_instance(RNODE_FOR_MASGN(node)->nd_var));
618
+
619
+ return obj;
620
+ }
621
+
622
+ VALUE
623
+ masgn_node_new(const NODE *node)
624
+ {
625
+ VALUE obj = rb_class_new_instance(0, 0, rb_cMasgnNode);
626
+
627
+ rb_ivar_set(obj, rb_intern("@head"), ast_to_node_instance(RNODE_MASGN(node)->nd_head));
628
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_MASGN(node)->nd_value));
629
+ rb_ivar_set(obj, rb_intern("@args"), ast_to_node_instance(RNODE_MASGN(node)->nd_args));
630
+
631
+ return obj;
632
+ }
633
+
634
+ VALUE
635
+ dasgn_node_new(const NODE *node)
636
+ {
637
+ VALUE obj = rb_class_new_instance(0, 0, rb_cDasgnNode);
638
+
639
+ rb_ivar_set(obj, rb_intern("@vid"), ID2SYM(RNODE_DASGN(node)->nd_vid));
640
+ rb_ivar_set(obj, rb_intern("@value"), ast_to_node_instance(RNODE_DASGN(node)->nd_value));
641
+
642
+ return obj;
643
+ }
644
+
645
+ VALUE
646
+ once_node_new(const NODE *node)
647
+ {
648
+ VALUE obj = rb_class_new_instance(0, 0, rb_cOnceNode);
649
+
650
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_ONCE(node)->nd_body));
651
+
652
+ return obj;
653
+ }
654
+
655
+ VALUE
656
+ errinfo_node_new(const NODE *node)
657
+ {
658
+ VALUE obj = rb_class_new_instance(0, 0, rb_cErrinfoNode);
659
+
660
+ return obj;
661
+ }
662
+
663
+ VALUE
664
+ postexe_node_new(const NODE *node)
665
+ {
666
+ VALUE obj = rb_class_new_instance(0, 0, rb_cPostexeNode);
667
+
668
+ rb_ivar_set(obj, rb_intern("@body"), ast_to_node_instance(RNODE_POSTEXE(node)->nd_body));
669
+
670
+ return obj;
671
+ }
672
+
673
+ VALUE
674
+ error_node_new(const NODE *node)
675
+ {
676
+ VALUE obj = rb_class_new_instance(0, 0, rb_cErrorNode);
677
+
678
+ return obj;
679
+ }
680
+
681
+ void
682
+ Init_StatementNode(VALUE module)
683
+ {
684
+ rb_cIfStatementNode = rb_define_class_under(module, "IfStatementNode", rb_cObject);
685
+
686
+ rb_cUnlessStatementNode = rb_define_class_under(module, "UnlessStatementNode", rb_cObject);
687
+
688
+ rb_cOrNode = rb_define_class_under(module, "OrNode", rb_cObject);
689
+
690
+ rb_cAndNode = rb_define_class_under(module, "AndNode", rb_cObject);
691
+
692
+ rb_cWhileNode = rb_define_class_under(module, "WhileNode", rb_cObject);
693
+
694
+ rb_cUntilNode = rb_define_class_under(module, "UntilNode", rb_cObject);
695
+
696
+ rb_cForNode = rb_define_class_under(module, "ForNode", rb_cObject);
697
+
698
+ rb_cAliasNode = rb_define_class_under(module, "AliasNode", rb_cObject);
699
+
700
+ rb_cValiasNode = rb_define_class_under(module, "ValiasNode", rb_cObject);
701
+
702
+ rb_cUndefNode = rb_define_class_under(module, "UndefNode", rb_cObject);
703
+
704
+ rb_cReturnNode = rb_define_class_under(module, "ReturnNode", rb_cObject);
705
+
706
+ rb_cGlobalAssignmentNode = rb_define_class_under(module, "GlobalAssignmentNode", rb_cObject);
707
+
708
+ rb_cClassVariableAssignmentNode = rb_define_class_under(module, "ClassVariableAssignmentNode", rb_cObject);
709
+
710
+ rb_cInstanceAssignmentNode = rb_define_class_under(module, "InstanceAssignmentNode", rb_cObject);
711
+
712
+ rb_cLocalAssignmentNode = rb_define_class_under(module, "LocalAssignmentNode", rb_cObject);
713
+
714
+ rb_cSingletonDefinitionNode = rb_define_class_under(module, "SingletonDefinitionNode", rb_cObject);
715
+
716
+ rb_cSingletonClassNode = rb_define_class_under(module, "SingletonClassNode", rb_cObject);
717
+
718
+ rb_cAttributeAssignmentNode = rb_define_class_under(module, "AttributeAssignmentNode", rb_cObject);
719
+
720
+ rb_cSafeCallNode = rb_define_class_under(module, "SafeCallNode", rb_cObject);
721
+
722
+ rb_cSuperNode = rb_define_class_under(module, "SuperNode", rb_cObject);
723
+
724
+ rb_cZeroSuperNode = rb_define_class_under(module, "ZeroSuperNode", rb_cObject);
725
+
726
+ rb_cCaseNode = rb_define_class_under(module, "CaseNode", rb_cObject);
727
+
728
+ rb_cCase2Node = rb_define_class_under(module, "Case2Node", rb_cObject);
729
+
730
+ rb_cCase3Node = rb_define_class_under(module, "Case3Node", rb_cObject);
731
+
732
+ rb_cWhenNode = rb_define_class_under(module, "WhenNode", rb_cObject);
733
+
734
+ rb_cRetryNode = rb_define_class_under(module, "RetryNode", rb_cObject);
735
+
736
+ rb_cRedoNode = rb_define_class_under(module, "RedoNode", rb_cObject);
737
+
738
+ rb_cBreakNode = rb_define_class_under(module, "BreakNode", rb_cObject);
739
+
740
+ rb_cNextNode = rb_define_class_under(module, "NextNode", rb_cObject);
741
+
742
+ rb_cDefinedNode = rb_define_class_under(module, "DefinedNode", rb_cObject);
743
+
744
+ rb_cIterNode = rb_define_class_under(module, "IterNode", rb_cObject);
745
+
746
+ rb_cEnsureNode = rb_define_class_under(module, "EnsureNode", rb_cObject);
747
+
748
+ rb_cRescueNode = rb_define_class_under(module, "RescueNode", rb_cObject);
749
+
750
+ rb_cRescueBodyNode = rb_define_class_under(module, "RescueBodyNode", rb_cObject);
751
+
752
+ rb_cOperatorAssignment1Node = rb_define_class_under(module, "OperatorAssignment1Node", rb_cObject);
753
+
754
+ rb_cOperatorAssignment2Node = rb_define_class_under(module, "OperatorAssignment2Node", rb_cObject);
755
+
756
+ rb_cOperatorAssignmentAndNode = rb_define_class_under(module, "OperatorAssignmentAndNode", rb_cObject);
757
+
758
+ rb_cOperatorAssignmentOrNode = rb_define_class_under(module, "OperatorAssignmentOrNode", rb_cObject);
759
+
760
+ rb_cOperatorConstantDeclarationNode = rb_define_class_under(module, "OperatorConstantDeclarationNode", rb_cObject);
761
+
762
+ rb_cYieldNode = rb_define_class_under(module, "YieldNode", rb_cObject);
763
+
764
+ rb_cLambdaNode = rb_define_class_under(module, "LambdaNode", rb_cObject);
765
+
766
+ rb_cSplatNode = rb_define_class_under(module, "SplatNode", rb_cObject);
767
+
768
+ rb_cBlockPassNode = rb_define_class_under(module, "BlockPassNode", rb_cObject);
769
+
770
+ rb_cArgsAuxNode = rb_define_class_under(module, "ArgsAuxNode", rb_cObject);
771
+
772
+ rb_cOptArgNode = rb_define_class_under(module, "OptArgNode", rb_cObject);
773
+
774
+ rb_cKwArgNode = rb_define_class_under(module, "KwArgNode", rb_cObject);
775
+
776
+ rb_cPostArgNode = rb_define_class_under(module, "PostArgNode", rb_cObject);
777
+
778
+ rb_cArgsCatNode = rb_define_class_under(module, "ArgsCatNode", rb_cObject);
779
+
780
+ rb_cArgsPushNode = rb_define_class_under(module, "ArgsPushNode", rb_cObject);
781
+
782
+ rb_cForMasgnNode = rb_define_class_under(module, "ForMasgnNode", rb_cObject);
783
+
784
+ rb_cMasgnNode = rb_define_class_under(module, "MasgnNode", rb_cObject);
785
+
786
+ rb_cDasgnNode = rb_define_class_under(module, "DasgnNode", rb_cObject);
787
+
788
+ rb_cOnceNode = rb_define_class_under(module, "OnceNode", rb_cObject);
789
+
790
+ rb_cErrinfoNode = rb_define_class_under(module, "ErrinfoNode", rb_cObject);
791
+
792
+ rb_cPostexeNode = rb_define_class_under(module, "PostexeNode", rb_cObject);
793
+
794
+ rb_cErrorNode = rb_define_class_under(module, "ErrorNode", rb_cObject);
795
+ }