Ruby 3.5.0dev (2025-01-10 revision 5fab31b15e32622c4b71d1d347a41937e9f9c212)
api_node.c
1/*----------------------------------------------------------------------------*/
2/* This file is generated by the templates/template.rb script and should not */
3/* be modified manually. See */
4/* templates/ext/prism/api_node.c.erb */
5/* if you are looking to modify the */
6/* template */
7/*----------------------------------------------------------------------------*/
8
9#line 2 "prism/templates/ext/prism/api_node.c.erb"
10#include "prism/extension.h"
11
12extern VALUE rb_cPrism;
13extern VALUE rb_cPrismNode;
14extern VALUE rb_cPrismSource;
15extern VALUE rb_cPrismToken;
16extern VALUE rb_cPrismLocation;
17
18static VALUE rb_cPrismAliasGlobalVariableNode;
19static VALUE rb_cPrismAliasMethodNode;
20static VALUE rb_cPrismAlternationPatternNode;
21static VALUE rb_cPrismAndNode;
22static VALUE rb_cPrismArgumentsNode;
23static VALUE rb_cPrismArrayNode;
24static VALUE rb_cPrismArrayPatternNode;
25static VALUE rb_cPrismAssocNode;
26static VALUE rb_cPrismAssocSplatNode;
27static VALUE rb_cPrismBackReferenceReadNode;
28static VALUE rb_cPrismBeginNode;
29static VALUE rb_cPrismBlockArgumentNode;
30static VALUE rb_cPrismBlockLocalVariableNode;
31static VALUE rb_cPrismBlockNode;
32static VALUE rb_cPrismBlockParameterNode;
33static VALUE rb_cPrismBlockParametersNode;
34static VALUE rb_cPrismBreakNode;
35static VALUE rb_cPrismCallAndWriteNode;
36static VALUE rb_cPrismCallNode;
37static VALUE rb_cPrismCallOperatorWriteNode;
38static VALUE rb_cPrismCallOrWriteNode;
39static VALUE rb_cPrismCallTargetNode;
40static VALUE rb_cPrismCapturePatternNode;
41static VALUE rb_cPrismCaseMatchNode;
42static VALUE rb_cPrismCaseNode;
43static VALUE rb_cPrismClassNode;
44static VALUE rb_cPrismClassVariableAndWriteNode;
45static VALUE rb_cPrismClassVariableOperatorWriteNode;
46static VALUE rb_cPrismClassVariableOrWriteNode;
47static VALUE rb_cPrismClassVariableReadNode;
48static VALUE rb_cPrismClassVariableTargetNode;
49static VALUE rb_cPrismClassVariableWriteNode;
50static VALUE rb_cPrismConstantAndWriteNode;
51static VALUE rb_cPrismConstantOperatorWriteNode;
52static VALUE rb_cPrismConstantOrWriteNode;
53static VALUE rb_cPrismConstantPathAndWriteNode;
54static VALUE rb_cPrismConstantPathNode;
55static VALUE rb_cPrismConstantPathOperatorWriteNode;
56static VALUE rb_cPrismConstantPathOrWriteNode;
57static VALUE rb_cPrismConstantPathTargetNode;
58static VALUE rb_cPrismConstantPathWriteNode;
59static VALUE rb_cPrismConstantReadNode;
60static VALUE rb_cPrismConstantTargetNode;
61static VALUE rb_cPrismConstantWriteNode;
62static VALUE rb_cPrismDefNode;
63static VALUE rb_cPrismDefinedNode;
64static VALUE rb_cPrismElseNode;
65static VALUE rb_cPrismEmbeddedStatementsNode;
66static VALUE rb_cPrismEmbeddedVariableNode;
67static VALUE rb_cPrismEnsureNode;
68static VALUE rb_cPrismFalseNode;
69static VALUE rb_cPrismFindPatternNode;
70static VALUE rb_cPrismFlipFlopNode;
71static VALUE rb_cPrismFloatNode;
72static VALUE rb_cPrismForNode;
73static VALUE rb_cPrismForwardingArgumentsNode;
74static VALUE rb_cPrismForwardingParameterNode;
75static VALUE rb_cPrismForwardingSuperNode;
76static VALUE rb_cPrismGlobalVariableAndWriteNode;
77static VALUE rb_cPrismGlobalVariableOperatorWriteNode;
78static VALUE rb_cPrismGlobalVariableOrWriteNode;
79static VALUE rb_cPrismGlobalVariableReadNode;
80static VALUE rb_cPrismGlobalVariableTargetNode;
81static VALUE rb_cPrismGlobalVariableWriteNode;
82static VALUE rb_cPrismHashNode;
83static VALUE rb_cPrismHashPatternNode;
84static VALUE rb_cPrismIfNode;
85static VALUE rb_cPrismImaginaryNode;
86static VALUE rb_cPrismImplicitNode;
87static VALUE rb_cPrismImplicitRestNode;
88static VALUE rb_cPrismInNode;
89static VALUE rb_cPrismIndexAndWriteNode;
90static VALUE rb_cPrismIndexOperatorWriteNode;
91static VALUE rb_cPrismIndexOrWriteNode;
92static VALUE rb_cPrismIndexTargetNode;
93static VALUE rb_cPrismInstanceVariableAndWriteNode;
94static VALUE rb_cPrismInstanceVariableOperatorWriteNode;
95static VALUE rb_cPrismInstanceVariableOrWriteNode;
96static VALUE rb_cPrismInstanceVariableReadNode;
97static VALUE rb_cPrismInstanceVariableTargetNode;
98static VALUE rb_cPrismInstanceVariableWriteNode;
99static VALUE rb_cPrismIntegerNode;
100static VALUE rb_cPrismInterpolatedMatchLastLineNode;
101static VALUE rb_cPrismInterpolatedRegularExpressionNode;
102static VALUE rb_cPrismInterpolatedStringNode;
103static VALUE rb_cPrismInterpolatedSymbolNode;
104static VALUE rb_cPrismInterpolatedXStringNode;
105static VALUE rb_cPrismItLocalVariableReadNode;
106static VALUE rb_cPrismItParametersNode;
107static VALUE rb_cPrismKeywordHashNode;
108static VALUE rb_cPrismKeywordRestParameterNode;
109static VALUE rb_cPrismLambdaNode;
110static VALUE rb_cPrismLocalVariableAndWriteNode;
111static VALUE rb_cPrismLocalVariableOperatorWriteNode;
112static VALUE rb_cPrismLocalVariableOrWriteNode;
113static VALUE rb_cPrismLocalVariableReadNode;
114static VALUE rb_cPrismLocalVariableTargetNode;
115static VALUE rb_cPrismLocalVariableWriteNode;
116static VALUE rb_cPrismMatchLastLineNode;
117static VALUE rb_cPrismMatchPredicateNode;
118static VALUE rb_cPrismMatchRequiredNode;
119static VALUE rb_cPrismMatchWriteNode;
120static VALUE rb_cPrismMissingNode;
121static VALUE rb_cPrismModuleNode;
122static VALUE rb_cPrismMultiTargetNode;
123static VALUE rb_cPrismMultiWriteNode;
124static VALUE rb_cPrismNextNode;
125static VALUE rb_cPrismNilNode;
126static VALUE rb_cPrismNoKeywordsParameterNode;
127static VALUE rb_cPrismNumberedParametersNode;
128static VALUE rb_cPrismNumberedReferenceReadNode;
129static VALUE rb_cPrismOptionalKeywordParameterNode;
130static VALUE rb_cPrismOptionalParameterNode;
131static VALUE rb_cPrismOrNode;
132static VALUE rb_cPrismParametersNode;
133static VALUE rb_cPrismParenthesesNode;
134static VALUE rb_cPrismPinnedExpressionNode;
135static VALUE rb_cPrismPinnedVariableNode;
136static VALUE rb_cPrismPostExecutionNode;
137static VALUE rb_cPrismPreExecutionNode;
138static VALUE rb_cPrismProgramNode;
139static VALUE rb_cPrismRangeNode;
140static VALUE rb_cPrismRationalNode;
141static VALUE rb_cPrismRedoNode;
142static VALUE rb_cPrismRegularExpressionNode;
143static VALUE rb_cPrismRequiredKeywordParameterNode;
144static VALUE rb_cPrismRequiredParameterNode;
145static VALUE rb_cPrismRescueModifierNode;
146static VALUE rb_cPrismRescueNode;
147static VALUE rb_cPrismRestParameterNode;
148static VALUE rb_cPrismRetryNode;
149static VALUE rb_cPrismReturnNode;
150static VALUE rb_cPrismSelfNode;
151static VALUE rb_cPrismShareableConstantNode;
152static VALUE rb_cPrismSingletonClassNode;
153static VALUE rb_cPrismSourceEncodingNode;
154static VALUE rb_cPrismSourceFileNode;
155static VALUE rb_cPrismSourceLineNode;
156static VALUE rb_cPrismSplatNode;
157static VALUE rb_cPrismStatementsNode;
158static VALUE rb_cPrismStringNode;
159static VALUE rb_cPrismSuperNode;
160static VALUE rb_cPrismSymbolNode;
161static VALUE rb_cPrismTrueNode;
162static VALUE rb_cPrismUndefNode;
163static VALUE rb_cPrismUnlessNode;
164static VALUE rb_cPrismUntilNode;
165static VALUE rb_cPrismWhenNode;
166static VALUE rb_cPrismWhileNode;
167static VALUE rb_cPrismXStringNode;
168static VALUE rb_cPrismYieldNode;
169
170static VALUE
171pm_location_new(const pm_parser_t *parser, const uint8_t *start, const uint8_t *end) {
172 uint64_t value = ((((uint64_t) (start - parser->start)) << 32) | ((uint32_t) (end - start)));
173 return ULL2NUM(value);
174}
175
176VALUE
177pm_token_new(const pm_parser_t *parser, const pm_token_t *token, rb_encoding *encoding, VALUE source) {
178 ID type = rb_intern(pm_token_type_name(token->type));
179 VALUE location = pm_location_new(parser, token->start, token->end);
180
181 VALUE argv[] = {
182 source,
183 ID2SYM(type),
184 rb_enc_str_new((const char *) token->start, token->end - token->start, encoding),
185 location
186 };
187
188 return rb_class_new_instance(4, argv, rb_cPrismToken);
189}
190
191static VALUE
192pm_string_new(const pm_string_t *string, rb_encoding *encoding) {
193 return rb_enc_str_new((const char *) pm_string_source(string), pm_string_length(string), encoding);
194}
195
196VALUE
197pm_integer_new(const pm_integer_t *integer) {
198 VALUE result;
199 if (integer->values == NULL) {
200 result = UINT2NUM(integer->value);
201 } else {
202 VALUE string = rb_str_new(NULL, integer->length * 8);
203 unsigned char *bytes = (unsigned char *) RSTRING_PTR(string);
204
205 size_t offset = integer->length * 8;
206 for (size_t value_index = 0; value_index < integer->length; value_index++) {
207 uint32_t value = integer->values[value_index];
208
209 for (int index = 0; index < 8; index++) {
210 int byte = (value >> (4 * index)) & 0xf;
211 bytes[--offset] = byte < 10 ? byte + '0' : byte - 10 + 'a';
212 }
213 }
214
215 result = rb_funcall(string, rb_intern("to_i"), 1, UINT2NUM(16));
216 }
217
218 if (integer->negative) {
219 result = rb_funcall(result, rb_intern("-@"), 0);
220 }
221
222 return result;
223}
224
225// Create a Prism::Source object from the given parser, after pm_parse() was called.
226VALUE
227pm_source_new(const pm_parser_t *parser, rb_encoding *encoding) {
228 VALUE source_string = rb_enc_str_new((const char *) parser->start, parser->end - parser->start, encoding);
229
230 VALUE offsets = rb_ary_new_capa(parser->newline_list.size);
231 for (size_t index = 0; index < parser->newline_list.size; index++) {
232 rb_ary_push(offsets, ULONG2NUM(parser->newline_list.offsets[index]));
233 }
234
235 return rb_funcall(rb_cPrismSource, rb_intern("for"), 3, source_string, LONG2NUM(parser->start_line), offsets);
236}
237
238typedef struct pm_node_stack_node {
239 struct pm_node_stack_node *prev;
240 const pm_node_t *visit;
241 bool visited;
243
244static void
245pm_node_stack_push(pm_node_stack_node_t **stack, const pm_node_t *visit) {
247 node->prev = *stack;
248 node->visit = visit;
249 node->visited = false;
250 *stack = node;
251}
252
253static const pm_node_t *
254pm_node_stack_pop(pm_node_stack_node_t **stack) {
255 pm_node_stack_node_t *current = *stack;
256 const pm_node_t *visit = current->visit;
257
258 *stack = current->prev;
259 xfree(current);
260
261 return visit;
262}
263
264VALUE
265pm_ast_new(const pm_parser_t *parser, const pm_node_t *node, rb_encoding *encoding, VALUE source) {
266 VALUE constants = rb_ary_new_capa(parser->constant_pool.size);
267
268 for (uint32_t index = 0; index < parser->constant_pool.size; index++) {
269 pm_constant_t *constant = &parser->constant_pool.constants[index];
270 int state = 0;
271
272 VALUE string = rb_enc_str_new((const char *) constant->start, constant->length, encoding);
273 VALUE value = rb_protect(rb_str_intern, string, &state);
274
275 if (state != 0) {
276 value = ID2SYM(rb_intern_const("?"));
277 rb_set_errinfo(Qnil);
278 }
279
280 rb_ary_push(constants, value);
281 }
282
283 pm_node_stack_node_t *node_stack = NULL;
284 pm_node_stack_push(&node_stack, node);
285 VALUE value_stack = rb_ary_new();
286
287 while (node_stack != NULL) {
288 if (!node_stack->visited) {
289 if (node_stack->visit == NULL) {
290 pm_node_stack_pop(&node_stack);
291 rb_ary_push(value_stack, Qnil);
292 continue;
293 }
294
295 const pm_node_t *node = node_stack->visit;
296 node_stack->visited = true;
297
298 switch (PM_NODE_TYPE(node)) {
299#line 146 "prism/templates/ext/prism/api_node.c.erb"
302 pm_node_stack_push(&node_stack, (pm_node_t *) cast->new_name);
303 pm_node_stack_push(&node_stack, (pm_node_t *) cast->old_name);
304 break;
305 }
306#line 146 "prism/templates/ext/prism/api_node.c.erb"
309 pm_node_stack_push(&node_stack, (pm_node_t *) cast->new_name);
310 pm_node_stack_push(&node_stack, (pm_node_t *) cast->old_name);
311 break;
312 }
313#line 146 "prism/templates/ext/prism/api_node.c.erb"
316 pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
317 pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
318 break;
319 }
320#line 146 "prism/templates/ext/prism/api_node.c.erb"
321 case PM_AND_NODE: {
322 pm_and_node_t *cast = (pm_and_node_t *) node;
323 pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
324 pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
325 break;
326 }
327#line 146 "prism/templates/ext/prism/api_node.c.erb"
328 case PM_ARGUMENTS_NODE: {
330 for (size_t index = 0; index < cast->arguments.size; index++) {
331 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments.nodes[index]);
332 }
333 break;
334 }
335#line 146 "prism/templates/ext/prism/api_node.c.erb"
336 case PM_ARRAY_NODE: {
337 pm_array_node_t *cast = (pm_array_node_t *) node;
338 for (size_t index = 0; index < cast->elements.size; index++) {
339 pm_node_stack_push(&node_stack, (pm_node_t *) cast->elements.nodes[index]);
340 }
341 break;
342 }
343#line 146 "prism/templates/ext/prism/api_node.c.erb"
346 pm_node_stack_push(&node_stack, (pm_node_t *) cast->constant);
347 for (size_t index = 0; index < cast->requireds.size; index++) {
348 pm_node_stack_push(&node_stack, (pm_node_t *) cast->requireds.nodes[index]);
349 }
350 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rest);
351 for (size_t index = 0; index < cast->posts.size; index++) {
352 pm_node_stack_push(&node_stack, (pm_node_t *) cast->posts.nodes[index]);
353 }
354 break;
355 }
356#line 146 "prism/templates/ext/prism/api_node.c.erb"
357 case PM_ASSOC_NODE: {
358 pm_assoc_node_t *cast = (pm_assoc_node_t *) node;
359 pm_node_stack_push(&node_stack, (pm_node_t *) cast->key);
360 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
361 break;
362 }
363#line 146 "prism/templates/ext/prism/api_node.c.erb"
364 case PM_ASSOC_SPLAT_NODE: {
366 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
367 break;
368 }
369#line 146 "prism/templates/ext/prism/api_node.c.erb"
370 case PM_BEGIN_NODE: {
371 pm_begin_node_t *cast = (pm_begin_node_t *) node;
372 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
373 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rescue_clause);
374 pm_node_stack_push(&node_stack, (pm_node_t *) cast->else_clause);
375 pm_node_stack_push(&node_stack, (pm_node_t *) cast->ensure_clause);
376 break;
377 }
378#line 146 "prism/templates/ext/prism/api_node.c.erb"
381 pm_node_stack_push(&node_stack, (pm_node_t *) cast->expression);
382 break;
383 }
384#line 146 "prism/templates/ext/prism/api_node.c.erb"
385 case PM_BLOCK_NODE: {
386 pm_block_node_t *cast = (pm_block_node_t *) node;
387 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parameters);
388 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
389 break;
390 }
391#line 146 "prism/templates/ext/prism/api_node.c.erb"
394 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parameters);
395 for (size_t index = 0; index < cast->locals.size; index++) {
396 pm_node_stack_push(&node_stack, (pm_node_t *) cast->locals.nodes[index]);
397 }
398 break;
399 }
400#line 146 "prism/templates/ext/prism/api_node.c.erb"
401 case PM_BREAK_NODE: {
402 pm_break_node_t *cast = (pm_break_node_t *) node;
403 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
404 break;
405 }
406#line 146 "prism/templates/ext/prism/api_node.c.erb"
409 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
410 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
411 break;
412 }
413#line 146 "prism/templates/ext/prism/api_node.c.erb"
414 case PM_CALL_NODE: {
415 pm_call_node_t *cast = (pm_call_node_t *) node;
416 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
417 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
418 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
419 break;
420 }
421#line 146 "prism/templates/ext/prism/api_node.c.erb"
424 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
425 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
426 break;
427 }
428#line 146 "prism/templates/ext/prism/api_node.c.erb"
431 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
432 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
433 break;
434 }
435#line 146 "prism/templates/ext/prism/api_node.c.erb"
436 case PM_CALL_TARGET_NODE: {
438 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
439 break;
440 }
441#line 146 "prism/templates/ext/prism/api_node.c.erb"
444 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
445 pm_node_stack_push(&node_stack, (pm_node_t *) cast->target);
446 break;
447 }
448#line 146 "prism/templates/ext/prism/api_node.c.erb"
449 case PM_CASE_MATCH_NODE: {
451 pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
452 for (size_t index = 0; index < cast->conditions.size; index++) {
453 pm_node_stack_push(&node_stack, (pm_node_t *) cast->conditions.nodes[index]);
454 }
455 pm_node_stack_push(&node_stack, (pm_node_t *) cast->else_clause);
456 break;
457 }
458#line 146 "prism/templates/ext/prism/api_node.c.erb"
459 case PM_CASE_NODE: {
460 pm_case_node_t *cast = (pm_case_node_t *) node;
461 pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
462 for (size_t index = 0; index < cast->conditions.size; index++) {
463 pm_node_stack_push(&node_stack, (pm_node_t *) cast->conditions.nodes[index]);
464 }
465 pm_node_stack_push(&node_stack, (pm_node_t *) cast->else_clause);
466 break;
467 }
468#line 146 "prism/templates/ext/prism/api_node.c.erb"
469 case PM_CLASS_NODE: {
470 pm_class_node_t *cast = (pm_class_node_t *) node;
471 pm_node_stack_push(&node_stack, (pm_node_t *) cast->constant_path);
472 pm_node_stack_push(&node_stack, (pm_node_t *) cast->superclass);
473 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
474 break;
475 }
476#line 146 "prism/templates/ext/prism/api_node.c.erb"
479 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
480 break;
481 }
482#line 146 "prism/templates/ext/prism/api_node.c.erb"
485 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
486 break;
487 }
488#line 146 "prism/templates/ext/prism/api_node.c.erb"
491 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
492 break;
493 }
494#line 146 "prism/templates/ext/prism/api_node.c.erb"
497 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
498 break;
499 }
500#line 146 "prism/templates/ext/prism/api_node.c.erb"
503 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
504 break;
505 }
506#line 146 "prism/templates/ext/prism/api_node.c.erb"
509 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
510 break;
511 }
512#line 146 "prism/templates/ext/prism/api_node.c.erb"
515 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
516 break;
517 }
518#line 146 "prism/templates/ext/prism/api_node.c.erb"
521 pm_node_stack_push(&node_stack, (pm_node_t *) cast->target);
522 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
523 break;
524 }
525#line 146 "prism/templates/ext/prism/api_node.c.erb"
528 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parent);
529 break;
530 }
531#line 146 "prism/templates/ext/prism/api_node.c.erb"
534 pm_node_stack_push(&node_stack, (pm_node_t *) cast->target);
535 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
536 break;
537 }
538#line 146 "prism/templates/ext/prism/api_node.c.erb"
541 pm_node_stack_push(&node_stack, (pm_node_t *) cast->target);
542 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
543 break;
544 }
545#line 146 "prism/templates/ext/prism/api_node.c.erb"
548 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parent);
549 break;
550 }
551#line 146 "prism/templates/ext/prism/api_node.c.erb"
554 pm_node_stack_push(&node_stack, (pm_node_t *) cast->target);
555 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
556 break;
557 }
558#line 146 "prism/templates/ext/prism/api_node.c.erb"
561 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
562 break;
563 }
564#line 146 "prism/templates/ext/prism/api_node.c.erb"
565 case PM_DEF_NODE: {
566 pm_def_node_t *cast = (pm_def_node_t *) node;
567 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
568 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parameters);
569 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
570 break;
571 }
572#line 146 "prism/templates/ext/prism/api_node.c.erb"
573 case PM_DEFINED_NODE: {
574 pm_defined_node_t *cast = (pm_defined_node_t *) node;
575 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
576 break;
577 }
578#line 146 "prism/templates/ext/prism/api_node.c.erb"
579 case PM_ELSE_NODE: {
580 pm_else_node_t *cast = (pm_else_node_t *) node;
581 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
582 break;
583 }
584#line 146 "prism/templates/ext/prism/api_node.c.erb"
587 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
588 break;
589 }
590#line 146 "prism/templates/ext/prism/api_node.c.erb"
593 pm_node_stack_push(&node_stack, (pm_node_t *) cast->variable);
594 break;
595 }
596#line 146 "prism/templates/ext/prism/api_node.c.erb"
597 case PM_ENSURE_NODE: {
598 pm_ensure_node_t *cast = (pm_ensure_node_t *) node;
599 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
600 break;
601 }
602#line 146 "prism/templates/ext/prism/api_node.c.erb"
605 pm_node_stack_push(&node_stack, (pm_node_t *) cast->constant);
606 pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
607 for (size_t index = 0; index < cast->requireds.size; index++) {
608 pm_node_stack_push(&node_stack, (pm_node_t *) cast->requireds.nodes[index]);
609 }
610 pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
611 break;
612 }
613#line 146 "prism/templates/ext/prism/api_node.c.erb"
614 case PM_FLIP_FLOP_NODE: {
616 pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
617 pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
618 break;
619 }
620#line 146 "prism/templates/ext/prism/api_node.c.erb"
621 case PM_FOR_NODE: {
622 pm_for_node_t *cast = (pm_for_node_t *) node;
623 pm_node_stack_push(&node_stack, (pm_node_t *) cast->index);
624 pm_node_stack_push(&node_stack, (pm_node_t *) cast->collection);
625 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
626 break;
627 }
628#line 146 "prism/templates/ext/prism/api_node.c.erb"
631 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
632 break;
633 }
634#line 146 "prism/templates/ext/prism/api_node.c.erb"
637 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
638 break;
639 }
640#line 146 "prism/templates/ext/prism/api_node.c.erb"
643 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
644 break;
645 }
646#line 146 "prism/templates/ext/prism/api_node.c.erb"
649 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
650 break;
651 }
652#line 146 "prism/templates/ext/prism/api_node.c.erb"
655 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
656 break;
657 }
658#line 146 "prism/templates/ext/prism/api_node.c.erb"
659 case PM_HASH_NODE: {
660 pm_hash_node_t *cast = (pm_hash_node_t *) node;
661 for (size_t index = 0; index < cast->elements.size; index++) {
662 pm_node_stack_push(&node_stack, (pm_node_t *) cast->elements.nodes[index]);
663 }
664 break;
665 }
666#line 146 "prism/templates/ext/prism/api_node.c.erb"
669 pm_node_stack_push(&node_stack, (pm_node_t *) cast->constant);
670 for (size_t index = 0; index < cast->elements.size; index++) {
671 pm_node_stack_push(&node_stack, (pm_node_t *) cast->elements.nodes[index]);
672 }
673 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rest);
674 break;
675 }
676#line 146 "prism/templates/ext/prism/api_node.c.erb"
677 case PM_IF_NODE: {
678 pm_if_node_t *cast = (pm_if_node_t *) node;
679 pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
680 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
681 pm_node_stack_push(&node_stack, (pm_node_t *) cast->subsequent);
682 break;
683 }
684#line 146 "prism/templates/ext/prism/api_node.c.erb"
685 case PM_IMAGINARY_NODE: {
687 pm_node_stack_push(&node_stack, (pm_node_t *) cast->numeric);
688 break;
689 }
690#line 146 "prism/templates/ext/prism/api_node.c.erb"
691 case PM_IMPLICIT_NODE: {
692 pm_implicit_node_t *cast = (pm_implicit_node_t *) node;
693 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
694 break;
695 }
696#line 146 "prism/templates/ext/prism/api_node.c.erb"
697 case PM_IN_NODE: {
698 pm_in_node_t *cast = (pm_in_node_t *) node;
699 pm_node_stack_push(&node_stack, (pm_node_t *) cast->pattern);
700 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
701 break;
702 }
703#line 146 "prism/templates/ext/prism/api_node.c.erb"
706 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
707 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
708 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
709 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
710 break;
711 }
712#line 146 "prism/templates/ext/prism/api_node.c.erb"
715 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
716 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
717 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
718 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
719 break;
720 }
721#line 146 "prism/templates/ext/prism/api_node.c.erb"
724 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
725 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
726 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
727 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
728 break;
729 }
730#line 146 "prism/templates/ext/prism/api_node.c.erb"
733 pm_node_stack_push(&node_stack, (pm_node_t *) cast->receiver);
734 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
735 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
736 break;
737 }
738#line 146 "prism/templates/ext/prism/api_node.c.erb"
741 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
742 break;
743 }
744#line 146 "prism/templates/ext/prism/api_node.c.erb"
747 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
748 break;
749 }
750#line 146 "prism/templates/ext/prism/api_node.c.erb"
753 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
754 break;
755 }
756#line 146 "prism/templates/ext/prism/api_node.c.erb"
759 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
760 break;
761 }
762#line 146 "prism/templates/ext/prism/api_node.c.erb"
765 for (size_t index = 0; index < cast->parts.size; index++) {
766 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parts.nodes[index]);
767 }
768 break;
769 }
770#line 146 "prism/templates/ext/prism/api_node.c.erb"
773 for (size_t index = 0; index < cast->parts.size; index++) {
774 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parts.nodes[index]);
775 }
776 break;
777 }
778#line 146 "prism/templates/ext/prism/api_node.c.erb"
781 for (size_t index = 0; index < cast->parts.size; index++) {
782 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parts.nodes[index]);
783 }
784 break;
785 }
786#line 146 "prism/templates/ext/prism/api_node.c.erb"
789 for (size_t index = 0; index < cast->parts.size; index++) {
790 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parts.nodes[index]);
791 }
792 break;
793 }
794#line 146 "prism/templates/ext/prism/api_node.c.erb"
797 for (size_t index = 0; index < cast->parts.size; index++) {
798 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parts.nodes[index]);
799 }
800 break;
801 }
802#line 146 "prism/templates/ext/prism/api_node.c.erb"
805 for (size_t index = 0; index < cast->elements.size; index++) {
806 pm_node_stack_push(&node_stack, (pm_node_t *) cast->elements.nodes[index]);
807 }
808 break;
809 }
810#line 146 "prism/templates/ext/prism/api_node.c.erb"
811 case PM_LAMBDA_NODE: {
812 pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
813 pm_node_stack_push(&node_stack, (pm_node_t *) cast->parameters);
814 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
815 break;
816 }
817#line 146 "prism/templates/ext/prism/api_node.c.erb"
820 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
821 break;
822 }
823#line 146 "prism/templates/ext/prism/api_node.c.erb"
826 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
827 break;
828 }
829#line 146 "prism/templates/ext/prism/api_node.c.erb"
832 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
833 break;
834 }
835#line 146 "prism/templates/ext/prism/api_node.c.erb"
838 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
839 break;
840 }
841#line 146 "prism/templates/ext/prism/api_node.c.erb"
844 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
845 pm_node_stack_push(&node_stack, (pm_node_t *) cast->pattern);
846 break;
847 }
848#line 146 "prism/templates/ext/prism/api_node.c.erb"
851 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
852 pm_node_stack_push(&node_stack, (pm_node_t *) cast->pattern);
853 break;
854 }
855#line 146 "prism/templates/ext/prism/api_node.c.erb"
856 case PM_MATCH_WRITE_NODE: {
858 pm_node_stack_push(&node_stack, (pm_node_t *) cast->call);
859 for (size_t index = 0; index < cast->targets.size; index++) {
860 pm_node_stack_push(&node_stack, (pm_node_t *) cast->targets.nodes[index]);
861 }
862 break;
863 }
864#line 146 "prism/templates/ext/prism/api_node.c.erb"
865 case PM_MODULE_NODE: {
866 pm_module_node_t *cast = (pm_module_node_t *) node;
867 pm_node_stack_push(&node_stack, (pm_node_t *) cast->constant_path);
868 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
869 break;
870 }
871#line 146 "prism/templates/ext/prism/api_node.c.erb"
874 for (size_t index = 0; index < cast->lefts.size; index++) {
875 pm_node_stack_push(&node_stack, (pm_node_t *) cast->lefts.nodes[index]);
876 }
877 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rest);
878 for (size_t index = 0; index < cast->rights.size; index++) {
879 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rights.nodes[index]);
880 }
881 break;
882 }
883#line 146 "prism/templates/ext/prism/api_node.c.erb"
884 case PM_MULTI_WRITE_NODE: {
886 for (size_t index = 0; index < cast->lefts.size; index++) {
887 pm_node_stack_push(&node_stack, (pm_node_t *) cast->lefts.nodes[index]);
888 }
889 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rest);
890 for (size_t index = 0; index < cast->rights.size; index++) {
891 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rights.nodes[index]);
892 }
893 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
894 break;
895 }
896#line 146 "prism/templates/ext/prism/api_node.c.erb"
897 case PM_NEXT_NODE: {
898 pm_next_node_t *cast = (pm_next_node_t *) node;
899 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
900 break;
901 }
902#line 146 "prism/templates/ext/prism/api_node.c.erb"
905 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
906 break;
907 }
908#line 146 "prism/templates/ext/prism/api_node.c.erb"
911 pm_node_stack_push(&node_stack, (pm_node_t *) cast->value);
912 break;
913 }
914#line 146 "prism/templates/ext/prism/api_node.c.erb"
915 case PM_OR_NODE: {
916 pm_or_node_t *cast = (pm_or_node_t *) node;
917 pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
918 pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
919 break;
920 }
921#line 146 "prism/templates/ext/prism/api_node.c.erb"
922 case PM_PARAMETERS_NODE: {
924 for (size_t index = 0; index < cast->requireds.size; index++) {
925 pm_node_stack_push(&node_stack, (pm_node_t *) cast->requireds.nodes[index]);
926 }
927 for (size_t index = 0; index < cast->optionals.size; index++) {
928 pm_node_stack_push(&node_stack, (pm_node_t *) cast->optionals.nodes[index]);
929 }
930 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rest);
931 for (size_t index = 0; index < cast->posts.size; index++) {
932 pm_node_stack_push(&node_stack, (pm_node_t *) cast->posts.nodes[index]);
933 }
934 for (size_t index = 0; index < cast->keywords.size; index++) {
935 pm_node_stack_push(&node_stack, (pm_node_t *) cast->keywords.nodes[index]);
936 }
937 pm_node_stack_push(&node_stack, (pm_node_t *) cast->keyword_rest);
938 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
939 break;
940 }
941#line 146 "prism/templates/ext/prism/api_node.c.erb"
942 case PM_PARENTHESES_NODE: {
944 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
945 break;
946 }
947#line 146 "prism/templates/ext/prism/api_node.c.erb"
950 pm_node_stack_push(&node_stack, (pm_node_t *) cast->expression);
951 break;
952 }
953#line 146 "prism/templates/ext/prism/api_node.c.erb"
956 pm_node_stack_push(&node_stack, (pm_node_t *) cast->variable);
957 break;
958 }
959#line 146 "prism/templates/ext/prism/api_node.c.erb"
962 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
963 break;
964 }
965#line 146 "prism/templates/ext/prism/api_node.c.erb"
968 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
969 break;
970 }
971#line 146 "prism/templates/ext/prism/api_node.c.erb"
972 case PM_PROGRAM_NODE: {
973 pm_program_node_t *cast = (pm_program_node_t *) node;
974 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
975 break;
976 }
977#line 146 "prism/templates/ext/prism/api_node.c.erb"
978 case PM_RANGE_NODE: {
979 pm_range_node_t *cast = (pm_range_node_t *) node;
980 pm_node_stack_push(&node_stack, (pm_node_t *) cast->left);
981 pm_node_stack_push(&node_stack, (pm_node_t *) cast->right);
982 break;
983 }
984#line 146 "prism/templates/ext/prism/api_node.c.erb"
987 pm_node_stack_push(&node_stack, (pm_node_t *) cast->expression);
988 pm_node_stack_push(&node_stack, (pm_node_t *) cast->rescue_expression);
989 break;
990 }
991#line 146 "prism/templates/ext/prism/api_node.c.erb"
992 case PM_RESCUE_NODE: {
993 pm_rescue_node_t *cast = (pm_rescue_node_t *) node;
994 for (size_t index = 0; index < cast->exceptions.size; index++) {
995 pm_node_stack_push(&node_stack, (pm_node_t *) cast->exceptions.nodes[index]);
996 }
997 pm_node_stack_push(&node_stack, (pm_node_t *) cast->reference);
998 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
999 pm_node_stack_push(&node_stack, (pm_node_t *) cast->subsequent);
1000 break;
1001 }
1002#line 146 "prism/templates/ext/prism/api_node.c.erb"
1003 case PM_RETURN_NODE: {
1004 pm_return_node_t *cast = (pm_return_node_t *) node;
1005 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
1006 break;
1007 }
1008#line 146 "prism/templates/ext/prism/api_node.c.erb"
1011 pm_node_stack_push(&node_stack, (pm_node_t *) cast->write);
1012 break;
1013 }
1014#line 146 "prism/templates/ext/prism/api_node.c.erb"
1017 pm_node_stack_push(&node_stack, (pm_node_t *) cast->expression);
1018 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body);
1019 break;
1020 }
1021#line 146 "prism/templates/ext/prism/api_node.c.erb"
1022 case PM_SPLAT_NODE: {
1023 pm_splat_node_t *cast = (pm_splat_node_t *) node;
1024 pm_node_stack_push(&node_stack, (pm_node_t *) cast->expression);
1025 break;
1026 }
1027#line 146 "prism/templates/ext/prism/api_node.c.erb"
1028 case PM_STATEMENTS_NODE: {
1030 for (size_t index = 0; index < cast->body.size; index++) {
1031 pm_node_stack_push(&node_stack, (pm_node_t *) cast->body.nodes[index]);
1032 }
1033 break;
1034 }
1035#line 146 "prism/templates/ext/prism/api_node.c.erb"
1036 case PM_SUPER_NODE: {
1037 pm_super_node_t *cast = (pm_super_node_t *) node;
1038 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
1039 pm_node_stack_push(&node_stack, (pm_node_t *) cast->block);
1040 break;
1041 }
1042#line 146 "prism/templates/ext/prism/api_node.c.erb"
1043 case PM_UNDEF_NODE: {
1044 pm_undef_node_t *cast = (pm_undef_node_t *) node;
1045 for (size_t index = 0; index < cast->names.size; index++) {
1046 pm_node_stack_push(&node_stack, (pm_node_t *) cast->names.nodes[index]);
1047 }
1048 break;
1049 }
1050#line 146 "prism/templates/ext/prism/api_node.c.erb"
1051 case PM_UNLESS_NODE: {
1052 pm_unless_node_t *cast = (pm_unless_node_t *) node;
1053 pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
1054 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
1055 pm_node_stack_push(&node_stack, (pm_node_t *) cast->else_clause);
1056 break;
1057 }
1058#line 146 "prism/templates/ext/prism/api_node.c.erb"
1059 case PM_UNTIL_NODE: {
1060 pm_until_node_t *cast = (pm_until_node_t *) node;
1061 pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
1062 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
1063 break;
1064 }
1065#line 146 "prism/templates/ext/prism/api_node.c.erb"
1066 case PM_WHEN_NODE: {
1067 pm_when_node_t *cast = (pm_when_node_t *) node;
1068 for (size_t index = 0; index < cast->conditions.size; index++) {
1069 pm_node_stack_push(&node_stack, (pm_node_t *) cast->conditions.nodes[index]);
1070 }
1071 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
1072 break;
1073 }
1074#line 146 "prism/templates/ext/prism/api_node.c.erb"
1075 case PM_WHILE_NODE: {
1076 pm_while_node_t *cast = (pm_while_node_t *) node;
1077 pm_node_stack_push(&node_stack, (pm_node_t *) cast->predicate);
1078 pm_node_stack_push(&node_stack, (pm_node_t *) cast->statements);
1079 break;
1080 }
1081#line 146 "prism/templates/ext/prism/api_node.c.erb"
1082 case PM_YIELD_NODE: {
1083 pm_yield_node_t *cast = (pm_yield_node_t *) node;
1084 pm_node_stack_push(&node_stack, (pm_node_t *) cast->arguments);
1085 break;
1086 }
1087 default:
1088 break;
1089 }
1090#line 166 "prism/templates/ext/prism/api_node.c.erb"
1091 } else {
1092 const pm_node_t *node = pm_node_stack_pop(&node_stack);
1093
1094 switch (PM_NODE_TYPE(node)) {
1095#line 172 "prism/templates/ext/prism/api_node.c.erb"
1098 VALUE argv[7];
1099
1100 // source
1101 argv[0] = source;
1102
1103 // node_id
1104 argv[1] = ULONG2NUM(node->node_id);
1105
1106 // location
1107 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1108
1109 // flags
1110 argv[3] = ULONG2NUM(node->flags);
1111
1112 // new_name
1113#line 195 "prism/templates/ext/prism/api_node.c.erb"
1114 argv[4] = rb_ary_pop(value_stack);
1115
1116 // old_name
1117#line 195 "prism/templates/ext/prism/api_node.c.erb"
1118 argv[5] = rb_ary_pop(value_stack);
1119
1120 // keyword_loc
1121#line 220 "prism/templates/ext/prism/api_node.c.erb"
1122 argv[6] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
1123
1124 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismAliasGlobalVariableNode));
1125 break;
1126 }
1127#line 172 "prism/templates/ext/prism/api_node.c.erb"
1128 case PM_ALIAS_METHOD_NODE: {
1130 VALUE argv[7];
1131
1132 // source
1133 argv[0] = source;
1134
1135 // node_id
1136 argv[1] = ULONG2NUM(node->node_id);
1137
1138 // location
1139 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1140
1141 // flags
1142 argv[3] = ULONG2NUM(node->flags);
1143
1144 // new_name
1145#line 195 "prism/templates/ext/prism/api_node.c.erb"
1146 argv[4] = rb_ary_pop(value_stack);
1147
1148 // old_name
1149#line 195 "prism/templates/ext/prism/api_node.c.erb"
1150 argv[5] = rb_ary_pop(value_stack);
1151
1152 // keyword_loc
1153#line 220 "prism/templates/ext/prism/api_node.c.erb"
1154 argv[6] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
1155
1156 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismAliasMethodNode));
1157 break;
1158 }
1159#line 172 "prism/templates/ext/prism/api_node.c.erb"
1162 VALUE argv[7];
1163
1164 // source
1165 argv[0] = source;
1166
1167 // node_id
1168 argv[1] = ULONG2NUM(node->node_id);
1169
1170 // location
1171 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1172
1173 // flags
1174 argv[3] = ULONG2NUM(node->flags);
1175
1176 // left
1177#line 195 "prism/templates/ext/prism/api_node.c.erb"
1178 argv[4] = rb_ary_pop(value_stack);
1179
1180 // right
1181#line 195 "prism/templates/ext/prism/api_node.c.erb"
1182 argv[5] = rb_ary_pop(value_stack);
1183
1184 // operator_loc
1185#line 220 "prism/templates/ext/prism/api_node.c.erb"
1186 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1187
1188 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismAlternationPatternNode));
1189 break;
1190 }
1191#line 172 "prism/templates/ext/prism/api_node.c.erb"
1192 case PM_AND_NODE: {
1193 pm_and_node_t *cast = (pm_and_node_t *) node;
1194 VALUE argv[7];
1195
1196 // source
1197 argv[0] = source;
1198
1199 // node_id
1200 argv[1] = ULONG2NUM(node->node_id);
1201
1202 // location
1203 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1204
1205 // flags
1206 argv[3] = ULONG2NUM(node->flags);
1207
1208 // left
1209#line 195 "prism/templates/ext/prism/api_node.c.erb"
1210 argv[4] = rb_ary_pop(value_stack);
1211
1212 // right
1213#line 195 "prism/templates/ext/prism/api_node.c.erb"
1214 argv[5] = rb_ary_pop(value_stack);
1215
1216 // operator_loc
1217#line 220 "prism/templates/ext/prism/api_node.c.erb"
1218 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1219
1220 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismAndNode));
1221 break;
1222 }
1223#line 172 "prism/templates/ext/prism/api_node.c.erb"
1224 case PM_ARGUMENTS_NODE: {
1226 VALUE argv[5];
1227
1228 // source
1229 argv[0] = source;
1230
1231 // node_id
1232 argv[1] = ULONG2NUM(node->node_id);
1233
1234 // location
1235 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1236
1237 // flags
1238 argv[3] = ULONG2NUM(node->flags);
1239
1240 // arguments
1241#line 198 "prism/templates/ext/prism/api_node.c.erb"
1242 argv[4] = rb_ary_new_capa(cast->arguments.size);
1243 for (size_t index = 0; index < cast->arguments.size; index++) {
1244 rb_ary_push(argv[4], rb_ary_pop(value_stack));
1245 }
1246
1247 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismArgumentsNode));
1248 break;
1249 }
1250#line 172 "prism/templates/ext/prism/api_node.c.erb"
1251 case PM_ARRAY_NODE: {
1252 pm_array_node_t *cast = (pm_array_node_t *) node;
1253 VALUE argv[7];
1254
1255 // source
1256 argv[0] = source;
1257
1258 // node_id
1259 argv[1] = ULONG2NUM(node->node_id);
1260
1261 // location
1262 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1263
1264 // flags
1265 argv[3] = ULONG2NUM(node->flags);
1266
1267 // elements
1268#line 198 "prism/templates/ext/prism/api_node.c.erb"
1269 argv[4] = rb_ary_new_capa(cast->elements.size);
1270 for (size_t index = 0; index < cast->elements.size; index++) {
1271 rb_ary_push(argv[4], rb_ary_pop(value_stack));
1272 }
1273
1274 // opening_loc
1275#line 223 "prism/templates/ext/prism/api_node.c.erb"
1276 argv[5] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
1277
1278 // closing_loc
1279#line 223 "prism/templates/ext/prism/api_node.c.erb"
1280 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
1281
1282 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismArrayNode));
1283 break;
1284 }
1285#line 172 "prism/templates/ext/prism/api_node.c.erb"
1286 case PM_ARRAY_PATTERN_NODE: {
1288 VALUE argv[10];
1289
1290 // source
1291 argv[0] = source;
1292
1293 // node_id
1294 argv[1] = ULONG2NUM(node->node_id);
1295
1296 // location
1297 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1298
1299 // flags
1300 argv[3] = ULONG2NUM(node->flags);
1301
1302 // constant
1303#line 195 "prism/templates/ext/prism/api_node.c.erb"
1304 argv[4] = rb_ary_pop(value_stack);
1305
1306 // requireds
1307#line 198 "prism/templates/ext/prism/api_node.c.erb"
1308 argv[5] = rb_ary_new_capa(cast->requireds.size);
1309 for (size_t index = 0; index < cast->requireds.size; index++) {
1310 rb_ary_push(argv[5], rb_ary_pop(value_stack));
1311 }
1312
1313 // rest
1314#line 195 "prism/templates/ext/prism/api_node.c.erb"
1315 argv[6] = rb_ary_pop(value_stack);
1316
1317 // posts
1318#line 198 "prism/templates/ext/prism/api_node.c.erb"
1319 argv[7] = rb_ary_new_capa(cast->posts.size);
1320 for (size_t index = 0; index < cast->posts.size; index++) {
1321 rb_ary_push(argv[7], rb_ary_pop(value_stack));
1322 }
1323
1324 // opening_loc
1325#line 223 "prism/templates/ext/prism/api_node.c.erb"
1326 argv[8] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
1327
1328 // closing_loc
1329#line 223 "prism/templates/ext/prism/api_node.c.erb"
1330 argv[9] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
1331
1332 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismArrayPatternNode));
1333 break;
1334 }
1335#line 172 "prism/templates/ext/prism/api_node.c.erb"
1336 case PM_ASSOC_NODE: {
1337 pm_assoc_node_t *cast = (pm_assoc_node_t *) node;
1338 VALUE argv[7];
1339
1340 // source
1341 argv[0] = source;
1342
1343 // node_id
1344 argv[1] = ULONG2NUM(node->node_id);
1345
1346 // location
1347 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1348
1349 // flags
1350 argv[3] = ULONG2NUM(node->flags);
1351
1352 // key
1353#line 195 "prism/templates/ext/prism/api_node.c.erb"
1354 argv[4] = rb_ary_pop(value_stack);
1355
1356 // value
1357#line 195 "prism/templates/ext/prism/api_node.c.erb"
1358 argv[5] = rb_ary_pop(value_stack);
1359
1360 // operator_loc
1361#line 223 "prism/templates/ext/prism/api_node.c.erb"
1362 argv[6] = cast->operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1363
1364 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismAssocNode));
1365 break;
1366 }
1367#line 172 "prism/templates/ext/prism/api_node.c.erb"
1368 case PM_ASSOC_SPLAT_NODE: {
1370 VALUE argv[6];
1371
1372 // source
1373 argv[0] = source;
1374
1375 // node_id
1376 argv[1] = ULONG2NUM(node->node_id);
1377
1378 // location
1379 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1380
1381 // flags
1382 argv[3] = ULONG2NUM(node->flags);
1383
1384 // value
1385#line 195 "prism/templates/ext/prism/api_node.c.erb"
1386 argv[4] = rb_ary_pop(value_stack);
1387
1388 // operator_loc
1389#line 220 "prism/templates/ext/prism/api_node.c.erb"
1390 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1391
1392 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismAssocSplatNode));
1393 break;
1394 }
1395#line 172 "prism/templates/ext/prism/api_node.c.erb"
1398 VALUE argv[5];
1399
1400 // source
1401 argv[0] = source;
1402
1403 // node_id
1404 argv[1] = ULONG2NUM(node->node_id);
1405
1406 // location
1407 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1408
1409 // flags
1410 argv[3] = ULONG2NUM(node->flags);
1411
1412 // name
1413#line 207 "prism/templates/ext/prism/api_node.c.erb"
1414 assert(cast->name != 0);
1415 argv[4] = RARRAY_AREF(constants, cast->name - 1);
1416
1417 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismBackReferenceReadNode));
1418 break;
1419 }
1420#line 172 "prism/templates/ext/prism/api_node.c.erb"
1421 case PM_BEGIN_NODE: {
1422 pm_begin_node_t *cast = (pm_begin_node_t *) node;
1423 VALUE argv[10];
1424
1425 // source
1426 argv[0] = source;
1427
1428 // node_id
1429 argv[1] = ULONG2NUM(node->node_id);
1430
1431 // location
1432 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1433
1434 // flags
1435 argv[3] = ULONG2NUM(node->flags);
1436
1437 // begin_keyword_loc
1438#line 223 "prism/templates/ext/prism/api_node.c.erb"
1439 argv[4] = cast->begin_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->begin_keyword_loc.start, cast->begin_keyword_loc.end);
1440
1441 // statements
1442#line 195 "prism/templates/ext/prism/api_node.c.erb"
1443 argv[5] = rb_ary_pop(value_stack);
1444
1445 // rescue_clause
1446#line 195 "prism/templates/ext/prism/api_node.c.erb"
1447 argv[6] = rb_ary_pop(value_stack);
1448
1449 // else_clause
1450#line 195 "prism/templates/ext/prism/api_node.c.erb"
1451 argv[7] = rb_ary_pop(value_stack);
1452
1453 // ensure_clause
1454#line 195 "prism/templates/ext/prism/api_node.c.erb"
1455 argv[8] = rb_ary_pop(value_stack);
1456
1457 // end_keyword_loc
1458#line 223 "prism/templates/ext/prism/api_node.c.erb"
1459 argv[9] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
1460
1461 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismBeginNode));
1462 break;
1463 }
1464#line 172 "prism/templates/ext/prism/api_node.c.erb"
1467 VALUE argv[6];
1468
1469 // source
1470 argv[0] = source;
1471
1472 // node_id
1473 argv[1] = ULONG2NUM(node->node_id);
1474
1475 // location
1476 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1477
1478 // flags
1479 argv[3] = ULONG2NUM(node->flags);
1480
1481 // expression
1482#line 195 "prism/templates/ext/prism/api_node.c.erb"
1483 argv[4] = rb_ary_pop(value_stack);
1484
1485 // operator_loc
1486#line 220 "prism/templates/ext/prism/api_node.c.erb"
1487 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1488
1489 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismBlockArgumentNode));
1490 break;
1491 }
1492#line 172 "prism/templates/ext/prism/api_node.c.erb"
1495 VALUE argv[5];
1496
1497 // source
1498 argv[0] = source;
1499
1500 // node_id
1501 argv[1] = ULONG2NUM(node->node_id);
1502
1503 // location
1504 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1505
1506 // flags
1507 argv[3] = ULONG2NUM(node->flags);
1508
1509 // name
1510#line 207 "prism/templates/ext/prism/api_node.c.erb"
1511 assert(cast->name != 0);
1512 argv[4] = RARRAY_AREF(constants, cast->name - 1);
1513
1514 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismBlockLocalVariableNode));
1515 break;
1516 }
1517#line 172 "prism/templates/ext/prism/api_node.c.erb"
1518 case PM_BLOCK_NODE: {
1519 pm_block_node_t *cast = (pm_block_node_t *) node;
1520 VALUE argv[9];
1521
1522 // source
1523 argv[0] = source;
1524
1525 // node_id
1526 argv[1] = ULONG2NUM(node->node_id);
1527
1528 // location
1529 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1530
1531 // flags
1532 argv[3] = ULONG2NUM(node->flags);
1533
1534 // locals
1535#line 213 "prism/templates/ext/prism/api_node.c.erb"
1536 argv[4] = rb_ary_new_capa(cast->locals.size);
1537 for (size_t index = 0; index < cast->locals.size; index++) {
1538 assert(cast->locals.ids[index] != 0);
1539 rb_ary_push(argv[4], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
1540 }
1541
1542 // parameters
1543#line 195 "prism/templates/ext/prism/api_node.c.erb"
1544 argv[5] = rb_ary_pop(value_stack);
1545
1546 // body
1547#line 195 "prism/templates/ext/prism/api_node.c.erb"
1548 argv[6] = rb_ary_pop(value_stack);
1549
1550 // opening_loc
1551#line 220 "prism/templates/ext/prism/api_node.c.erb"
1552 argv[7] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
1553
1554 // closing_loc
1555#line 220 "prism/templates/ext/prism/api_node.c.erb"
1556 argv[8] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
1557
1558 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismBlockNode));
1559 break;
1560 }
1561#line 172 "prism/templates/ext/prism/api_node.c.erb"
1564 VALUE argv[7];
1565
1566 // source
1567 argv[0] = source;
1568
1569 // node_id
1570 argv[1] = ULONG2NUM(node->node_id);
1571
1572 // location
1573 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1574
1575 // flags
1576 argv[3] = ULONG2NUM(node->flags);
1577
1578 // name
1579 argv[4] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
1580
1581 // name_loc
1582#line 223 "prism/templates/ext/prism/api_node.c.erb"
1583 argv[5] = cast->name_loc.start == NULL ? Qnil : pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
1584
1585 // operator_loc
1586#line 220 "prism/templates/ext/prism/api_node.c.erb"
1587 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1588
1589 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismBlockParameterNode));
1590 break;
1591 }
1592#line 172 "prism/templates/ext/prism/api_node.c.erb"
1595 VALUE argv[8];
1596
1597 // source
1598 argv[0] = source;
1599
1600 // node_id
1601 argv[1] = ULONG2NUM(node->node_id);
1602
1603 // location
1604 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1605
1606 // flags
1607 argv[3] = ULONG2NUM(node->flags);
1608
1609 // parameters
1610#line 195 "prism/templates/ext/prism/api_node.c.erb"
1611 argv[4] = rb_ary_pop(value_stack);
1612
1613 // locals
1614#line 198 "prism/templates/ext/prism/api_node.c.erb"
1615 argv[5] = rb_ary_new_capa(cast->locals.size);
1616 for (size_t index = 0; index < cast->locals.size; index++) {
1617 rb_ary_push(argv[5], rb_ary_pop(value_stack));
1618 }
1619
1620 // opening_loc
1621#line 223 "prism/templates/ext/prism/api_node.c.erb"
1622 argv[6] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
1623
1624 // closing_loc
1625#line 223 "prism/templates/ext/prism/api_node.c.erb"
1626 argv[7] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
1627
1628 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismBlockParametersNode));
1629 break;
1630 }
1631#line 172 "prism/templates/ext/prism/api_node.c.erb"
1632 case PM_BREAK_NODE: {
1633 pm_break_node_t *cast = (pm_break_node_t *) node;
1634 VALUE argv[6];
1635
1636 // source
1637 argv[0] = source;
1638
1639 // node_id
1640 argv[1] = ULONG2NUM(node->node_id);
1641
1642 // location
1643 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1644
1645 // flags
1646 argv[3] = ULONG2NUM(node->flags);
1647
1648 // arguments
1649#line 195 "prism/templates/ext/prism/api_node.c.erb"
1650 argv[4] = rb_ary_pop(value_stack);
1651
1652 // keyword_loc
1653#line 220 "prism/templates/ext/prism/api_node.c.erb"
1654 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
1655
1656 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismBreakNode));
1657 break;
1658 }
1659#line 172 "prism/templates/ext/prism/api_node.c.erb"
1662 VALUE argv[11];
1663
1664 // source
1665 argv[0] = source;
1666
1667 // node_id
1668 argv[1] = ULONG2NUM(node->node_id);
1669
1670 // location
1671 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1672
1673 // flags
1674 argv[3] = ULONG2NUM(node->flags);
1675
1676 // receiver
1677#line 195 "prism/templates/ext/prism/api_node.c.erb"
1678 argv[4] = rb_ary_pop(value_stack);
1679
1680 // call_operator_loc
1681#line 223 "prism/templates/ext/prism/api_node.c.erb"
1682 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
1683
1684 // message_loc
1685#line 223 "prism/templates/ext/prism/api_node.c.erb"
1686 argv[6] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end);
1687
1688 // read_name
1689#line 207 "prism/templates/ext/prism/api_node.c.erb"
1690 assert(cast->read_name != 0);
1691 argv[7] = RARRAY_AREF(constants, cast->read_name - 1);
1692
1693 // write_name
1694#line 207 "prism/templates/ext/prism/api_node.c.erb"
1695 assert(cast->write_name != 0);
1696 argv[8] = RARRAY_AREF(constants, cast->write_name - 1);
1697
1698 // operator_loc
1699#line 220 "prism/templates/ext/prism/api_node.c.erb"
1700 argv[9] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1701
1702 // value
1703#line 195 "prism/templates/ext/prism/api_node.c.erb"
1704 argv[10] = rb_ary_pop(value_stack);
1705
1706 rb_ary_push(value_stack, rb_class_new_instance(11, argv, rb_cPrismCallAndWriteNode));
1707 break;
1708 }
1709#line 172 "prism/templates/ext/prism/api_node.c.erb"
1710 case PM_CALL_NODE: {
1711 pm_call_node_t *cast = (pm_call_node_t *) node;
1712 VALUE argv[12];
1713
1714 // source
1715 argv[0] = source;
1716
1717 // node_id
1718 argv[1] = ULONG2NUM(node->node_id);
1719
1720 // location
1721 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1722
1723 // flags
1724 argv[3] = ULONG2NUM(node->flags);
1725
1726 // receiver
1727#line 195 "prism/templates/ext/prism/api_node.c.erb"
1728 argv[4] = rb_ary_pop(value_stack);
1729
1730 // call_operator_loc
1731#line 223 "prism/templates/ext/prism/api_node.c.erb"
1732 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
1733
1734 // name
1735#line 207 "prism/templates/ext/prism/api_node.c.erb"
1736 assert(cast->name != 0);
1737 argv[6] = RARRAY_AREF(constants, cast->name - 1);
1738
1739 // message_loc
1740#line 223 "prism/templates/ext/prism/api_node.c.erb"
1741 argv[7] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end);
1742
1743 // opening_loc
1744#line 223 "prism/templates/ext/prism/api_node.c.erb"
1745 argv[8] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
1746
1747 // arguments
1748#line 195 "prism/templates/ext/prism/api_node.c.erb"
1749 argv[9] = rb_ary_pop(value_stack);
1750
1751 // closing_loc
1752#line 223 "prism/templates/ext/prism/api_node.c.erb"
1753 argv[10] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
1754
1755 // block
1756#line 195 "prism/templates/ext/prism/api_node.c.erb"
1757 argv[11] = rb_ary_pop(value_stack);
1758
1759 rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismCallNode));
1760 break;
1761 }
1762#line 172 "prism/templates/ext/prism/api_node.c.erb"
1765 VALUE argv[12];
1766
1767 // source
1768 argv[0] = source;
1769
1770 // node_id
1771 argv[1] = ULONG2NUM(node->node_id);
1772
1773 // location
1774 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1775
1776 // flags
1777 argv[3] = ULONG2NUM(node->flags);
1778
1779 // receiver
1780#line 195 "prism/templates/ext/prism/api_node.c.erb"
1781 argv[4] = rb_ary_pop(value_stack);
1782
1783 // call_operator_loc
1784#line 223 "prism/templates/ext/prism/api_node.c.erb"
1785 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
1786
1787 // message_loc
1788#line 223 "prism/templates/ext/prism/api_node.c.erb"
1789 argv[6] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end);
1790
1791 // read_name
1792#line 207 "prism/templates/ext/prism/api_node.c.erb"
1793 assert(cast->read_name != 0);
1794 argv[7] = RARRAY_AREF(constants, cast->read_name - 1);
1795
1796 // write_name
1797#line 207 "prism/templates/ext/prism/api_node.c.erb"
1798 assert(cast->write_name != 0);
1799 argv[8] = RARRAY_AREF(constants, cast->write_name - 1);
1800
1801 // binary_operator
1802#line 207 "prism/templates/ext/prism/api_node.c.erb"
1803 assert(cast->binary_operator != 0);
1804 argv[9] = RARRAY_AREF(constants, cast->binary_operator - 1);
1805
1806 // binary_operator_loc
1807#line 220 "prism/templates/ext/prism/api_node.c.erb"
1808 argv[10] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
1809
1810 // value
1811#line 195 "prism/templates/ext/prism/api_node.c.erb"
1812 argv[11] = rb_ary_pop(value_stack);
1813
1814 rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismCallOperatorWriteNode));
1815 break;
1816 }
1817#line 172 "prism/templates/ext/prism/api_node.c.erb"
1818 case PM_CALL_OR_WRITE_NODE: {
1820 VALUE argv[11];
1821
1822 // source
1823 argv[0] = source;
1824
1825 // node_id
1826 argv[1] = ULONG2NUM(node->node_id);
1827
1828 // location
1829 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1830
1831 // flags
1832 argv[3] = ULONG2NUM(node->flags);
1833
1834 // receiver
1835#line 195 "prism/templates/ext/prism/api_node.c.erb"
1836 argv[4] = rb_ary_pop(value_stack);
1837
1838 // call_operator_loc
1839#line 223 "prism/templates/ext/prism/api_node.c.erb"
1840 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
1841
1842 // message_loc
1843#line 223 "prism/templates/ext/prism/api_node.c.erb"
1844 argv[6] = cast->message_loc.start == NULL ? Qnil : pm_location_new(parser, cast->message_loc.start, cast->message_loc.end);
1845
1846 // read_name
1847#line 207 "prism/templates/ext/prism/api_node.c.erb"
1848 assert(cast->read_name != 0);
1849 argv[7] = RARRAY_AREF(constants, cast->read_name - 1);
1850
1851 // write_name
1852#line 207 "prism/templates/ext/prism/api_node.c.erb"
1853 assert(cast->write_name != 0);
1854 argv[8] = RARRAY_AREF(constants, cast->write_name - 1);
1855
1856 // operator_loc
1857#line 220 "prism/templates/ext/prism/api_node.c.erb"
1858 argv[9] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1859
1860 // value
1861#line 195 "prism/templates/ext/prism/api_node.c.erb"
1862 argv[10] = rb_ary_pop(value_stack);
1863
1864 rb_ary_push(value_stack, rb_class_new_instance(11, argv, rb_cPrismCallOrWriteNode));
1865 break;
1866 }
1867#line 172 "prism/templates/ext/prism/api_node.c.erb"
1868 case PM_CALL_TARGET_NODE: {
1870 VALUE argv[8];
1871
1872 // source
1873 argv[0] = source;
1874
1875 // node_id
1876 argv[1] = ULONG2NUM(node->node_id);
1877
1878 // location
1879 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1880
1881 // flags
1882 argv[3] = ULONG2NUM(node->flags);
1883
1884 // receiver
1885#line 195 "prism/templates/ext/prism/api_node.c.erb"
1886 argv[4] = rb_ary_pop(value_stack);
1887
1888 // call_operator_loc
1889#line 220 "prism/templates/ext/prism/api_node.c.erb"
1890 argv[5] = pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
1891
1892 // name
1893#line 207 "prism/templates/ext/prism/api_node.c.erb"
1894 assert(cast->name != 0);
1895 argv[6] = RARRAY_AREF(constants, cast->name - 1);
1896
1897 // message_loc
1898#line 220 "prism/templates/ext/prism/api_node.c.erb"
1899 argv[7] = pm_location_new(parser, cast->message_loc.start, cast->message_loc.end);
1900
1901 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismCallTargetNode));
1902 break;
1903 }
1904#line 172 "prism/templates/ext/prism/api_node.c.erb"
1907 VALUE argv[7];
1908
1909 // source
1910 argv[0] = source;
1911
1912 // node_id
1913 argv[1] = ULONG2NUM(node->node_id);
1914
1915 // location
1916 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1917
1918 // flags
1919 argv[3] = ULONG2NUM(node->flags);
1920
1921 // value
1922#line 195 "prism/templates/ext/prism/api_node.c.erb"
1923 argv[4] = rb_ary_pop(value_stack);
1924
1925 // target
1926#line 195 "prism/templates/ext/prism/api_node.c.erb"
1927 argv[5] = rb_ary_pop(value_stack);
1928
1929 // operator_loc
1930#line 220 "prism/templates/ext/prism/api_node.c.erb"
1931 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
1932
1933 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismCapturePatternNode));
1934 break;
1935 }
1936#line 172 "prism/templates/ext/prism/api_node.c.erb"
1937 case PM_CASE_MATCH_NODE: {
1939 VALUE argv[9];
1940
1941 // source
1942 argv[0] = source;
1943
1944 // node_id
1945 argv[1] = ULONG2NUM(node->node_id);
1946
1947 // location
1948 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1949
1950 // flags
1951 argv[3] = ULONG2NUM(node->flags);
1952
1953 // predicate
1954#line 195 "prism/templates/ext/prism/api_node.c.erb"
1955 argv[4] = rb_ary_pop(value_stack);
1956
1957 // conditions
1958#line 198 "prism/templates/ext/prism/api_node.c.erb"
1959 argv[5] = rb_ary_new_capa(cast->conditions.size);
1960 for (size_t index = 0; index < cast->conditions.size; index++) {
1961 rb_ary_push(argv[5], rb_ary_pop(value_stack));
1962 }
1963
1964 // else_clause
1965#line 195 "prism/templates/ext/prism/api_node.c.erb"
1966 argv[6] = rb_ary_pop(value_stack);
1967
1968 // case_keyword_loc
1969#line 220 "prism/templates/ext/prism/api_node.c.erb"
1970 argv[7] = pm_location_new(parser, cast->case_keyword_loc.start, cast->case_keyword_loc.end);
1971
1972 // end_keyword_loc
1973#line 220 "prism/templates/ext/prism/api_node.c.erb"
1974 argv[8] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
1975
1976 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismCaseMatchNode));
1977 break;
1978 }
1979#line 172 "prism/templates/ext/prism/api_node.c.erb"
1980 case PM_CASE_NODE: {
1981 pm_case_node_t *cast = (pm_case_node_t *) node;
1982 VALUE argv[9];
1983
1984 // source
1985 argv[0] = source;
1986
1987 // node_id
1988 argv[1] = ULONG2NUM(node->node_id);
1989
1990 // location
1991 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
1992
1993 // flags
1994 argv[3] = ULONG2NUM(node->flags);
1995
1996 // predicate
1997#line 195 "prism/templates/ext/prism/api_node.c.erb"
1998 argv[4] = rb_ary_pop(value_stack);
1999
2000 // conditions
2001#line 198 "prism/templates/ext/prism/api_node.c.erb"
2002 argv[5] = rb_ary_new_capa(cast->conditions.size);
2003 for (size_t index = 0; index < cast->conditions.size; index++) {
2004 rb_ary_push(argv[5], rb_ary_pop(value_stack));
2005 }
2006
2007 // else_clause
2008#line 195 "prism/templates/ext/prism/api_node.c.erb"
2009 argv[6] = rb_ary_pop(value_stack);
2010
2011 // case_keyword_loc
2012#line 220 "prism/templates/ext/prism/api_node.c.erb"
2013 argv[7] = pm_location_new(parser, cast->case_keyword_loc.start, cast->case_keyword_loc.end);
2014
2015 // end_keyword_loc
2016#line 220 "prism/templates/ext/prism/api_node.c.erb"
2017 argv[8] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
2018
2019 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismCaseNode));
2020 break;
2021 }
2022#line 172 "prism/templates/ext/prism/api_node.c.erb"
2023 case PM_CLASS_NODE: {
2024 pm_class_node_t *cast = (pm_class_node_t *) node;
2025 VALUE argv[12];
2026
2027 // source
2028 argv[0] = source;
2029
2030 // node_id
2031 argv[1] = ULONG2NUM(node->node_id);
2032
2033 // location
2034 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2035
2036 // flags
2037 argv[3] = ULONG2NUM(node->flags);
2038
2039 // locals
2040#line 213 "prism/templates/ext/prism/api_node.c.erb"
2041 argv[4] = rb_ary_new_capa(cast->locals.size);
2042 for (size_t index = 0; index < cast->locals.size; index++) {
2043 assert(cast->locals.ids[index] != 0);
2044 rb_ary_push(argv[4], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
2045 }
2046
2047 // class_keyword_loc
2048#line 220 "prism/templates/ext/prism/api_node.c.erb"
2049 argv[5] = pm_location_new(parser, cast->class_keyword_loc.start, cast->class_keyword_loc.end);
2050
2051 // constant_path
2052#line 195 "prism/templates/ext/prism/api_node.c.erb"
2053 argv[6] = rb_ary_pop(value_stack);
2054
2055 // inheritance_operator_loc
2056#line 223 "prism/templates/ext/prism/api_node.c.erb"
2057 argv[7] = cast->inheritance_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->inheritance_operator_loc.start, cast->inheritance_operator_loc.end);
2058
2059 // superclass
2060#line 195 "prism/templates/ext/prism/api_node.c.erb"
2061 argv[8] = rb_ary_pop(value_stack);
2062
2063 // body
2064#line 195 "prism/templates/ext/prism/api_node.c.erb"
2065 argv[9] = rb_ary_pop(value_stack);
2066
2067 // end_keyword_loc
2068#line 220 "prism/templates/ext/prism/api_node.c.erb"
2069 argv[10] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
2070
2071 // name
2072#line 207 "prism/templates/ext/prism/api_node.c.erb"
2073 assert(cast->name != 0);
2074 argv[11] = RARRAY_AREF(constants, cast->name - 1);
2075
2076 rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismClassNode));
2077 break;
2078 }
2079#line 172 "prism/templates/ext/prism/api_node.c.erb"
2082 VALUE argv[8];
2083
2084 // source
2085 argv[0] = source;
2086
2087 // node_id
2088 argv[1] = ULONG2NUM(node->node_id);
2089
2090 // location
2091 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2092
2093 // flags
2094 argv[3] = ULONG2NUM(node->flags);
2095
2096 // name
2097#line 207 "prism/templates/ext/prism/api_node.c.erb"
2098 assert(cast->name != 0);
2099 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2100
2101 // name_loc
2102#line 220 "prism/templates/ext/prism/api_node.c.erb"
2103 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2104
2105 // operator_loc
2106#line 220 "prism/templates/ext/prism/api_node.c.erb"
2107 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2108
2109 // value
2110#line 195 "prism/templates/ext/prism/api_node.c.erb"
2111 argv[7] = rb_ary_pop(value_stack);
2112
2113 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismClassVariableAndWriteNode));
2114 break;
2115 }
2116#line 172 "prism/templates/ext/prism/api_node.c.erb"
2119 VALUE argv[9];
2120
2121 // source
2122 argv[0] = source;
2123
2124 // node_id
2125 argv[1] = ULONG2NUM(node->node_id);
2126
2127 // location
2128 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2129
2130 // flags
2131 argv[3] = ULONG2NUM(node->flags);
2132
2133 // name
2134#line 207 "prism/templates/ext/prism/api_node.c.erb"
2135 assert(cast->name != 0);
2136 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2137
2138 // name_loc
2139#line 220 "prism/templates/ext/prism/api_node.c.erb"
2140 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2141
2142 // binary_operator_loc
2143#line 220 "prism/templates/ext/prism/api_node.c.erb"
2144 argv[6] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
2145
2146 // value
2147#line 195 "prism/templates/ext/prism/api_node.c.erb"
2148 argv[7] = rb_ary_pop(value_stack);
2149
2150 // binary_operator
2151#line 207 "prism/templates/ext/prism/api_node.c.erb"
2152 assert(cast->binary_operator != 0);
2153 argv[8] = RARRAY_AREF(constants, cast->binary_operator - 1);
2154
2155 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismClassVariableOperatorWriteNode));
2156 break;
2157 }
2158#line 172 "prism/templates/ext/prism/api_node.c.erb"
2161 VALUE argv[8];
2162
2163 // source
2164 argv[0] = source;
2165
2166 // node_id
2167 argv[1] = ULONG2NUM(node->node_id);
2168
2169 // location
2170 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2171
2172 // flags
2173 argv[3] = ULONG2NUM(node->flags);
2174
2175 // name
2176#line 207 "prism/templates/ext/prism/api_node.c.erb"
2177 assert(cast->name != 0);
2178 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2179
2180 // name_loc
2181#line 220 "prism/templates/ext/prism/api_node.c.erb"
2182 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2183
2184 // operator_loc
2185#line 220 "prism/templates/ext/prism/api_node.c.erb"
2186 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2187
2188 // value
2189#line 195 "prism/templates/ext/prism/api_node.c.erb"
2190 argv[7] = rb_ary_pop(value_stack);
2191
2192 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismClassVariableOrWriteNode));
2193 break;
2194 }
2195#line 172 "prism/templates/ext/prism/api_node.c.erb"
2198 VALUE argv[5];
2199
2200 // source
2201 argv[0] = source;
2202
2203 // node_id
2204 argv[1] = ULONG2NUM(node->node_id);
2205
2206 // location
2207 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2208
2209 // flags
2210 argv[3] = ULONG2NUM(node->flags);
2211
2212 // name
2213#line 207 "prism/templates/ext/prism/api_node.c.erb"
2214 assert(cast->name != 0);
2215 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2216
2217 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismClassVariableReadNode));
2218 break;
2219 }
2220#line 172 "prism/templates/ext/prism/api_node.c.erb"
2223 VALUE argv[5];
2224
2225 // source
2226 argv[0] = source;
2227
2228 // node_id
2229 argv[1] = ULONG2NUM(node->node_id);
2230
2231 // location
2232 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2233
2234 // flags
2235 argv[3] = ULONG2NUM(node->flags);
2236
2237 // name
2238#line 207 "prism/templates/ext/prism/api_node.c.erb"
2239 assert(cast->name != 0);
2240 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2241
2242 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismClassVariableTargetNode));
2243 break;
2244 }
2245#line 172 "prism/templates/ext/prism/api_node.c.erb"
2248 VALUE argv[8];
2249
2250 // source
2251 argv[0] = source;
2252
2253 // node_id
2254 argv[1] = ULONG2NUM(node->node_id);
2255
2256 // location
2257 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2258
2259 // flags
2260 argv[3] = ULONG2NUM(node->flags);
2261
2262 // name
2263#line 207 "prism/templates/ext/prism/api_node.c.erb"
2264 assert(cast->name != 0);
2265 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2266
2267 // name_loc
2268#line 220 "prism/templates/ext/prism/api_node.c.erb"
2269 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2270
2271 // value
2272#line 195 "prism/templates/ext/prism/api_node.c.erb"
2273 argv[6] = rb_ary_pop(value_stack);
2274
2275 // operator_loc
2276#line 220 "prism/templates/ext/prism/api_node.c.erb"
2277 argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2278
2279 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismClassVariableWriteNode));
2280 break;
2281 }
2282#line 172 "prism/templates/ext/prism/api_node.c.erb"
2285 VALUE argv[8];
2286
2287 // source
2288 argv[0] = source;
2289
2290 // node_id
2291 argv[1] = ULONG2NUM(node->node_id);
2292
2293 // location
2294 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2295
2296 // flags
2297 argv[3] = ULONG2NUM(node->flags);
2298
2299 // name
2300#line 207 "prism/templates/ext/prism/api_node.c.erb"
2301 assert(cast->name != 0);
2302 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2303
2304 // name_loc
2305#line 220 "prism/templates/ext/prism/api_node.c.erb"
2306 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2307
2308 // operator_loc
2309#line 220 "prism/templates/ext/prism/api_node.c.erb"
2310 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2311
2312 // value
2313#line 195 "prism/templates/ext/prism/api_node.c.erb"
2314 argv[7] = rb_ary_pop(value_stack);
2315
2316 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismConstantAndWriteNode));
2317 break;
2318 }
2319#line 172 "prism/templates/ext/prism/api_node.c.erb"
2322 VALUE argv[9];
2323
2324 // source
2325 argv[0] = source;
2326
2327 // node_id
2328 argv[1] = ULONG2NUM(node->node_id);
2329
2330 // location
2331 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2332
2333 // flags
2334 argv[3] = ULONG2NUM(node->flags);
2335
2336 // name
2337#line 207 "prism/templates/ext/prism/api_node.c.erb"
2338 assert(cast->name != 0);
2339 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2340
2341 // name_loc
2342#line 220 "prism/templates/ext/prism/api_node.c.erb"
2343 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2344
2345 // binary_operator_loc
2346#line 220 "prism/templates/ext/prism/api_node.c.erb"
2347 argv[6] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
2348
2349 // value
2350#line 195 "prism/templates/ext/prism/api_node.c.erb"
2351 argv[7] = rb_ary_pop(value_stack);
2352
2353 // binary_operator
2354#line 207 "prism/templates/ext/prism/api_node.c.erb"
2355 assert(cast->binary_operator != 0);
2356 argv[8] = RARRAY_AREF(constants, cast->binary_operator - 1);
2357
2358 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismConstantOperatorWriteNode));
2359 break;
2360 }
2361#line 172 "prism/templates/ext/prism/api_node.c.erb"
2364 VALUE argv[8];
2365
2366 // source
2367 argv[0] = source;
2368
2369 // node_id
2370 argv[1] = ULONG2NUM(node->node_id);
2371
2372 // location
2373 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2374
2375 // flags
2376 argv[3] = ULONG2NUM(node->flags);
2377
2378 // name
2379#line 207 "prism/templates/ext/prism/api_node.c.erb"
2380 assert(cast->name != 0);
2381 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2382
2383 // name_loc
2384#line 220 "prism/templates/ext/prism/api_node.c.erb"
2385 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2386
2387 // operator_loc
2388#line 220 "prism/templates/ext/prism/api_node.c.erb"
2389 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2390
2391 // value
2392#line 195 "prism/templates/ext/prism/api_node.c.erb"
2393 argv[7] = rb_ary_pop(value_stack);
2394
2395 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismConstantOrWriteNode));
2396 break;
2397 }
2398#line 172 "prism/templates/ext/prism/api_node.c.erb"
2401 VALUE argv[7];
2402
2403 // source
2404 argv[0] = source;
2405
2406 // node_id
2407 argv[1] = ULONG2NUM(node->node_id);
2408
2409 // location
2410 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2411
2412 // flags
2413 argv[3] = ULONG2NUM(node->flags);
2414
2415 // target
2416#line 195 "prism/templates/ext/prism/api_node.c.erb"
2417 argv[4] = rb_ary_pop(value_stack);
2418
2419 // operator_loc
2420#line 220 "prism/templates/ext/prism/api_node.c.erb"
2421 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2422
2423 // value
2424#line 195 "prism/templates/ext/prism/api_node.c.erb"
2425 argv[6] = rb_ary_pop(value_stack);
2426
2427 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismConstantPathAndWriteNode));
2428 break;
2429 }
2430#line 172 "prism/templates/ext/prism/api_node.c.erb"
2431 case PM_CONSTANT_PATH_NODE: {
2433 VALUE argv[8];
2434
2435 // source
2436 argv[0] = source;
2437
2438 // node_id
2439 argv[1] = ULONG2NUM(node->node_id);
2440
2441 // location
2442 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2443
2444 // flags
2445 argv[3] = ULONG2NUM(node->flags);
2446
2447 // parent
2448#line 195 "prism/templates/ext/prism/api_node.c.erb"
2449 argv[4] = rb_ary_pop(value_stack);
2450
2451 // name
2452 argv[5] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
2453
2454 // delimiter_loc
2455#line 220 "prism/templates/ext/prism/api_node.c.erb"
2456 argv[6] = pm_location_new(parser, cast->delimiter_loc.start, cast->delimiter_loc.end);
2457
2458 // name_loc
2459#line 220 "prism/templates/ext/prism/api_node.c.erb"
2460 argv[7] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2461
2462 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismConstantPathNode));
2463 break;
2464 }
2465#line 172 "prism/templates/ext/prism/api_node.c.erb"
2468 VALUE argv[8];
2469
2470 // source
2471 argv[0] = source;
2472
2473 // node_id
2474 argv[1] = ULONG2NUM(node->node_id);
2475
2476 // location
2477 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2478
2479 // flags
2480 argv[3] = ULONG2NUM(node->flags);
2481
2482 // target
2483#line 195 "prism/templates/ext/prism/api_node.c.erb"
2484 argv[4] = rb_ary_pop(value_stack);
2485
2486 // binary_operator_loc
2487#line 220 "prism/templates/ext/prism/api_node.c.erb"
2488 argv[5] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
2489
2490 // value
2491#line 195 "prism/templates/ext/prism/api_node.c.erb"
2492 argv[6] = rb_ary_pop(value_stack);
2493
2494 // binary_operator
2495#line 207 "prism/templates/ext/prism/api_node.c.erb"
2496 assert(cast->binary_operator != 0);
2497 argv[7] = RARRAY_AREF(constants, cast->binary_operator - 1);
2498
2499 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismConstantPathOperatorWriteNode));
2500 break;
2501 }
2502#line 172 "prism/templates/ext/prism/api_node.c.erb"
2505 VALUE argv[7];
2506
2507 // source
2508 argv[0] = source;
2509
2510 // node_id
2511 argv[1] = ULONG2NUM(node->node_id);
2512
2513 // location
2514 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2515
2516 // flags
2517 argv[3] = ULONG2NUM(node->flags);
2518
2519 // target
2520#line 195 "prism/templates/ext/prism/api_node.c.erb"
2521 argv[4] = rb_ary_pop(value_stack);
2522
2523 // operator_loc
2524#line 220 "prism/templates/ext/prism/api_node.c.erb"
2525 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2526
2527 // value
2528#line 195 "prism/templates/ext/prism/api_node.c.erb"
2529 argv[6] = rb_ary_pop(value_stack);
2530
2531 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismConstantPathOrWriteNode));
2532 break;
2533 }
2534#line 172 "prism/templates/ext/prism/api_node.c.erb"
2537 VALUE argv[8];
2538
2539 // source
2540 argv[0] = source;
2541
2542 // node_id
2543 argv[1] = ULONG2NUM(node->node_id);
2544
2545 // location
2546 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2547
2548 // flags
2549 argv[3] = ULONG2NUM(node->flags);
2550
2551 // parent
2552#line 195 "prism/templates/ext/prism/api_node.c.erb"
2553 argv[4] = rb_ary_pop(value_stack);
2554
2555 // name
2556 argv[5] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
2557
2558 // delimiter_loc
2559#line 220 "prism/templates/ext/prism/api_node.c.erb"
2560 argv[6] = pm_location_new(parser, cast->delimiter_loc.start, cast->delimiter_loc.end);
2561
2562 // name_loc
2563#line 220 "prism/templates/ext/prism/api_node.c.erb"
2564 argv[7] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2565
2566 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismConstantPathTargetNode));
2567 break;
2568 }
2569#line 172 "prism/templates/ext/prism/api_node.c.erb"
2572 VALUE argv[7];
2573
2574 // source
2575 argv[0] = source;
2576
2577 // node_id
2578 argv[1] = ULONG2NUM(node->node_id);
2579
2580 // location
2581 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2582
2583 // flags
2584 argv[3] = ULONG2NUM(node->flags);
2585
2586 // target
2587#line 195 "prism/templates/ext/prism/api_node.c.erb"
2588 argv[4] = rb_ary_pop(value_stack);
2589
2590 // operator_loc
2591#line 220 "prism/templates/ext/prism/api_node.c.erb"
2592 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2593
2594 // value
2595#line 195 "prism/templates/ext/prism/api_node.c.erb"
2596 argv[6] = rb_ary_pop(value_stack);
2597
2598 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismConstantPathWriteNode));
2599 break;
2600 }
2601#line 172 "prism/templates/ext/prism/api_node.c.erb"
2602 case PM_CONSTANT_READ_NODE: {
2604 VALUE argv[5];
2605
2606 // source
2607 argv[0] = source;
2608
2609 // node_id
2610 argv[1] = ULONG2NUM(node->node_id);
2611
2612 // location
2613 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2614
2615 // flags
2616 argv[3] = ULONG2NUM(node->flags);
2617
2618 // name
2619#line 207 "prism/templates/ext/prism/api_node.c.erb"
2620 assert(cast->name != 0);
2621 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2622
2623 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismConstantReadNode));
2624 break;
2625 }
2626#line 172 "prism/templates/ext/prism/api_node.c.erb"
2629 VALUE argv[5];
2630
2631 // source
2632 argv[0] = source;
2633
2634 // node_id
2635 argv[1] = ULONG2NUM(node->node_id);
2636
2637 // location
2638 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2639
2640 // flags
2641 argv[3] = ULONG2NUM(node->flags);
2642
2643 // name
2644#line 207 "prism/templates/ext/prism/api_node.c.erb"
2645 assert(cast->name != 0);
2646 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2647
2648 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismConstantTargetNode));
2649 break;
2650 }
2651#line 172 "prism/templates/ext/prism/api_node.c.erb"
2654 VALUE argv[8];
2655
2656 // source
2657 argv[0] = source;
2658
2659 // node_id
2660 argv[1] = ULONG2NUM(node->node_id);
2661
2662 // location
2663 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2664
2665 // flags
2666 argv[3] = ULONG2NUM(node->flags);
2667
2668 // name
2669#line 207 "prism/templates/ext/prism/api_node.c.erb"
2670 assert(cast->name != 0);
2671 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2672
2673 // name_loc
2674#line 220 "prism/templates/ext/prism/api_node.c.erb"
2675 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2676
2677 // value
2678#line 195 "prism/templates/ext/prism/api_node.c.erb"
2679 argv[6] = rb_ary_pop(value_stack);
2680
2681 // operator_loc
2682#line 220 "prism/templates/ext/prism/api_node.c.erb"
2683 argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2684
2685 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismConstantWriteNode));
2686 break;
2687 }
2688#line 172 "prism/templates/ext/prism/api_node.c.erb"
2689 case PM_DEF_NODE: {
2690 pm_def_node_t *cast = (pm_def_node_t *) node;
2691 VALUE argv[16];
2692
2693 // source
2694 argv[0] = source;
2695
2696 // node_id
2697 argv[1] = ULONG2NUM(node->node_id);
2698
2699 // location
2700 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2701
2702 // flags
2703 argv[3] = ULONG2NUM(node->flags);
2704
2705 // name
2706#line 207 "prism/templates/ext/prism/api_node.c.erb"
2707 assert(cast->name != 0);
2708 argv[4] = RARRAY_AREF(constants, cast->name - 1);
2709
2710 // name_loc
2711#line 220 "prism/templates/ext/prism/api_node.c.erb"
2712 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
2713
2714 // receiver
2715#line 195 "prism/templates/ext/prism/api_node.c.erb"
2716 argv[6] = rb_ary_pop(value_stack);
2717
2718 // parameters
2719#line 195 "prism/templates/ext/prism/api_node.c.erb"
2720 argv[7] = rb_ary_pop(value_stack);
2721
2722 // body
2723#line 195 "prism/templates/ext/prism/api_node.c.erb"
2724 argv[8] = rb_ary_pop(value_stack);
2725
2726 // locals
2727#line 213 "prism/templates/ext/prism/api_node.c.erb"
2728 argv[9] = rb_ary_new_capa(cast->locals.size);
2729 for (size_t index = 0; index < cast->locals.size; index++) {
2730 assert(cast->locals.ids[index] != 0);
2731 rb_ary_push(argv[9], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
2732 }
2733
2734 // def_keyword_loc
2735#line 220 "prism/templates/ext/prism/api_node.c.erb"
2736 argv[10] = pm_location_new(parser, cast->def_keyword_loc.start, cast->def_keyword_loc.end);
2737
2738 // operator_loc
2739#line 223 "prism/templates/ext/prism/api_node.c.erb"
2740 argv[11] = cast->operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2741
2742 // lparen_loc
2743#line 223 "prism/templates/ext/prism/api_node.c.erb"
2744 argv[12] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
2745
2746 // rparen_loc
2747#line 223 "prism/templates/ext/prism/api_node.c.erb"
2748 argv[13] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
2749
2750 // equal_loc
2751#line 223 "prism/templates/ext/prism/api_node.c.erb"
2752 argv[14] = cast->equal_loc.start == NULL ? Qnil : pm_location_new(parser, cast->equal_loc.start, cast->equal_loc.end);
2753
2754 // end_keyword_loc
2755#line 223 "prism/templates/ext/prism/api_node.c.erb"
2756 argv[15] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
2757
2758 rb_ary_push(value_stack, rb_class_new_instance(16, argv, rb_cPrismDefNode));
2759 break;
2760 }
2761#line 172 "prism/templates/ext/prism/api_node.c.erb"
2762 case PM_DEFINED_NODE: {
2763 pm_defined_node_t *cast = (pm_defined_node_t *) node;
2764 VALUE argv[8];
2765
2766 // source
2767 argv[0] = source;
2768
2769 // node_id
2770 argv[1] = ULONG2NUM(node->node_id);
2771
2772 // location
2773 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2774
2775 // flags
2776 argv[3] = ULONG2NUM(node->flags);
2777
2778 // lparen_loc
2779#line 223 "prism/templates/ext/prism/api_node.c.erb"
2780 argv[4] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
2781
2782 // value
2783#line 195 "prism/templates/ext/prism/api_node.c.erb"
2784 argv[5] = rb_ary_pop(value_stack);
2785
2786 // rparen_loc
2787#line 223 "prism/templates/ext/prism/api_node.c.erb"
2788 argv[6] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
2789
2790 // keyword_loc
2791#line 220 "prism/templates/ext/prism/api_node.c.erb"
2792 argv[7] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
2793
2794 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismDefinedNode));
2795 break;
2796 }
2797#line 172 "prism/templates/ext/prism/api_node.c.erb"
2798 case PM_ELSE_NODE: {
2799 pm_else_node_t *cast = (pm_else_node_t *) node;
2800 VALUE argv[7];
2801
2802 // source
2803 argv[0] = source;
2804
2805 // node_id
2806 argv[1] = ULONG2NUM(node->node_id);
2807
2808 // location
2809 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2810
2811 // flags
2812 argv[3] = ULONG2NUM(node->flags);
2813
2814 // else_keyword_loc
2815#line 220 "prism/templates/ext/prism/api_node.c.erb"
2816 argv[4] = pm_location_new(parser, cast->else_keyword_loc.start, cast->else_keyword_loc.end);
2817
2818 // statements
2819#line 195 "prism/templates/ext/prism/api_node.c.erb"
2820 argv[5] = rb_ary_pop(value_stack);
2821
2822 // end_keyword_loc
2823#line 223 "prism/templates/ext/prism/api_node.c.erb"
2824 argv[6] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
2825
2826 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismElseNode));
2827 break;
2828 }
2829#line 172 "prism/templates/ext/prism/api_node.c.erb"
2832 VALUE argv[7];
2833
2834 // source
2835 argv[0] = source;
2836
2837 // node_id
2838 argv[1] = ULONG2NUM(node->node_id);
2839
2840 // location
2841 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2842
2843 // flags
2844 argv[3] = ULONG2NUM(node->flags);
2845
2846 // opening_loc
2847#line 220 "prism/templates/ext/prism/api_node.c.erb"
2848 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
2849
2850 // statements
2851#line 195 "prism/templates/ext/prism/api_node.c.erb"
2852 argv[5] = rb_ary_pop(value_stack);
2853
2854 // closing_loc
2855#line 220 "prism/templates/ext/prism/api_node.c.erb"
2856 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
2857
2858 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismEmbeddedStatementsNode));
2859 break;
2860 }
2861#line 172 "prism/templates/ext/prism/api_node.c.erb"
2864 VALUE argv[6];
2865
2866 // source
2867 argv[0] = source;
2868
2869 // node_id
2870 argv[1] = ULONG2NUM(node->node_id);
2871
2872 // location
2873 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2874
2875 // flags
2876 argv[3] = ULONG2NUM(node->flags);
2877
2878 // operator_loc
2879#line 220 "prism/templates/ext/prism/api_node.c.erb"
2880 argv[4] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
2881
2882 // variable
2883#line 195 "prism/templates/ext/prism/api_node.c.erb"
2884 argv[5] = rb_ary_pop(value_stack);
2885
2886 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismEmbeddedVariableNode));
2887 break;
2888 }
2889#line 172 "prism/templates/ext/prism/api_node.c.erb"
2890 case PM_ENSURE_NODE: {
2891 pm_ensure_node_t *cast = (pm_ensure_node_t *) node;
2892 VALUE argv[7];
2893
2894 // source
2895 argv[0] = source;
2896
2897 // node_id
2898 argv[1] = ULONG2NUM(node->node_id);
2899
2900 // location
2901 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2902
2903 // flags
2904 argv[3] = ULONG2NUM(node->flags);
2905
2906 // ensure_keyword_loc
2907#line 220 "prism/templates/ext/prism/api_node.c.erb"
2908 argv[4] = pm_location_new(parser, cast->ensure_keyword_loc.start, cast->ensure_keyword_loc.end);
2909
2910 // statements
2911#line 195 "prism/templates/ext/prism/api_node.c.erb"
2912 argv[5] = rb_ary_pop(value_stack);
2913
2914 // end_keyword_loc
2915#line 220 "prism/templates/ext/prism/api_node.c.erb"
2916 argv[6] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
2917
2918 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismEnsureNode));
2919 break;
2920 }
2921#line 172 "prism/templates/ext/prism/api_node.c.erb"
2922 case PM_FALSE_NODE: {
2923 VALUE argv[4];
2924
2925 // source
2926 argv[0] = source;
2927
2928 // node_id
2929 argv[1] = ULONG2NUM(node->node_id);
2930
2931 // location
2932 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2933
2934 // flags
2935 argv[3] = ULONG2NUM(node->flags);
2936
2937 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismFalseNode));
2938 break;
2939 }
2940#line 172 "prism/templates/ext/prism/api_node.c.erb"
2941 case PM_FIND_PATTERN_NODE: {
2943 VALUE argv[10];
2944
2945 // source
2946 argv[0] = source;
2947
2948 // node_id
2949 argv[1] = ULONG2NUM(node->node_id);
2950
2951 // location
2952 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
2953
2954 // flags
2955 argv[3] = ULONG2NUM(node->flags);
2956
2957 // constant
2958#line 195 "prism/templates/ext/prism/api_node.c.erb"
2959 argv[4] = rb_ary_pop(value_stack);
2960
2961 // left
2962#line 195 "prism/templates/ext/prism/api_node.c.erb"
2963 argv[5] = rb_ary_pop(value_stack);
2964
2965 // requireds
2966#line 198 "prism/templates/ext/prism/api_node.c.erb"
2967 argv[6] = rb_ary_new_capa(cast->requireds.size);
2968 for (size_t index = 0; index < cast->requireds.size; index++) {
2969 rb_ary_push(argv[6], rb_ary_pop(value_stack));
2970 }
2971
2972 // right
2973#line 195 "prism/templates/ext/prism/api_node.c.erb"
2974 argv[7] = rb_ary_pop(value_stack);
2975
2976 // opening_loc
2977#line 223 "prism/templates/ext/prism/api_node.c.erb"
2978 argv[8] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
2979
2980 // closing_loc
2981#line 223 "prism/templates/ext/prism/api_node.c.erb"
2982 argv[9] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
2983
2984 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismFindPatternNode));
2985 break;
2986 }
2987#line 172 "prism/templates/ext/prism/api_node.c.erb"
2988 case PM_FLIP_FLOP_NODE: {
2990 VALUE argv[7];
2991
2992 // source
2993 argv[0] = source;
2994
2995 // node_id
2996 argv[1] = ULONG2NUM(node->node_id);
2997
2998 // location
2999 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3000
3001 // flags
3002 argv[3] = ULONG2NUM(node->flags);
3003
3004 // left
3005#line 195 "prism/templates/ext/prism/api_node.c.erb"
3006 argv[4] = rb_ary_pop(value_stack);
3007
3008 // right
3009#line 195 "prism/templates/ext/prism/api_node.c.erb"
3010 argv[5] = rb_ary_pop(value_stack);
3011
3012 // operator_loc
3013#line 220 "prism/templates/ext/prism/api_node.c.erb"
3014 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3015
3016 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismFlipFlopNode));
3017 break;
3018 }
3019#line 172 "prism/templates/ext/prism/api_node.c.erb"
3020 case PM_FLOAT_NODE: {
3021 pm_float_node_t *cast = (pm_float_node_t *) node;
3022 VALUE argv[5];
3023
3024 // source
3025 argv[0] = source;
3026
3027 // node_id
3028 argv[1] = ULONG2NUM(node->node_id);
3029
3030 // location
3031 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3032
3033 // flags
3034 argv[3] = ULONG2NUM(node->flags);
3035
3036 // value
3037#line 235 "prism/templates/ext/prism/api_node.c.erb"
3038 argv[4] = DBL2NUM(cast->value);
3039
3040 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismFloatNode));
3041 break;
3042 }
3043#line 172 "prism/templates/ext/prism/api_node.c.erb"
3044 case PM_FOR_NODE: {
3045 pm_for_node_t *cast = (pm_for_node_t *) node;
3046 VALUE argv[11];
3047
3048 // source
3049 argv[0] = source;
3050
3051 // node_id
3052 argv[1] = ULONG2NUM(node->node_id);
3053
3054 // location
3055 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3056
3057 // flags
3058 argv[3] = ULONG2NUM(node->flags);
3059
3060 // index
3061#line 195 "prism/templates/ext/prism/api_node.c.erb"
3062 argv[4] = rb_ary_pop(value_stack);
3063
3064 // collection
3065#line 195 "prism/templates/ext/prism/api_node.c.erb"
3066 argv[5] = rb_ary_pop(value_stack);
3067
3068 // statements
3069#line 195 "prism/templates/ext/prism/api_node.c.erb"
3070 argv[6] = rb_ary_pop(value_stack);
3071
3072 // for_keyword_loc
3073#line 220 "prism/templates/ext/prism/api_node.c.erb"
3074 argv[7] = pm_location_new(parser, cast->for_keyword_loc.start, cast->for_keyword_loc.end);
3075
3076 // in_keyword_loc
3077#line 220 "prism/templates/ext/prism/api_node.c.erb"
3078 argv[8] = pm_location_new(parser, cast->in_keyword_loc.start, cast->in_keyword_loc.end);
3079
3080 // do_keyword_loc
3081#line 223 "prism/templates/ext/prism/api_node.c.erb"
3082 argv[9] = cast->do_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->do_keyword_loc.start, cast->do_keyword_loc.end);
3083
3084 // end_keyword_loc
3085#line 220 "prism/templates/ext/prism/api_node.c.erb"
3086 argv[10] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
3087
3088 rb_ary_push(value_stack, rb_class_new_instance(11, argv, rb_cPrismForNode));
3089 break;
3090 }
3091#line 172 "prism/templates/ext/prism/api_node.c.erb"
3093 VALUE argv[4];
3094
3095 // source
3096 argv[0] = source;
3097
3098 // node_id
3099 argv[1] = ULONG2NUM(node->node_id);
3100
3101 // location
3102 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3103
3104 // flags
3105 argv[3] = ULONG2NUM(node->flags);
3106
3107 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismForwardingArgumentsNode));
3108 break;
3109 }
3110#line 172 "prism/templates/ext/prism/api_node.c.erb"
3112 VALUE argv[4];
3113
3114 // source
3115 argv[0] = source;
3116
3117 // node_id
3118 argv[1] = ULONG2NUM(node->node_id);
3119
3120 // location
3121 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3122
3123 // flags
3124 argv[3] = ULONG2NUM(node->flags);
3125
3126 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismForwardingParameterNode));
3127 break;
3128 }
3129#line 172 "prism/templates/ext/prism/api_node.c.erb"
3131 VALUE argv[5];
3132
3133 // source
3134 argv[0] = source;
3135
3136 // node_id
3137 argv[1] = ULONG2NUM(node->node_id);
3138
3139 // location
3140 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3141
3142 // flags
3143 argv[3] = ULONG2NUM(node->flags);
3144
3145 // block
3146#line 195 "prism/templates/ext/prism/api_node.c.erb"
3147 argv[4] = rb_ary_pop(value_stack);
3148
3149 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismForwardingSuperNode));
3150 break;
3151 }
3152#line 172 "prism/templates/ext/prism/api_node.c.erb"
3155 VALUE argv[8];
3156
3157 // source
3158 argv[0] = source;
3159
3160 // node_id
3161 argv[1] = ULONG2NUM(node->node_id);
3162
3163 // location
3164 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3165
3166 // flags
3167 argv[3] = ULONG2NUM(node->flags);
3168
3169 // name
3170#line 207 "prism/templates/ext/prism/api_node.c.erb"
3171 assert(cast->name != 0);
3172 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3173
3174 // name_loc
3175#line 220 "prism/templates/ext/prism/api_node.c.erb"
3176 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3177
3178 // operator_loc
3179#line 220 "prism/templates/ext/prism/api_node.c.erb"
3180 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3181
3182 // value
3183#line 195 "prism/templates/ext/prism/api_node.c.erb"
3184 argv[7] = rb_ary_pop(value_stack);
3185
3186 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismGlobalVariableAndWriteNode));
3187 break;
3188 }
3189#line 172 "prism/templates/ext/prism/api_node.c.erb"
3192 VALUE argv[9];
3193
3194 // source
3195 argv[0] = source;
3196
3197 // node_id
3198 argv[1] = ULONG2NUM(node->node_id);
3199
3200 // location
3201 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3202
3203 // flags
3204 argv[3] = ULONG2NUM(node->flags);
3205
3206 // name
3207#line 207 "prism/templates/ext/prism/api_node.c.erb"
3208 assert(cast->name != 0);
3209 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3210
3211 // name_loc
3212#line 220 "prism/templates/ext/prism/api_node.c.erb"
3213 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3214
3215 // binary_operator_loc
3216#line 220 "prism/templates/ext/prism/api_node.c.erb"
3217 argv[6] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
3218
3219 // value
3220#line 195 "prism/templates/ext/prism/api_node.c.erb"
3221 argv[7] = rb_ary_pop(value_stack);
3222
3223 // binary_operator
3224#line 207 "prism/templates/ext/prism/api_node.c.erb"
3225 assert(cast->binary_operator != 0);
3226 argv[8] = RARRAY_AREF(constants, cast->binary_operator - 1);
3227
3228 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismGlobalVariableOperatorWriteNode));
3229 break;
3230 }
3231#line 172 "prism/templates/ext/prism/api_node.c.erb"
3234 VALUE argv[8];
3235
3236 // source
3237 argv[0] = source;
3238
3239 // node_id
3240 argv[1] = ULONG2NUM(node->node_id);
3241
3242 // location
3243 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3244
3245 // flags
3246 argv[3] = ULONG2NUM(node->flags);
3247
3248 // name
3249#line 207 "prism/templates/ext/prism/api_node.c.erb"
3250 assert(cast->name != 0);
3251 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3252
3253 // name_loc
3254#line 220 "prism/templates/ext/prism/api_node.c.erb"
3255 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3256
3257 // operator_loc
3258#line 220 "prism/templates/ext/prism/api_node.c.erb"
3259 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3260
3261 // value
3262#line 195 "prism/templates/ext/prism/api_node.c.erb"
3263 argv[7] = rb_ary_pop(value_stack);
3264
3265 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismGlobalVariableOrWriteNode));
3266 break;
3267 }
3268#line 172 "prism/templates/ext/prism/api_node.c.erb"
3271 VALUE argv[5];
3272
3273 // source
3274 argv[0] = source;
3275
3276 // node_id
3277 argv[1] = ULONG2NUM(node->node_id);
3278
3279 // location
3280 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3281
3282 // flags
3283 argv[3] = ULONG2NUM(node->flags);
3284
3285 // name
3286#line 207 "prism/templates/ext/prism/api_node.c.erb"
3287 assert(cast->name != 0);
3288 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3289
3290 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismGlobalVariableReadNode));
3291 break;
3292 }
3293#line 172 "prism/templates/ext/prism/api_node.c.erb"
3296 VALUE argv[5];
3297
3298 // source
3299 argv[0] = source;
3300
3301 // node_id
3302 argv[1] = ULONG2NUM(node->node_id);
3303
3304 // location
3305 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3306
3307 // flags
3308 argv[3] = ULONG2NUM(node->flags);
3309
3310 // name
3311#line 207 "prism/templates/ext/prism/api_node.c.erb"
3312 assert(cast->name != 0);
3313 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3314
3315 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismGlobalVariableTargetNode));
3316 break;
3317 }
3318#line 172 "prism/templates/ext/prism/api_node.c.erb"
3321 VALUE argv[8];
3322
3323 // source
3324 argv[0] = source;
3325
3326 // node_id
3327 argv[1] = ULONG2NUM(node->node_id);
3328
3329 // location
3330 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3331
3332 // flags
3333 argv[3] = ULONG2NUM(node->flags);
3334
3335 // name
3336#line 207 "prism/templates/ext/prism/api_node.c.erb"
3337 assert(cast->name != 0);
3338 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3339
3340 // name_loc
3341#line 220 "prism/templates/ext/prism/api_node.c.erb"
3342 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3343
3344 // value
3345#line 195 "prism/templates/ext/prism/api_node.c.erb"
3346 argv[6] = rb_ary_pop(value_stack);
3347
3348 // operator_loc
3349#line 220 "prism/templates/ext/prism/api_node.c.erb"
3350 argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3351
3352 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismGlobalVariableWriteNode));
3353 break;
3354 }
3355#line 172 "prism/templates/ext/prism/api_node.c.erb"
3356 case PM_HASH_NODE: {
3357 pm_hash_node_t *cast = (pm_hash_node_t *) node;
3358 VALUE argv[7];
3359
3360 // source
3361 argv[0] = source;
3362
3363 // node_id
3364 argv[1] = ULONG2NUM(node->node_id);
3365
3366 // location
3367 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3368
3369 // flags
3370 argv[3] = ULONG2NUM(node->flags);
3371
3372 // opening_loc
3373#line 220 "prism/templates/ext/prism/api_node.c.erb"
3374 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
3375
3376 // elements
3377#line 198 "prism/templates/ext/prism/api_node.c.erb"
3378 argv[5] = rb_ary_new_capa(cast->elements.size);
3379 for (size_t index = 0; index < cast->elements.size; index++) {
3380 rb_ary_push(argv[5], rb_ary_pop(value_stack));
3381 }
3382
3383 // closing_loc
3384#line 220 "prism/templates/ext/prism/api_node.c.erb"
3385 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
3386
3387 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismHashNode));
3388 break;
3389 }
3390#line 172 "prism/templates/ext/prism/api_node.c.erb"
3391 case PM_HASH_PATTERN_NODE: {
3393 VALUE argv[9];
3394
3395 // source
3396 argv[0] = source;
3397
3398 // node_id
3399 argv[1] = ULONG2NUM(node->node_id);
3400
3401 // location
3402 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3403
3404 // flags
3405 argv[3] = ULONG2NUM(node->flags);
3406
3407 // constant
3408#line 195 "prism/templates/ext/prism/api_node.c.erb"
3409 argv[4] = rb_ary_pop(value_stack);
3410
3411 // elements
3412#line 198 "prism/templates/ext/prism/api_node.c.erb"
3413 argv[5] = rb_ary_new_capa(cast->elements.size);
3414 for (size_t index = 0; index < cast->elements.size; index++) {
3415 rb_ary_push(argv[5], rb_ary_pop(value_stack));
3416 }
3417
3418 // rest
3419#line 195 "prism/templates/ext/prism/api_node.c.erb"
3420 argv[6] = rb_ary_pop(value_stack);
3421
3422 // opening_loc
3423#line 223 "prism/templates/ext/prism/api_node.c.erb"
3424 argv[7] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
3425
3426 // closing_loc
3427#line 223 "prism/templates/ext/prism/api_node.c.erb"
3428 argv[8] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
3429
3430 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismHashPatternNode));
3431 break;
3432 }
3433#line 172 "prism/templates/ext/prism/api_node.c.erb"
3434 case PM_IF_NODE: {
3435 pm_if_node_t *cast = (pm_if_node_t *) node;
3436 VALUE argv[10];
3437
3438 // source
3439 argv[0] = source;
3440
3441 // node_id
3442 argv[1] = ULONG2NUM(node->node_id);
3443
3444 // location
3445 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3446
3447 // flags
3448 argv[3] = ULONG2NUM(node->flags);
3449
3450 // if_keyword_loc
3451#line 223 "prism/templates/ext/prism/api_node.c.erb"
3452 argv[4] = cast->if_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->if_keyword_loc.start, cast->if_keyword_loc.end);
3453
3454 // predicate
3455#line 195 "prism/templates/ext/prism/api_node.c.erb"
3456 argv[5] = rb_ary_pop(value_stack);
3457
3458 // then_keyword_loc
3459#line 223 "prism/templates/ext/prism/api_node.c.erb"
3460 argv[6] = cast->then_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->then_keyword_loc.start, cast->then_keyword_loc.end);
3461
3462 // statements
3463#line 195 "prism/templates/ext/prism/api_node.c.erb"
3464 argv[7] = rb_ary_pop(value_stack);
3465
3466 // subsequent
3467#line 195 "prism/templates/ext/prism/api_node.c.erb"
3468 argv[8] = rb_ary_pop(value_stack);
3469
3470 // end_keyword_loc
3471#line 223 "prism/templates/ext/prism/api_node.c.erb"
3472 argv[9] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
3473
3474 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismIfNode));
3475 break;
3476 }
3477#line 172 "prism/templates/ext/prism/api_node.c.erb"
3478 case PM_IMAGINARY_NODE: {
3479 VALUE argv[5];
3480
3481 // source
3482 argv[0] = source;
3483
3484 // node_id
3485 argv[1] = ULONG2NUM(node->node_id);
3486
3487 // location
3488 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3489
3490 // flags
3491 argv[3] = ULONG2NUM(node->flags);
3492
3493 // numeric
3494#line 195 "prism/templates/ext/prism/api_node.c.erb"
3495 argv[4] = rb_ary_pop(value_stack);
3496
3497 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismImaginaryNode));
3498 break;
3499 }
3500#line 172 "prism/templates/ext/prism/api_node.c.erb"
3501 case PM_IMPLICIT_NODE: {
3502 VALUE argv[5];
3503
3504 // source
3505 argv[0] = source;
3506
3507 // node_id
3508 argv[1] = ULONG2NUM(node->node_id);
3509
3510 // location
3511 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3512
3513 // flags
3514 argv[3] = ULONG2NUM(node->flags);
3515
3516 // value
3517#line 195 "prism/templates/ext/prism/api_node.c.erb"
3518 argv[4] = rb_ary_pop(value_stack);
3519
3520 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismImplicitNode));
3521 break;
3522 }
3523#line 172 "prism/templates/ext/prism/api_node.c.erb"
3524 case PM_IMPLICIT_REST_NODE: {
3525 VALUE argv[4];
3526
3527 // source
3528 argv[0] = source;
3529
3530 // node_id
3531 argv[1] = ULONG2NUM(node->node_id);
3532
3533 // location
3534 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3535
3536 // flags
3537 argv[3] = ULONG2NUM(node->flags);
3538
3539 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismImplicitRestNode));
3540 break;
3541 }
3542#line 172 "prism/templates/ext/prism/api_node.c.erb"
3543 case PM_IN_NODE: {
3544 pm_in_node_t *cast = (pm_in_node_t *) node;
3545 VALUE argv[8];
3546
3547 // source
3548 argv[0] = source;
3549
3550 // node_id
3551 argv[1] = ULONG2NUM(node->node_id);
3552
3553 // location
3554 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3555
3556 // flags
3557 argv[3] = ULONG2NUM(node->flags);
3558
3559 // pattern
3560#line 195 "prism/templates/ext/prism/api_node.c.erb"
3561 argv[4] = rb_ary_pop(value_stack);
3562
3563 // statements
3564#line 195 "prism/templates/ext/prism/api_node.c.erb"
3565 argv[5] = rb_ary_pop(value_stack);
3566
3567 // in_loc
3568#line 220 "prism/templates/ext/prism/api_node.c.erb"
3569 argv[6] = pm_location_new(parser, cast->in_loc.start, cast->in_loc.end);
3570
3571 // then_loc
3572#line 223 "prism/templates/ext/prism/api_node.c.erb"
3573 argv[7] = cast->then_loc.start == NULL ? Qnil : pm_location_new(parser, cast->then_loc.start, cast->then_loc.end);
3574
3575 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismInNode));
3576 break;
3577 }
3578#line 172 "prism/templates/ext/prism/api_node.c.erb"
3581 VALUE argv[12];
3582
3583 // source
3584 argv[0] = source;
3585
3586 // node_id
3587 argv[1] = ULONG2NUM(node->node_id);
3588
3589 // location
3590 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3591
3592 // flags
3593 argv[3] = ULONG2NUM(node->flags);
3594
3595 // receiver
3596#line 195 "prism/templates/ext/prism/api_node.c.erb"
3597 argv[4] = rb_ary_pop(value_stack);
3598
3599 // call_operator_loc
3600#line 223 "prism/templates/ext/prism/api_node.c.erb"
3601 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
3602
3603 // opening_loc
3604#line 220 "prism/templates/ext/prism/api_node.c.erb"
3605 argv[6] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
3606
3607 // arguments
3608#line 195 "prism/templates/ext/prism/api_node.c.erb"
3609 argv[7] = rb_ary_pop(value_stack);
3610
3611 // closing_loc
3612#line 220 "prism/templates/ext/prism/api_node.c.erb"
3613 argv[8] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
3614
3615 // block
3616#line 195 "prism/templates/ext/prism/api_node.c.erb"
3617 argv[9] = rb_ary_pop(value_stack);
3618
3619 // operator_loc
3620#line 220 "prism/templates/ext/prism/api_node.c.erb"
3621 argv[10] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3622
3623 // value
3624#line 195 "prism/templates/ext/prism/api_node.c.erb"
3625 argv[11] = rb_ary_pop(value_stack);
3626
3627 rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismIndexAndWriteNode));
3628 break;
3629 }
3630#line 172 "prism/templates/ext/prism/api_node.c.erb"
3633 VALUE argv[13];
3634
3635 // source
3636 argv[0] = source;
3637
3638 // node_id
3639 argv[1] = ULONG2NUM(node->node_id);
3640
3641 // location
3642 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3643
3644 // flags
3645 argv[3] = ULONG2NUM(node->flags);
3646
3647 // receiver
3648#line 195 "prism/templates/ext/prism/api_node.c.erb"
3649 argv[4] = rb_ary_pop(value_stack);
3650
3651 // call_operator_loc
3652#line 223 "prism/templates/ext/prism/api_node.c.erb"
3653 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
3654
3655 // opening_loc
3656#line 220 "prism/templates/ext/prism/api_node.c.erb"
3657 argv[6] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
3658
3659 // arguments
3660#line 195 "prism/templates/ext/prism/api_node.c.erb"
3661 argv[7] = rb_ary_pop(value_stack);
3662
3663 // closing_loc
3664#line 220 "prism/templates/ext/prism/api_node.c.erb"
3665 argv[8] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
3666
3667 // block
3668#line 195 "prism/templates/ext/prism/api_node.c.erb"
3669 argv[9] = rb_ary_pop(value_stack);
3670
3671 // binary_operator
3672#line 207 "prism/templates/ext/prism/api_node.c.erb"
3673 assert(cast->binary_operator != 0);
3674 argv[10] = RARRAY_AREF(constants, cast->binary_operator - 1);
3675
3676 // binary_operator_loc
3677#line 220 "prism/templates/ext/prism/api_node.c.erb"
3678 argv[11] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
3679
3680 // value
3681#line 195 "prism/templates/ext/prism/api_node.c.erb"
3682 argv[12] = rb_ary_pop(value_stack);
3683
3684 rb_ary_push(value_stack, rb_class_new_instance(13, argv, rb_cPrismIndexOperatorWriteNode));
3685 break;
3686 }
3687#line 172 "prism/templates/ext/prism/api_node.c.erb"
3690 VALUE argv[12];
3691
3692 // source
3693 argv[0] = source;
3694
3695 // node_id
3696 argv[1] = ULONG2NUM(node->node_id);
3697
3698 // location
3699 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3700
3701 // flags
3702 argv[3] = ULONG2NUM(node->flags);
3703
3704 // receiver
3705#line 195 "prism/templates/ext/prism/api_node.c.erb"
3706 argv[4] = rb_ary_pop(value_stack);
3707
3708 // call_operator_loc
3709#line 223 "prism/templates/ext/prism/api_node.c.erb"
3710 argv[5] = cast->call_operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->call_operator_loc.start, cast->call_operator_loc.end);
3711
3712 // opening_loc
3713#line 220 "prism/templates/ext/prism/api_node.c.erb"
3714 argv[6] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
3715
3716 // arguments
3717#line 195 "prism/templates/ext/prism/api_node.c.erb"
3718 argv[7] = rb_ary_pop(value_stack);
3719
3720 // closing_loc
3721#line 220 "prism/templates/ext/prism/api_node.c.erb"
3722 argv[8] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
3723
3724 // block
3725#line 195 "prism/templates/ext/prism/api_node.c.erb"
3726 argv[9] = rb_ary_pop(value_stack);
3727
3728 // operator_loc
3729#line 220 "prism/templates/ext/prism/api_node.c.erb"
3730 argv[10] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3731
3732 // value
3733#line 195 "prism/templates/ext/prism/api_node.c.erb"
3734 argv[11] = rb_ary_pop(value_stack);
3735
3736 rb_ary_push(value_stack, rb_class_new_instance(12, argv, rb_cPrismIndexOrWriteNode));
3737 break;
3738 }
3739#line 172 "prism/templates/ext/prism/api_node.c.erb"
3740 case PM_INDEX_TARGET_NODE: {
3742 VALUE argv[9];
3743
3744 // source
3745 argv[0] = source;
3746
3747 // node_id
3748 argv[1] = ULONG2NUM(node->node_id);
3749
3750 // location
3751 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3752
3753 // flags
3754 argv[3] = ULONG2NUM(node->flags);
3755
3756 // receiver
3757#line 195 "prism/templates/ext/prism/api_node.c.erb"
3758 argv[4] = rb_ary_pop(value_stack);
3759
3760 // opening_loc
3761#line 220 "prism/templates/ext/prism/api_node.c.erb"
3762 argv[5] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
3763
3764 // arguments
3765#line 195 "prism/templates/ext/prism/api_node.c.erb"
3766 argv[6] = rb_ary_pop(value_stack);
3767
3768 // closing_loc
3769#line 220 "prism/templates/ext/prism/api_node.c.erb"
3770 argv[7] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
3771
3772 // block
3773#line 195 "prism/templates/ext/prism/api_node.c.erb"
3774 argv[8] = rb_ary_pop(value_stack);
3775
3776 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismIndexTargetNode));
3777 break;
3778 }
3779#line 172 "prism/templates/ext/prism/api_node.c.erb"
3782 VALUE argv[8];
3783
3784 // source
3785 argv[0] = source;
3786
3787 // node_id
3788 argv[1] = ULONG2NUM(node->node_id);
3789
3790 // location
3791 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3792
3793 // flags
3794 argv[3] = ULONG2NUM(node->flags);
3795
3796 // name
3797#line 207 "prism/templates/ext/prism/api_node.c.erb"
3798 assert(cast->name != 0);
3799 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3800
3801 // name_loc
3802#line 220 "prism/templates/ext/prism/api_node.c.erb"
3803 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3804
3805 // operator_loc
3806#line 220 "prism/templates/ext/prism/api_node.c.erb"
3807 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3808
3809 // value
3810#line 195 "prism/templates/ext/prism/api_node.c.erb"
3811 argv[7] = rb_ary_pop(value_stack);
3812
3813 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismInstanceVariableAndWriteNode));
3814 break;
3815 }
3816#line 172 "prism/templates/ext/prism/api_node.c.erb"
3819 VALUE argv[9];
3820
3821 // source
3822 argv[0] = source;
3823
3824 // node_id
3825 argv[1] = ULONG2NUM(node->node_id);
3826
3827 // location
3828 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3829
3830 // flags
3831 argv[3] = ULONG2NUM(node->flags);
3832
3833 // name
3834#line 207 "prism/templates/ext/prism/api_node.c.erb"
3835 assert(cast->name != 0);
3836 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3837
3838 // name_loc
3839#line 220 "prism/templates/ext/prism/api_node.c.erb"
3840 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3841
3842 // binary_operator_loc
3843#line 220 "prism/templates/ext/prism/api_node.c.erb"
3844 argv[6] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
3845
3846 // value
3847#line 195 "prism/templates/ext/prism/api_node.c.erb"
3848 argv[7] = rb_ary_pop(value_stack);
3849
3850 // binary_operator
3851#line 207 "prism/templates/ext/prism/api_node.c.erb"
3852 assert(cast->binary_operator != 0);
3853 argv[8] = RARRAY_AREF(constants, cast->binary_operator - 1);
3854
3855 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismInstanceVariableOperatorWriteNode));
3856 break;
3857 }
3858#line 172 "prism/templates/ext/prism/api_node.c.erb"
3861 VALUE argv[8];
3862
3863 // source
3864 argv[0] = source;
3865
3866 // node_id
3867 argv[1] = ULONG2NUM(node->node_id);
3868
3869 // location
3870 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3871
3872 // flags
3873 argv[3] = ULONG2NUM(node->flags);
3874
3875 // name
3876#line 207 "prism/templates/ext/prism/api_node.c.erb"
3877 assert(cast->name != 0);
3878 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3879
3880 // name_loc
3881#line 220 "prism/templates/ext/prism/api_node.c.erb"
3882 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3883
3884 // operator_loc
3885#line 220 "prism/templates/ext/prism/api_node.c.erb"
3886 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3887
3888 // value
3889#line 195 "prism/templates/ext/prism/api_node.c.erb"
3890 argv[7] = rb_ary_pop(value_stack);
3891
3892 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismInstanceVariableOrWriteNode));
3893 break;
3894 }
3895#line 172 "prism/templates/ext/prism/api_node.c.erb"
3898 VALUE argv[5];
3899
3900 // source
3901 argv[0] = source;
3902
3903 // node_id
3904 argv[1] = ULONG2NUM(node->node_id);
3905
3906 // location
3907 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3908
3909 // flags
3910 argv[3] = ULONG2NUM(node->flags);
3911
3912 // name
3913#line 207 "prism/templates/ext/prism/api_node.c.erb"
3914 assert(cast->name != 0);
3915 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3916
3917 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismInstanceVariableReadNode));
3918 break;
3919 }
3920#line 172 "prism/templates/ext/prism/api_node.c.erb"
3923 VALUE argv[5];
3924
3925 // source
3926 argv[0] = source;
3927
3928 // node_id
3929 argv[1] = ULONG2NUM(node->node_id);
3930
3931 // location
3932 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3933
3934 // flags
3935 argv[3] = ULONG2NUM(node->flags);
3936
3937 // name
3938#line 207 "prism/templates/ext/prism/api_node.c.erb"
3939 assert(cast->name != 0);
3940 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3941
3942 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismInstanceVariableTargetNode));
3943 break;
3944 }
3945#line 172 "prism/templates/ext/prism/api_node.c.erb"
3948 VALUE argv[8];
3949
3950 // source
3951 argv[0] = source;
3952
3953 // node_id
3954 argv[1] = ULONG2NUM(node->node_id);
3955
3956 // location
3957 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3958
3959 // flags
3960 argv[3] = ULONG2NUM(node->flags);
3961
3962 // name
3963#line 207 "prism/templates/ext/prism/api_node.c.erb"
3964 assert(cast->name != 0);
3965 argv[4] = RARRAY_AREF(constants, cast->name - 1);
3966
3967 // name_loc
3968#line 220 "prism/templates/ext/prism/api_node.c.erb"
3969 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
3970
3971 // value
3972#line 195 "prism/templates/ext/prism/api_node.c.erb"
3973 argv[6] = rb_ary_pop(value_stack);
3974
3975 // operator_loc
3976#line 220 "prism/templates/ext/prism/api_node.c.erb"
3977 argv[7] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
3978
3979 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismInstanceVariableWriteNode));
3980 break;
3981 }
3982#line 172 "prism/templates/ext/prism/api_node.c.erb"
3983 case PM_INTEGER_NODE: {
3984 pm_integer_node_t *cast = (pm_integer_node_t *) node;
3985 VALUE argv[5];
3986
3987 // source
3988 argv[0] = source;
3989
3990 // node_id
3991 argv[1] = ULONG2NUM(node->node_id);
3992
3993 // location
3994 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
3995
3996 // flags
3997 argv[3] = ULONG2NUM(node->flags);
3998
3999 // value
4000#line 232 "prism/templates/ext/prism/api_node.c.erb"
4001 argv[4] = pm_integer_new(&cast->value);
4002
4003 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismIntegerNode));
4004 break;
4005 }
4006#line 172 "prism/templates/ext/prism/api_node.c.erb"
4009 VALUE argv[7];
4010
4011 // source
4012 argv[0] = source;
4013
4014 // node_id
4015 argv[1] = ULONG2NUM(node->node_id);
4016
4017 // location
4018 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4019
4020 // flags
4021 argv[3] = ULONG2NUM(node->flags);
4022
4023 // opening_loc
4024#line 220 "prism/templates/ext/prism/api_node.c.erb"
4025 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4026
4027 // parts
4028#line 198 "prism/templates/ext/prism/api_node.c.erb"
4029 argv[5] = rb_ary_new_capa(cast->parts.size);
4030 for (size_t index = 0; index < cast->parts.size; index++) {
4031 rb_ary_push(argv[5], rb_ary_pop(value_stack));
4032 }
4033
4034 // closing_loc
4035#line 220 "prism/templates/ext/prism/api_node.c.erb"
4036 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4037
4038 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismInterpolatedMatchLastLineNode));
4039 break;
4040 }
4041#line 172 "prism/templates/ext/prism/api_node.c.erb"
4044 VALUE argv[7];
4045
4046 // source
4047 argv[0] = source;
4048
4049 // node_id
4050 argv[1] = ULONG2NUM(node->node_id);
4051
4052 // location
4053 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4054
4055 // flags
4056 argv[3] = ULONG2NUM(node->flags);
4057
4058 // opening_loc
4059#line 220 "prism/templates/ext/prism/api_node.c.erb"
4060 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4061
4062 // parts
4063#line 198 "prism/templates/ext/prism/api_node.c.erb"
4064 argv[5] = rb_ary_new_capa(cast->parts.size);
4065 for (size_t index = 0; index < cast->parts.size; index++) {
4066 rb_ary_push(argv[5], rb_ary_pop(value_stack));
4067 }
4068
4069 // closing_loc
4070#line 220 "prism/templates/ext/prism/api_node.c.erb"
4071 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4072
4073 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismInterpolatedRegularExpressionNode));
4074 break;
4075 }
4076#line 172 "prism/templates/ext/prism/api_node.c.erb"
4079 VALUE argv[7];
4080
4081 // source
4082 argv[0] = source;
4083
4084 // node_id
4085 argv[1] = ULONG2NUM(node->node_id);
4086
4087 // location
4088 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4089
4090 // flags
4091 argv[3] = ULONG2NUM(node->flags);
4092
4093 // opening_loc
4094#line 223 "prism/templates/ext/prism/api_node.c.erb"
4095 argv[4] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4096
4097 // parts
4098#line 198 "prism/templates/ext/prism/api_node.c.erb"
4099 argv[5] = rb_ary_new_capa(cast->parts.size);
4100 for (size_t index = 0; index < cast->parts.size; index++) {
4101 rb_ary_push(argv[5], rb_ary_pop(value_stack));
4102 }
4103
4104 // closing_loc
4105#line 223 "prism/templates/ext/prism/api_node.c.erb"
4106 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4107
4108 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismInterpolatedStringNode));
4109 break;
4110 }
4111#line 172 "prism/templates/ext/prism/api_node.c.erb"
4114 VALUE argv[7];
4115
4116 // source
4117 argv[0] = source;
4118
4119 // node_id
4120 argv[1] = ULONG2NUM(node->node_id);
4121
4122 // location
4123 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4124
4125 // flags
4126 argv[3] = ULONG2NUM(node->flags);
4127
4128 // opening_loc
4129#line 223 "prism/templates/ext/prism/api_node.c.erb"
4130 argv[4] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4131
4132 // parts
4133#line 198 "prism/templates/ext/prism/api_node.c.erb"
4134 argv[5] = rb_ary_new_capa(cast->parts.size);
4135 for (size_t index = 0; index < cast->parts.size; index++) {
4136 rb_ary_push(argv[5], rb_ary_pop(value_stack));
4137 }
4138
4139 // closing_loc
4140#line 223 "prism/templates/ext/prism/api_node.c.erb"
4141 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4142
4143 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismInterpolatedSymbolNode));
4144 break;
4145 }
4146#line 172 "prism/templates/ext/prism/api_node.c.erb"
4149 VALUE argv[7];
4150
4151 // source
4152 argv[0] = source;
4153
4154 // node_id
4155 argv[1] = ULONG2NUM(node->node_id);
4156
4157 // location
4158 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4159
4160 // flags
4161 argv[3] = ULONG2NUM(node->flags);
4162
4163 // opening_loc
4164#line 220 "prism/templates/ext/prism/api_node.c.erb"
4165 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4166
4167 // parts
4168#line 198 "prism/templates/ext/prism/api_node.c.erb"
4169 argv[5] = rb_ary_new_capa(cast->parts.size);
4170 for (size_t index = 0; index < cast->parts.size; index++) {
4171 rb_ary_push(argv[5], rb_ary_pop(value_stack));
4172 }
4173
4174 // closing_loc
4175#line 220 "prism/templates/ext/prism/api_node.c.erb"
4176 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4177
4178 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismInterpolatedXStringNode));
4179 break;
4180 }
4181#line 172 "prism/templates/ext/prism/api_node.c.erb"
4183 VALUE argv[4];
4184
4185 // source
4186 argv[0] = source;
4187
4188 // node_id
4189 argv[1] = ULONG2NUM(node->node_id);
4190
4191 // location
4192 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4193
4194 // flags
4195 argv[3] = ULONG2NUM(node->flags);
4196
4197 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismItLocalVariableReadNode));
4198 break;
4199 }
4200#line 172 "prism/templates/ext/prism/api_node.c.erb"
4201 case PM_IT_PARAMETERS_NODE: {
4202 VALUE argv[4];
4203
4204 // source
4205 argv[0] = source;
4206
4207 // node_id
4208 argv[1] = ULONG2NUM(node->node_id);
4209
4210 // location
4211 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4212
4213 // flags
4214 argv[3] = ULONG2NUM(node->flags);
4215
4216 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismItParametersNode));
4217 break;
4218 }
4219#line 172 "prism/templates/ext/prism/api_node.c.erb"
4220 case PM_KEYWORD_HASH_NODE: {
4222 VALUE argv[5];
4223
4224 // source
4225 argv[0] = source;
4226
4227 // node_id
4228 argv[1] = ULONG2NUM(node->node_id);
4229
4230 // location
4231 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4232
4233 // flags
4234 argv[3] = ULONG2NUM(node->flags);
4235
4236 // elements
4237#line 198 "prism/templates/ext/prism/api_node.c.erb"
4238 argv[4] = rb_ary_new_capa(cast->elements.size);
4239 for (size_t index = 0; index < cast->elements.size; index++) {
4240 rb_ary_push(argv[4], rb_ary_pop(value_stack));
4241 }
4242
4243 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismKeywordHashNode));
4244 break;
4245 }
4246#line 172 "prism/templates/ext/prism/api_node.c.erb"
4249 VALUE argv[7];
4250
4251 // source
4252 argv[0] = source;
4253
4254 // node_id
4255 argv[1] = ULONG2NUM(node->node_id);
4256
4257 // location
4258 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4259
4260 // flags
4261 argv[3] = ULONG2NUM(node->flags);
4262
4263 // name
4264 argv[4] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
4265
4266 // name_loc
4267#line 223 "prism/templates/ext/prism/api_node.c.erb"
4268 argv[5] = cast->name_loc.start == NULL ? Qnil : pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
4269
4270 // operator_loc
4271#line 220 "prism/templates/ext/prism/api_node.c.erb"
4272 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4273
4274 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismKeywordRestParameterNode));
4275 break;
4276 }
4277#line 172 "prism/templates/ext/prism/api_node.c.erb"
4278 case PM_LAMBDA_NODE: {
4279 pm_lambda_node_t *cast = (pm_lambda_node_t *) node;
4280 VALUE argv[10];
4281
4282 // source
4283 argv[0] = source;
4284
4285 // node_id
4286 argv[1] = ULONG2NUM(node->node_id);
4287
4288 // location
4289 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4290
4291 // flags
4292 argv[3] = ULONG2NUM(node->flags);
4293
4294 // locals
4295#line 213 "prism/templates/ext/prism/api_node.c.erb"
4296 argv[4] = rb_ary_new_capa(cast->locals.size);
4297 for (size_t index = 0; index < cast->locals.size; index++) {
4298 assert(cast->locals.ids[index] != 0);
4299 rb_ary_push(argv[4], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
4300 }
4301
4302 // operator_loc
4303#line 220 "prism/templates/ext/prism/api_node.c.erb"
4304 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4305
4306 // opening_loc
4307#line 220 "prism/templates/ext/prism/api_node.c.erb"
4308 argv[6] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4309
4310 // closing_loc
4311#line 220 "prism/templates/ext/prism/api_node.c.erb"
4312 argv[7] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4313
4314 // parameters
4315#line 195 "prism/templates/ext/prism/api_node.c.erb"
4316 argv[8] = rb_ary_pop(value_stack);
4317
4318 // body
4319#line 195 "prism/templates/ext/prism/api_node.c.erb"
4320 argv[9] = rb_ary_pop(value_stack);
4321
4322 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismLambdaNode));
4323 break;
4324 }
4325#line 172 "prism/templates/ext/prism/api_node.c.erb"
4328 VALUE argv[9];
4329
4330 // source
4331 argv[0] = source;
4332
4333 // node_id
4334 argv[1] = ULONG2NUM(node->node_id);
4335
4336 // location
4337 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4338
4339 // flags
4340 argv[3] = ULONG2NUM(node->flags);
4341
4342 // name_loc
4343#line 220 "prism/templates/ext/prism/api_node.c.erb"
4344 argv[4] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
4345
4346 // operator_loc
4347#line 220 "prism/templates/ext/prism/api_node.c.erb"
4348 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4349
4350 // value
4351#line 195 "prism/templates/ext/prism/api_node.c.erb"
4352 argv[6] = rb_ary_pop(value_stack);
4353
4354 // name
4355#line 207 "prism/templates/ext/prism/api_node.c.erb"
4356 assert(cast->name != 0);
4357 argv[7] = RARRAY_AREF(constants, cast->name - 1);
4358
4359 // depth
4360#line 229 "prism/templates/ext/prism/api_node.c.erb"
4361 argv[8] = ULONG2NUM(cast->depth);
4362
4363 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismLocalVariableAndWriteNode));
4364 break;
4365 }
4366#line 172 "prism/templates/ext/prism/api_node.c.erb"
4369 VALUE argv[10];
4370
4371 // source
4372 argv[0] = source;
4373
4374 // node_id
4375 argv[1] = ULONG2NUM(node->node_id);
4376
4377 // location
4378 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4379
4380 // flags
4381 argv[3] = ULONG2NUM(node->flags);
4382
4383 // name_loc
4384#line 220 "prism/templates/ext/prism/api_node.c.erb"
4385 argv[4] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
4386
4387 // binary_operator_loc
4388#line 220 "prism/templates/ext/prism/api_node.c.erb"
4389 argv[5] = pm_location_new(parser, cast->binary_operator_loc.start, cast->binary_operator_loc.end);
4390
4391 // value
4392#line 195 "prism/templates/ext/prism/api_node.c.erb"
4393 argv[6] = rb_ary_pop(value_stack);
4394
4395 // name
4396#line 207 "prism/templates/ext/prism/api_node.c.erb"
4397 assert(cast->name != 0);
4398 argv[7] = RARRAY_AREF(constants, cast->name - 1);
4399
4400 // binary_operator
4401#line 207 "prism/templates/ext/prism/api_node.c.erb"
4402 assert(cast->binary_operator != 0);
4403 argv[8] = RARRAY_AREF(constants, cast->binary_operator - 1);
4404
4405 // depth
4406#line 229 "prism/templates/ext/prism/api_node.c.erb"
4407 argv[9] = ULONG2NUM(cast->depth);
4408
4409 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismLocalVariableOperatorWriteNode));
4410 break;
4411 }
4412#line 172 "prism/templates/ext/prism/api_node.c.erb"
4415 VALUE argv[9];
4416
4417 // source
4418 argv[0] = source;
4419
4420 // node_id
4421 argv[1] = ULONG2NUM(node->node_id);
4422
4423 // location
4424 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4425
4426 // flags
4427 argv[3] = ULONG2NUM(node->flags);
4428
4429 // name_loc
4430#line 220 "prism/templates/ext/prism/api_node.c.erb"
4431 argv[4] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
4432
4433 // operator_loc
4434#line 220 "prism/templates/ext/prism/api_node.c.erb"
4435 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4436
4437 // value
4438#line 195 "prism/templates/ext/prism/api_node.c.erb"
4439 argv[6] = rb_ary_pop(value_stack);
4440
4441 // name
4442#line 207 "prism/templates/ext/prism/api_node.c.erb"
4443 assert(cast->name != 0);
4444 argv[7] = RARRAY_AREF(constants, cast->name - 1);
4445
4446 // depth
4447#line 229 "prism/templates/ext/prism/api_node.c.erb"
4448 argv[8] = ULONG2NUM(cast->depth);
4449
4450 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismLocalVariableOrWriteNode));
4451 break;
4452 }
4453#line 172 "prism/templates/ext/prism/api_node.c.erb"
4456 VALUE argv[6];
4457
4458 // source
4459 argv[0] = source;
4460
4461 // node_id
4462 argv[1] = ULONG2NUM(node->node_id);
4463
4464 // location
4465 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4466
4467 // flags
4468 argv[3] = ULONG2NUM(node->flags);
4469
4470 // name
4471#line 207 "prism/templates/ext/prism/api_node.c.erb"
4472 assert(cast->name != 0);
4473 argv[4] = RARRAY_AREF(constants, cast->name - 1);
4474
4475 // depth
4476#line 229 "prism/templates/ext/prism/api_node.c.erb"
4477 argv[5] = ULONG2NUM(cast->depth);
4478
4479 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismLocalVariableReadNode));
4480 break;
4481 }
4482#line 172 "prism/templates/ext/prism/api_node.c.erb"
4485 VALUE argv[6];
4486
4487 // source
4488 argv[0] = source;
4489
4490 // node_id
4491 argv[1] = ULONG2NUM(node->node_id);
4492
4493 // location
4494 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4495
4496 // flags
4497 argv[3] = ULONG2NUM(node->flags);
4498
4499 // name
4500#line 207 "prism/templates/ext/prism/api_node.c.erb"
4501 assert(cast->name != 0);
4502 argv[4] = RARRAY_AREF(constants, cast->name - 1);
4503
4504 // depth
4505#line 229 "prism/templates/ext/prism/api_node.c.erb"
4506 argv[5] = ULONG2NUM(cast->depth);
4507
4508 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismLocalVariableTargetNode));
4509 break;
4510 }
4511#line 172 "prism/templates/ext/prism/api_node.c.erb"
4514 VALUE argv[9];
4515
4516 // source
4517 argv[0] = source;
4518
4519 // node_id
4520 argv[1] = ULONG2NUM(node->node_id);
4521
4522 // location
4523 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4524
4525 // flags
4526 argv[3] = ULONG2NUM(node->flags);
4527
4528 // name
4529#line 207 "prism/templates/ext/prism/api_node.c.erb"
4530 assert(cast->name != 0);
4531 argv[4] = RARRAY_AREF(constants, cast->name - 1);
4532
4533 // depth
4534#line 229 "prism/templates/ext/prism/api_node.c.erb"
4535 argv[5] = ULONG2NUM(cast->depth);
4536
4537 // name_loc
4538#line 220 "prism/templates/ext/prism/api_node.c.erb"
4539 argv[6] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
4540
4541 // value
4542#line 195 "prism/templates/ext/prism/api_node.c.erb"
4543 argv[7] = rb_ary_pop(value_stack);
4544
4545 // operator_loc
4546#line 220 "prism/templates/ext/prism/api_node.c.erb"
4547 argv[8] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4548
4549 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismLocalVariableWriteNode));
4550 break;
4551 }
4552#line 172 "prism/templates/ext/prism/api_node.c.erb"
4555 VALUE argv[8];
4556
4557 // source
4558 argv[0] = source;
4559
4560 // node_id
4561 argv[1] = ULONG2NUM(node->node_id);
4562
4563 // location
4564 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4565
4566 // flags
4567 argv[3] = ULONG2NUM(node->flags);
4568
4569 // opening_loc
4570#line 220 "prism/templates/ext/prism/api_node.c.erb"
4571 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
4572
4573 // content_loc
4574#line 220 "prism/templates/ext/prism/api_node.c.erb"
4575 argv[5] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end);
4576
4577 // closing_loc
4578#line 220 "prism/templates/ext/prism/api_node.c.erb"
4579 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
4580
4581 // unescaped
4582#line 204 "prism/templates/ext/prism/api_node.c.erb"
4583 argv[7] = pm_string_new(&cast->unescaped, encoding);
4584
4585 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismMatchLastLineNode));
4586 break;
4587 }
4588#line 172 "prism/templates/ext/prism/api_node.c.erb"
4591 VALUE argv[7];
4592
4593 // source
4594 argv[0] = source;
4595
4596 // node_id
4597 argv[1] = ULONG2NUM(node->node_id);
4598
4599 // location
4600 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4601
4602 // flags
4603 argv[3] = ULONG2NUM(node->flags);
4604
4605 // value
4606#line 195 "prism/templates/ext/prism/api_node.c.erb"
4607 argv[4] = rb_ary_pop(value_stack);
4608
4609 // pattern
4610#line 195 "prism/templates/ext/prism/api_node.c.erb"
4611 argv[5] = rb_ary_pop(value_stack);
4612
4613 // operator_loc
4614#line 220 "prism/templates/ext/prism/api_node.c.erb"
4615 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4616
4617 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismMatchPredicateNode));
4618 break;
4619 }
4620#line 172 "prism/templates/ext/prism/api_node.c.erb"
4623 VALUE argv[7];
4624
4625 // source
4626 argv[0] = source;
4627
4628 // node_id
4629 argv[1] = ULONG2NUM(node->node_id);
4630
4631 // location
4632 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4633
4634 // flags
4635 argv[3] = ULONG2NUM(node->flags);
4636
4637 // value
4638#line 195 "prism/templates/ext/prism/api_node.c.erb"
4639 argv[4] = rb_ary_pop(value_stack);
4640
4641 // pattern
4642#line 195 "prism/templates/ext/prism/api_node.c.erb"
4643 argv[5] = rb_ary_pop(value_stack);
4644
4645 // operator_loc
4646#line 220 "prism/templates/ext/prism/api_node.c.erb"
4647 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4648
4649 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismMatchRequiredNode));
4650 break;
4651 }
4652#line 172 "prism/templates/ext/prism/api_node.c.erb"
4653 case PM_MATCH_WRITE_NODE: {
4655 VALUE argv[6];
4656
4657 // source
4658 argv[0] = source;
4659
4660 // node_id
4661 argv[1] = ULONG2NUM(node->node_id);
4662
4663 // location
4664 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4665
4666 // flags
4667 argv[3] = ULONG2NUM(node->flags);
4668
4669 // call
4670#line 195 "prism/templates/ext/prism/api_node.c.erb"
4671 argv[4] = rb_ary_pop(value_stack);
4672
4673 // targets
4674#line 198 "prism/templates/ext/prism/api_node.c.erb"
4675 argv[5] = rb_ary_new_capa(cast->targets.size);
4676 for (size_t index = 0; index < cast->targets.size; index++) {
4677 rb_ary_push(argv[5], rb_ary_pop(value_stack));
4678 }
4679
4680 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismMatchWriteNode));
4681 break;
4682 }
4683#line 172 "prism/templates/ext/prism/api_node.c.erb"
4684 case PM_MISSING_NODE: {
4685 VALUE argv[4];
4686
4687 // source
4688 argv[0] = source;
4689
4690 // node_id
4691 argv[1] = ULONG2NUM(node->node_id);
4692
4693 // location
4694 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4695
4696 // flags
4697 argv[3] = ULONG2NUM(node->flags);
4698
4699 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismMissingNode));
4700 break;
4701 }
4702#line 172 "prism/templates/ext/prism/api_node.c.erb"
4703 case PM_MODULE_NODE: {
4704 pm_module_node_t *cast = (pm_module_node_t *) node;
4705 VALUE argv[10];
4706
4707 // source
4708 argv[0] = source;
4709
4710 // node_id
4711 argv[1] = ULONG2NUM(node->node_id);
4712
4713 // location
4714 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4715
4716 // flags
4717 argv[3] = ULONG2NUM(node->flags);
4718
4719 // locals
4720#line 213 "prism/templates/ext/prism/api_node.c.erb"
4721 argv[4] = rb_ary_new_capa(cast->locals.size);
4722 for (size_t index = 0; index < cast->locals.size; index++) {
4723 assert(cast->locals.ids[index] != 0);
4724 rb_ary_push(argv[4], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
4725 }
4726
4727 // module_keyword_loc
4728#line 220 "prism/templates/ext/prism/api_node.c.erb"
4729 argv[5] = pm_location_new(parser, cast->module_keyword_loc.start, cast->module_keyword_loc.end);
4730
4731 // constant_path
4732#line 195 "prism/templates/ext/prism/api_node.c.erb"
4733 argv[6] = rb_ary_pop(value_stack);
4734
4735 // body
4736#line 195 "prism/templates/ext/prism/api_node.c.erb"
4737 argv[7] = rb_ary_pop(value_stack);
4738
4739 // end_keyword_loc
4740#line 220 "prism/templates/ext/prism/api_node.c.erb"
4741 argv[8] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
4742
4743 // name
4744#line 207 "prism/templates/ext/prism/api_node.c.erb"
4745 assert(cast->name != 0);
4746 argv[9] = RARRAY_AREF(constants, cast->name - 1);
4747
4748 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismModuleNode));
4749 break;
4750 }
4751#line 172 "prism/templates/ext/prism/api_node.c.erb"
4752 case PM_MULTI_TARGET_NODE: {
4754 VALUE argv[9];
4755
4756 // source
4757 argv[0] = source;
4758
4759 // node_id
4760 argv[1] = ULONG2NUM(node->node_id);
4761
4762 // location
4763 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4764
4765 // flags
4766 argv[3] = ULONG2NUM(node->flags);
4767
4768 // lefts
4769#line 198 "prism/templates/ext/prism/api_node.c.erb"
4770 argv[4] = rb_ary_new_capa(cast->lefts.size);
4771 for (size_t index = 0; index < cast->lefts.size; index++) {
4772 rb_ary_push(argv[4], rb_ary_pop(value_stack));
4773 }
4774
4775 // rest
4776#line 195 "prism/templates/ext/prism/api_node.c.erb"
4777 argv[5] = rb_ary_pop(value_stack);
4778
4779 // rights
4780#line 198 "prism/templates/ext/prism/api_node.c.erb"
4781 argv[6] = rb_ary_new_capa(cast->rights.size);
4782 for (size_t index = 0; index < cast->rights.size; index++) {
4783 rb_ary_push(argv[6], rb_ary_pop(value_stack));
4784 }
4785
4786 // lparen_loc
4787#line 223 "prism/templates/ext/prism/api_node.c.erb"
4788 argv[7] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
4789
4790 // rparen_loc
4791#line 223 "prism/templates/ext/prism/api_node.c.erb"
4792 argv[8] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
4793
4794 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismMultiTargetNode));
4795 break;
4796 }
4797#line 172 "prism/templates/ext/prism/api_node.c.erb"
4798 case PM_MULTI_WRITE_NODE: {
4800 VALUE argv[11];
4801
4802 // source
4803 argv[0] = source;
4804
4805 // node_id
4806 argv[1] = ULONG2NUM(node->node_id);
4807
4808 // location
4809 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4810
4811 // flags
4812 argv[3] = ULONG2NUM(node->flags);
4813
4814 // lefts
4815#line 198 "prism/templates/ext/prism/api_node.c.erb"
4816 argv[4] = rb_ary_new_capa(cast->lefts.size);
4817 for (size_t index = 0; index < cast->lefts.size; index++) {
4818 rb_ary_push(argv[4], rb_ary_pop(value_stack));
4819 }
4820
4821 // rest
4822#line 195 "prism/templates/ext/prism/api_node.c.erb"
4823 argv[5] = rb_ary_pop(value_stack);
4824
4825 // rights
4826#line 198 "prism/templates/ext/prism/api_node.c.erb"
4827 argv[6] = rb_ary_new_capa(cast->rights.size);
4828 for (size_t index = 0; index < cast->rights.size; index++) {
4829 rb_ary_push(argv[6], rb_ary_pop(value_stack));
4830 }
4831
4832 // lparen_loc
4833#line 223 "prism/templates/ext/prism/api_node.c.erb"
4834 argv[7] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
4835
4836 // rparen_loc
4837#line 223 "prism/templates/ext/prism/api_node.c.erb"
4838 argv[8] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
4839
4840 // operator_loc
4841#line 220 "prism/templates/ext/prism/api_node.c.erb"
4842 argv[9] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4843
4844 // value
4845#line 195 "prism/templates/ext/prism/api_node.c.erb"
4846 argv[10] = rb_ary_pop(value_stack);
4847
4848 rb_ary_push(value_stack, rb_class_new_instance(11, argv, rb_cPrismMultiWriteNode));
4849 break;
4850 }
4851#line 172 "prism/templates/ext/prism/api_node.c.erb"
4852 case PM_NEXT_NODE: {
4853 pm_next_node_t *cast = (pm_next_node_t *) node;
4854 VALUE argv[6];
4855
4856 // source
4857 argv[0] = source;
4858
4859 // node_id
4860 argv[1] = ULONG2NUM(node->node_id);
4861
4862 // location
4863 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4864
4865 // flags
4866 argv[3] = ULONG2NUM(node->flags);
4867
4868 // arguments
4869#line 195 "prism/templates/ext/prism/api_node.c.erb"
4870 argv[4] = rb_ary_pop(value_stack);
4871
4872 // keyword_loc
4873#line 220 "prism/templates/ext/prism/api_node.c.erb"
4874 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
4875
4876 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismNextNode));
4877 break;
4878 }
4879#line 172 "prism/templates/ext/prism/api_node.c.erb"
4880 case PM_NIL_NODE: {
4881 VALUE argv[4];
4882
4883 // source
4884 argv[0] = source;
4885
4886 // node_id
4887 argv[1] = ULONG2NUM(node->node_id);
4888
4889 // location
4890 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4891
4892 // flags
4893 argv[3] = ULONG2NUM(node->flags);
4894
4895 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismNilNode));
4896 break;
4897 }
4898#line 172 "prism/templates/ext/prism/api_node.c.erb"
4901 VALUE argv[6];
4902
4903 // source
4904 argv[0] = source;
4905
4906 // node_id
4907 argv[1] = ULONG2NUM(node->node_id);
4908
4909 // location
4910 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4911
4912 // flags
4913 argv[3] = ULONG2NUM(node->flags);
4914
4915 // operator_loc
4916#line 220 "prism/templates/ext/prism/api_node.c.erb"
4917 argv[4] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
4918
4919 // keyword_loc
4920#line 220 "prism/templates/ext/prism/api_node.c.erb"
4921 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
4922
4923 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismNoKeywordsParameterNode));
4924 break;
4925 }
4926#line 172 "prism/templates/ext/prism/api_node.c.erb"
4929 VALUE argv[5];
4930
4931 // source
4932 argv[0] = source;
4933
4934 // node_id
4935 argv[1] = ULONG2NUM(node->node_id);
4936
4937 // location
4938 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4939
4940 // flags
4941 argv[3] = ULONG2NUM(node->flags);
4942
4943 // maximum
4944#line 226 "prism/templates/ext/prism/api_node.c.erb"
4945 argv[4] = UINT2NUM(cast->maximum);
4946
4947 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismNumberedParametersNode));
4948 break;
4949 }
4950#line 172 "prism/templates/ext/prism/api_node.c.erb"
4953 VALUE argv[5];
4954
4955 // source
4956 argv[0] = source;
4957
4958 // node_id
4959 argv[1] = ULONG2NUM(node->node_id);
4960
4961 // location
4962 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4963
4964 // flags
4965 argv[3] = ULONG2NUM(node->flags);
4966
4967 // number
4968#line 229 "prism/templates/ext/prism/api_node.c.erb"
4969 argv[4] = ULONG2NUM(cast->number);
4970
4971 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismNumberedReferenceReadNode));
4972 break;
4973 }
4974#line 172 "prism/templates/ext/prism/api_node.c.erb"
4977 VALUE argv[7];
4978
4979 // source
4980 argv[0] = source;
4981
4982 // node_id
4983 argv[1] = ULONG2NUM(node->node_id);
4984
4985 // location
4986 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
4987
4988 // flags
4989 argv[3] = ULONG2NUM(node->flags);
4990
4991 // name
4992#line 207 "prism/templates/ext/prism/api_node.c.erb"
4993 assert(cast->name != 0);
4994 argv[4] = RARRAY_AREF(constants, cast->name - 1);
4995
4996 // name_loc
4997#line 220 "prism/templates/ext/prism/api_node.c.erb"
4998 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
4999
5000 // value
5001#line 195 "prism/templates/ext/prism/api_node.c.erb"
5002 argv[6] = rb_ary_pop(value_stack);
5003
5004 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismOptionalKeywordParameterNode));
5005 break;
5006 }
5007#line 172 "prism/templates/ext/prism/api_node.c.erb"
5010 VALUE argv[8];
5011
5012 // source
5013 argv[0] = source;
5014
5015 // node_id
5016 argv[1] = ULONG2NUM(node->node_id);
5017
5018 // location
5019 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5020
5021 // flags
5022 argv[3] = ULONG2NUM(node->flags);
5023
5024 // name
5025#line 207 "prism/templates/ext/prism/api_node.c.erb"
5026 assert(cast->name != 0);
5027 argv[4] = RARRAY_AREF(constants, cast->name - 1);
5028
5029 // name_loc
5030#line 220 "prism/templates/ext/prism/api_node.c.erb"
5031 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
5032
5033 // operator_loc
5034#line 220 "prism/templates/ext/prism/api_node.c.erb"
5035 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5036
5037 // value
5038#line 195 "prism/templates/ext/prism/api_node.c.erb"
5039 argv[7] = rb_ary_pop(value_stack);
5040
5041 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismOptionalParameterNode));
5042 break;
5043 }
5044#line 172 "prism/templates/ext/prism/api_node.c.erb"
5045 case PM_OR_NODE: {
5046 pm_or_node_t *cast = (pm_or_node_t *) node;
5047 VALUE argv[7];
5048
5049 // source
5050 argv[0] = source;
5051
5052 // node_id
5053 argv[1] = ULONG2NUM(node->node_id);
5054
5055 // location
5056 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5057
5058 // flags
5059 argv[3] = ULONG2NUM(node->flags);
5060
5061 // left
5062#line 195 "prism/templates/ext/prism/api_node.c.erb"
5063 argv[4] = rb_ary_pop(value_stack);
5064
5065 // right
5066#line 195 "prism/templates/ext/prism/api_node.c.erb"
5067 argv[5] = rb_ary_pop(value_stack);
5068
5069 // operator_loc
5070#line 220 "prism/templates/ext/prism/api_node.c.erb"
5071 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5072
5073 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismOrNode));
5074 break;
5075 }
5076#line 172 "prism/templates/ext/prism/api_node.c.erb"
5077 case PM_PARAMETERS_NODE: {
5079 VALUE argv[11];
5080
5081 // source
5082 argv[0] = source;
5083
5084 // node_id
5085 argv[1] = ULONG2NUM(node->node_id);
5086
5087 // location
5088 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5089
5090 // flags
5091 argv[3] = ULONG2NUM(node->flags);
5092
5093 // requireds
5094#line 198 "prism/templates/ext/prism/api_node.c.erb"
5095 argv[4] = rb_ary_new_capa(cast->requireds.size);
5096 for (size_t index = 0; index < cast->requireds.size; index++) {
5097 rb_ary_push(argv[4], rb_ary_pop(value_stack));
5098 }
5099
5100 // optionals
5101#line 198 "prism/templates/ext/prism/api_node.c.erb"
5102 argv[5] = rb_ary_new_capa(cast->optionals.size);
5103 for (size_t index = 0; index < cast->optionals.size; index++) {
5104 rb_ary_push(argv[5], rb_ary_pop(value_stack));
5105 }
5106
5107 // rest
5108#line 195 "prism/templates/ext/prism/api_node.c.erb"
5109 argv[6] = rb_ary_pop(value_stack);
5110
5111 // posts
5112#line 198 "prism/templates/ext/prism/api_node.c.erb"
5113 argv[7] = rb_ary_new_capa(cast->posts.size);
5114 for (size_t index = 0; index < cast->posts.size; index++) {
5115 rb_ary_push(argv[7], rb_ary_pop(value_stack));
5116 }
5117
5118 // keywords
5119#line 198 "prism/templates/ext/prism/api_node.c.erb"
5120 argv[8] = rb_ary_new_capa(cast->keywords.size);
5121 for (size_t index = 0; index < cast->keywords.size; index++) {
5122 rb_ary_push(argv[8], rb_ary_pop(value_stack));
5123 }
5124
5125 // keyword_rest
5126#line 195 "prism/templates/ext/prism/api_node.c.erb"
5127 argv[9] = rb_ary_pop(value_stack);
5128
5129 // block
5130#line 195 "prism/templates/ext/prism/api_node.c.erb"
5131 argv[10] = rb_ary_pop(value_stack);
5132
5133 rb_ary_push(value_stack, rb_class_new_instance(11, argv, rb_cPrismParametersNode));
5134 break;
5135 }
5136#line 172 "prism/templates/ext/prism/api_node.c.erb"
5137 case PM_PARENTHESES_NODE: {
5139 VALUE argv[7];
5140
5141 // source
5142 argv[0] = source;
5143
5144 // node_id
5145 argv[1] = ULONG2NUM(node->node_id);
5146
5147 // location
5148 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5149
5150 // flags
5151 argv[3] = ULONG2NUM(node->flags);
5152
5153 // body
5154#line 195 "prism/templates/ext/prism/api_node.c.erb"
5155 argv[4] = rb_ary_pop(value_stack);
5156
5157 // opening_loc
5158#line 220 "prism/templates/ext/prism/api_node.c.erb"
5159 argv[5] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
5160
5161 // closing_loc
5162#line 220 "prism/templates/ext/prism/api_node.c.erb"
5163 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
5164
5165 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismParenthesesNode));
5166 break;
5167 }
5168#line 172 "prism/templates/ext/prism/api_node.c.erb"
5171 VALUE argv[8];
5172
5173 // source
5174 argv[0] = source;
5175
5176 // node_id
5177 argv[1] = ULONG2NUM(node->node_id);
5178
5179 // location
5180 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5181
5182 // flags
5183 argv[3] = ULONG2NUM(node->flags);
5184
5185 // expression
5186#line 195 "prism/templates/ext/prism/api_node.c.erb"
5187 argv[4] = rb_ary_pop(value_stack);
5188
5189 // operator_loc
5190#line 220 "prism/templates/ext/prism/api_node.c.erb"
5191 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5192
5193 // lparen_loc
5194#line 220 "prism/templates/ext/prism/api_node.c.erb"
5195 argv[6] = pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
5196
5197 // rparen_loc
5198#line 220 "prism/templates/ext/prism/api_node.c.erb"
5199 argv[7] = pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
5200
5201 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismPinnedExpressionNode));
5202 break;
5203 }
5204#line 172 "prism/templates/ext/prism/api_node.c.erb"
5207 VALUE argv[6];
5208
5209 // source
5210 argv[0] = source;
5211
5212 // node_id
5213 argv[1] = ULONG2NUM(node->node_id);
5214
5215 // location
5216 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5217
5218 // flags
5219 argv[3] = ULONG2NUM(node->flags);
5220
5221 // variable
5222#line 195 "prism/templates/ext/prism/api_node.c.erb"
5223 argv[4] = rb_ary_pop(value_stack);
5224
5225 // operator_loc
5226#line 220 "prism/templates/ext/prism/api_node.c.erb"
5227 argv[5] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5228
5229 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismPinnedVariableNode));
5230 break;
5231 }
5232#line 172 "prism/templates/ext/prism/api_node.c.erb"
5235 VALUE argv[8];
5236
5237 // source
5238 argv[0] = source;
5239
5240 // node_id
5241 argv[1] = ULONG2NUM(node->node_id);
5242
5243 // location
5244 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5245
5246 // flags
5247 argv[3] = ULONG2NUM(node->flags);
5248
5249 // statements
5250#line 195 "prism/templates/ext/prism/api_node.c.erb"
5251 argv[4] = rb_ary_pop(value_stack);
5252
5253 // keyword_loc
5254#line 220 "prism/templates/ext/prism/api_node.c.erb"
5255 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
5256
5257 // opening_loc
5258#line 220 "prism/templates/ext/prism/api_node.c.erb"
5259 argv[6] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
5260
5261 // closing_loc
5262#line 220 "prism/templates/ext/prism/api_node.c.erb"
5263 argv[7] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
5264
5265 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismPostExecutionNode));
5266 break;
5267 }
5268#line 172 "prism/templates/ext/prism/api_node.c.erb"
5269 case PM_PRE_EXECUTION_NODE: {
5271 VALUE argv[8];
5272
5273 // source
5274 argv[0] = source;
5275
5276 // node_id
5277 argv[1] = ULONG2NUM(node->node_id);
5278
5279 // location
5280 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5281
5282 // flags
5283 argv[3] = ULONG2NUM(node->flags);
5284
5285 // statements
5286#line 195 "prism/templates/ext/prism/api_node.c.erb"
5287 argv[4] = rb_ary_pop(value_stack);
5288
5289 // keyword_loc
5290#line 220 "prism/templates/ext/prism/api_node.c.erb"
5291 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
5292
5293 // opening_loc
5294#line 220 "prism/templates/ext/prism/api_node.c.erb"
5295 argv[6] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
5296
5297 // closing_loc
5298#line 220 "prism/templates/ext/prism/api_node.c.erb"
5299 argv[7] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
5300
5301 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismPreExecutionNode));
5302 break;
5303 }
5304#line 172 "prism/templates/ext/prism/api_node.c.erb"
5305 case PM_PROGRAM_NODE: {
5306 pm_program_node_t *cast = (pm_program_node_t *) node;
5307 VALUE argv[6];
5308
5309 // source
5310 argv[0] = source;
5311
5312 // node_id
5313 argv[1] = ULONG2NUM(node->node_id);
5314
5315 // location
5316 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5317
5318 // flags
5319 argv[3] = ULONG2NUM(node->flags);
5320
5321 // locals
5322#line 213 "prism/templates/ext/prism/api_node.c.erb"
5323 argv[4] = rb_ary_new_capa(cast->locals.size);
5324 for (size_t index = 0; index < cast->locals.size; index++) {
5325 assert(cast->locals.ids[index] != 0);
5326 rb_ary_push(argv[4], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
5327 }
5328
5329 // statements
5330#line 195 "prism/templates/ext/prism/api_node.c.erb"
5331 argv[5] = rb_ary_pop(value_stack);
5332
5333 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismProgramNode));
5334 break;
5335 }
5336#line 172 "prism/templates/ext/prism/api_node.c.erb"
5337 case PM_RANGE_NODE: {
5338 pm_range_node_t *cast = (pm_range_node_t *) node;
5339 VALUE argv[7];
5340
5341 // source
5342 argv[0] = source;
5343
5344 // node_id
5345 argv[1] = ULONG2NUM(node->node_id);
5346
5347 // location
5348 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5349
5350 // flags
5351 argv[3] = ULONG2NUM(node->flags);
5352
5353 // left
5354#line 195 "prism/templates/ext/prism/api_node.c.erb"
5355 argv[4] = rb_ary_pop(value_stack);
5356
5357 // right
5358#line 195 "prism/templates/ext/prism/api_node.c.erb"
5359 argv[5] = rb_ary_pop(value_stack);
5360
5361 // operator_loc
5362#line 220 "prism/templates/ext/prism/api_node.c.erb"
5363 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5364
5365 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismRangeNode));
5366 break;
5367 }
5368#line 172 "prism/templates/ext/prism/api_node.c.erb"
5369 case PM_RATIONAL_NODE: {
5370 pm_rational_node_t *cast = (pm_rational_node_t *) node;
5371 VALUE argv[6];
5372
5373 // source
5374 argv[0] = source;
5375
5376 // node_id
5377 argv[1] = ULONG2NUM(node->node_id);
5378
5379 // location
5380 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5381
5382 // flags
5383 argv[3] = ULONG2NUM(node->flags);
5384
5385 // numerator
5386#line 232 "prism/templates/ext/prism/api_node.c.erb"
5387 argv[4] = pm_integer_new(&cast->numerator);
5388
5389 // denominator
5390#line 232 "prism/templates/ext/prism/api_node.c.erb"
5391 argv[5] = pm_integer_new(&cast->denominator);
5392
5393 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismRationalNode));
5394 break;
5395 }
5396#line 172 "prism/templates/ext/prism/api_node.c.erb"
5397 case PM_REDO_NODE: {
5398 VALUE argv[4];
5399
5400 // source
5401 argv[0] = source;
5402
5403 // node_id
5404 argv[1] = ULONG2NUM(node->node_id);
5405
5406 // location
5407 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5408
5409 // flags
5410 argv[3] = ULONG2NUM(node->flags);
5411
5412 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismRedoNode));
5413 break;
5414 }
5415#line 172 "prism/templates/ext/prism/api_node.c.erb"
5418 VALUE argv[8];
5419
5420 // source
5421 argv[0] = source;
5422
5423 // node_id
5424 argv[1] = ULONG2NUM(node->node_id);
5425
5426 // location
5427 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5428
5429 // flags
5430 argv[3] = ULONG2NUM(node->flags);
5431
5432 // opening_loc
5433#line 220 "prism/templates/ext/prism/api_node.c.erb"
5434 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
5435
5436 // content_loc
5437#line 220 "prism/templates/ext/prism/api_node.c.erb"
5438 argv[5] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end);
5439
5440 // closing_loc
5441#line 220 "prism/templates/ext/prism/api_node.c.erb"
5442 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
5443
5444 // unescaped
5445#line 204 "prism/templates/ext/prism/api_node.c.erb"
5446 argv[7] = pm_string_new(&cast->unescaped, encoding);
5447
5448 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismRegularExpressionNode));
5449 break;
5450 }
5451#line 172 "prism/templates/ext/prism/api_node.c.erb"
5454 VALUE argv[6];
5455
5456 // source
5457 argv[0] = source;
5458
5459 // node_id
5460 argv[1] = ULONG2NUM(node->node_id);
5461
5462 // location
5463 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5464
5465 // flags
5466 argv[3] = ULONG2NUM(node->flags);
5467
5468 // name
5469#line 207 "prism/templates/ext/prism/api_node.c.erb"
5470 assert(cast->name != 0);
5471 argv[4] = RARRAY_AREF(constants, cast->name - 1);
5472
5473 // name_loc
5474#line 220 "prism/templates/ext/prism/api_node.c.erb"
5475 argv[5] = pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
5476
5477 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismRequiredKeywordParameterNode));
5478 break;
5479 }
5480#line 172 "prism/templates/ext/prism/api_node.c.erb"
5483 VALUE argv[5];
5484
5485 // source
5486 argv[0] = source;
5487
5488 // node_id
5489 argv[1] = ULONG2NUM(node->node_id);
5490
5491 // location
5492 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5493
5494 // flags
5495 argv[3] = ULONG2NUM(node->flags);
5496
5497 // name
5498#line 207 "prism/templates/ext/prism/api_node.c.erb"
5499 assert(cast->name != 0);
5500 argv[4] = RARRAY_AREF(constants, cast->name - 1);
5501
5502 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismRequiredParameterNode));
5503 break;
5504 }
5505#line 172 "prism/templates/ext/prism/api_node.c.erb"
5508 VALUE argv[7];
5509
5510 // source
5511 argv[0] = source;
5512
5513 // node_id
5514 argv[1] = ULONG2NUM(node->node_id);
5515
5516 // location
5517 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5518
5519 // flags
5520 argv[3] = ULONG2NUM(node->flags);
5521
5522 // expression
5523#line 195 "prism/templates/ext/prism/api_node.c.erb"
5524 argv[4] = rb_ary_pop(value_stack);
5525
5526 // keyword_loc
5527#line 220 "prism/templates/ext/prism/api_node.c.erb"
5528 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
5529
5530 // rescue_expression
5531#line 195 "prism/templates/ext/prism/api_node.c.erb"
5532 argv[6] = rb_ary_pop(value_stack);
5533
5534 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismRescueModifierNode));
5535 break;
5536 }
5537#line 172 "prism/templates/ext/prism/api_node.c.erb"
5538 case PM_RESCUE_NODE: {
5539 pm_rescue_node_t *cast = (pm_rescue_node_t *) node;
5540 VALUE argv[10];
5541
5542 // source
5543 argv[0] = source;
5544
5545 // node_id
5546 argv[1] = ULONG2NUM(node->node_id);
5547
5548 // location
5549 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5550
5551 // flags
5552 argv[3] = ULONG2NUM(node->flags);
5553
5554 // keyword_loc
5555#line 220 "prism/templates/ext/prism/api_node.c.erb"
5556 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
5557
5558 // exceptions
5559#line 198 "prism/templates/ext/prism/api_node.c.erb"
5560 argv[5] = rb_ary_new_capa(cast->exceptions.size);
5561 for (size_t index = 0; index < cast->exceptions.size; index++) {
5562 rb_ary_push(argv[5], rb_ary_pop(value_stack));
5563 }
5564
5565 // operator_loc
5566#line 223 "prism/templates/ext/prism/api_node.c.erb"
5567 argv[6] = cast->operator_loc.start == NULL ? Qnil : pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5568
5569 // reference
5570#line 195 "prism/templates/ext/prism/api_node.c.erb"
5571 argv[7] = rb_ary_pop(value_stack);
5572
5573 // statements
5574#line 195 "prism/templates/ext/prism/api_node.c.erb"
5575 argv[8] = rb_ary_pop(value_stack);
5576
5577 // subsequent
5578#line 195 "prism/templates/ext/prism/api_node.c.erb"
5579 argv[9] = rb_ary_pop(value_stack);
5580
5581 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismRescueNode));
5582 break;
5583 }
5584#line 172 "prism/templates/ext/prism/api_node.c.erb"
5587 VALUE argv[7];
5588
5589 // source
5590 argv[0] = source;
5591
5592 // node_id
5593 argv[1] = ULONG2NUM(node->node_id);
5594
5595 // location
5596 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5597
5598 // flags
5599 argv[3] = ULONG2NUM(node->flags);
5600
5601 // name
5602 argv[4] = cast->name == 0 ? Qnil : RARRAY_AREF(constants, cast->name - 1);
5603
5604 // name_loc
5605#line 223 "prism/templates/ext/prism/api_node.c.erb"
5606 argv[5] = cast->name_loc.start == NULL ? Qnil : pm_location_new(parser, cast->name_loc.start, cast->name_loc.end);
5607
5608 // operator_loc
5609#line 220 "prism/templates/ext/prism/api_node.c.erb"
5610 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5611
5612 rb_ary_push(value_stack, rb_class_new_instance(7, argv, rb_cPrismRestParameterNode));
5613 break;
5614 }
5615#line 172 "prism/templates/ext/prism/api_node.c.erb"
5616 case PM_RETRY_NODE: {
5617 VALUE argv[4];
5618
5619 // source
5620 argv[0] = source;
5621
5622 // node_id
5623 argv[1] = ULONG2NUM(node->node_id);
5624
5625 // location
5626 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5627
5628 // flags
5629 argv[3] = ULONG2NUM(node->flags);
5630
5631 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismRetryNode));
5632 break;
5633 }
5634#line 172 "prism/templates/ext/prism/api_node.c.erb"
5635 case PM_RETURN_NODE: {
5636 pm_return_node_t *cast = (pm_return_node_t *) node;
5637 VALUE argv[6];
5638
5639 // source
5640 argv[0] = source;
5641
5642 // node_id
5643 argv[1] = ULONG2NUM(node->node_id);
5644
5645 // location
5646 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5647
5648 // flags
5649 argv[3] = ULONG2NUM(node->flags);
5650
5651 // keyword_loc
5652#line 220 "prism/templates/ext/prism/api_node.c.erb"
5653 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
5654
5655 // arguments
5656#line 195 "prism/templates/ext/prism/api_node.c.erb"
5657 argv[5] = rb_ary_pop(value_stack);
5658
5659 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismReturnNode));
5660 break;
5661 }
5662#line 172 "prism/templates/ext/prism/api_node.c.erb"
5663 case PM_SELF_NODE: {
5664 VALUE argv[4];
5665
5666 // source
5667 argv[0] = source;
5668
5669 // node_id
5670 argv[1] = ULONG2NUM(node->node_id);
5671
5672 // location
5673 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5674
5675 // flags
5676 argv[3] = ULONG2NUM(node->flags);
5677
5678 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismSelfNode));
5679 break;
5680 }
5681#line 172 "prism/templates/ext/prism/api_node.c.erb"
5683 VALUE argv[5];
5684
5685 // source
5686 argv[0] = source;
5687
5688 // node_id
5689 argv[1] = ULONG2NUM(node->node_id);
5690
5691 // location
5692 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5693
5694 // flags
5695 argv[3] = ULONG2NUM(node->flags);
5696
5697 // write
5698#line 195 "prism/templates/ext/prism/api_node.c.erb"
5699 argv[4] = rb_ary_pop(value_stack);
5700
5701 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismShareableConstantNode));
5702 break;
5703 }
5704#line 172 "prism/templates/ext/prism/api_node.c.erb"
5707 VALUE argv[10];
5708
5709 // source
5710 argv[0] = source;
5711
5712 // node_id
5713 argv[1] = ULONG2NUM(node->node_id);
5714
5715 // location
5716 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5717
5718 // flags
5719 argv[3] = ULONG2NUM(node->flags);
5720
5721 // locals
5722#line 213 "prism/templates/ext/prism/api_node.c.erb"
5723 argv[4] = rb_ary_new_capa(cast->locals.size);
5724 for (size_t index = 0; index < cast->locals.size; index++) {
5725 assert(cast->locals.ids[index] != 0);
5726 rb_ary_push(argv[4], RARRAY_AREF(constants, cast->locals.ids[index] - 1));
5727 }
5728
5729 // class_keyword_loc
5730#line 220 "prism/templates/ext/prism/api_node.c.erb"
5731 argv[5] = pm_location_new(parser, cast->class_keyword_loc.start, cast->class_keyword_loc.end);
5732
5733 // operator_loc
5734#line 220 "prism/templates/ext/prism/api_node.c.erb"
5735 argv[6] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5736
5737 // expression
5738#line 195 "prism/templates/ext/prism/api_node.c.erb"
5739 argv[7] = rb_ary_pop(value_stack);
5740
5741 // body
5742#line 195 "prism/templates/ext/prism/api_node.c.erb"
5743 argv[8] = rb_ary_pop(value_stack);
5744
5745 // end_keyword_loc
5746#line 220 "prism/templates/ext/prism/api_node.c.erb"
5747 argv[9] = pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
5748
5749 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismSingletonClassNode));
5750 break;
5751 }
5752#line 172 "prism/templates/ext/prism/api_node.c.erb"
5754 VALUE argv[4];
5755
5756 // source
5757 argv[0] = source;
5758
5759 // node_id
5760 argv[1] = ULONG2NUM(node->node_id);
5761
5762 // location
5763 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5764
5765 // flags
5766 argv[3] = ULONG2NUM(node->flags);
5767
5768 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismSourceEncodingNode));
5769 break;
5770 }
5771#line 172 "prism/templates/ext/prism/api_node.c.erb"
5772 case PM_SOURCE_FILE_NODE: {
5774 VALUE argv[5];
5775
5776 // source
5777 argv[0] = source;
5778
5779 // node_id
5780 argv[1] = ULONG2NUM(node->node_id);
5781
5782 // location
5783 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5784
5785 // flags
5786 argv[3] = ULONG2NUM(node->flags);
5787
5788 // filepath
5789#line 204 "prism/templates/ext/prism/api_node.c.erb"
5790 argv[4] = pm_string_new(&cast->filepath, encoding);
5791
5792 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismSourceFileNode));
5793 break;
5794 }
5795#line 172 "prism/templates/ext/prism/api_node.c.erb"
5796 case PM_SOURCE_LINE_NODE: {
5797 VALUE argv[4];
5798
5799 // source
5800 argv[0] = source;
5801
5802 // node_id
5803 argv[1] = ULONG2NUM(node->node_id);
5804
5805 // location
5806 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5807
5808 // flags
5809 argv[3] = ULONG2NUM(node->flags);
5810
5811 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismSourceLineNode));
5812 break;
5813 }
5814#line 172 "prism/templates/ext/prism/api_node.c.erb"
5815 case PM_SPLAT_NODE: {
5816 pm_splat_node_t *cast = (pm_splat_node_t *) node;
5817 VALUE argv[6];
5818
5819 // source
5820 argv[0] = source;
5821
5822 // node_id
5823 argv[1] = ULONG2NUM(node->node_id);
5824
5825 // location
5826 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5827
5828 // flags
5829 argv[3] = ULONG2NUM(node->flags);
5830
5831 // operator_loc
5832#line 220 "prism/templates/ext/prism/api_node.c.erb"
5833 argv[4] = pm_location_new(parser, cast->operator_loc.start, cast->operator_loc.end);
5834
5835 // expression
5836#line 195 "prism/templates/ext/prism/api_node.c.erb"
5837 argv[5] = rb_ary_pop(value_stack);
5838
5839 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismSplatNode));
5840 break;
5841 }
5842#line 172 "prism/templates/ext/prism/api_node.c.erb"
5843 case PM_STATEMENTS_NODE: {
5845 VALUE argv[5];
5846
5847 // source
5848 argv[0] = source;
5849
5850 // node_id
5851 argv[1] = ULONG2NUM(node->node_id);
5852
5853 // location
5854 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5855
5856 // flags
5857 argv[3] = ULONG2NUM(node->flags);
5858
5859 // body
5860#line 198 "prism/templates/ext/prism/api_node.c.erb"
5861 argv[4] = rb_ary_new_capa(cast->body.size);
5862 for (size_t index = 0; index < cast->body.size; index++) {
5863 rb_ary_push(argv[4], rb_ary_pop(value_stack));
5864 }
5865
5866 rb_ary_push(value_stack, rb_class_new_instance(5, argv, rb_cPrismStatementsNode));
5867 break;
5868 }
5869#line 172 "prism/templates/ext/prism/api_node.c.erb"
5870 case PM_STRING_NODE: {
5871 pm_string_node_t *cast = (pm_string_node_t *) node;
5872 VALUE argv[8];
5873
5874 // source
5875 argv[0] = source;
5876
5877 // node_id
5878 argv[1] = ULONG2NUM(node->node_id);
5879
5880 // location
5881 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5882
5883 // flags
5884 argv[3] = ULONG2NUM(node->flags);
5885
5886 // opening_loc
5887#line 223 "prism/templates/ext/prism/api_node.c.erb"
5888 argv[4] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
5889
5890 // content_loc
5891#line 220 "prism/templates/ext/prism/api_node.c.erb"
5892 argv[5] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end);
5893
5894 // closing_loc
5895#line 223 "prism/templates/ext/prism/api_node.c.erb"
5896 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
5897
5898 // unescaped
5899#line 204 "prism/templates/ext/prism/api_node.c.erb"
5900 argv[7] = pm_string_new(&cast->unescaped, encoding);
5901
5902 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismStringNode));
5903 break;
5904 }
5905#line 172 "prism/templates/ext/prism/api_node.c.erb"
5906 case PM_SUPER_NODE: {
5907 pm_super_node_t *cast = (pm_super_node_t *) node;
5908 VALUE argv[9];
5909
5910 // source
5911 argv[0] = source;
5912
5913 // node_id
5914 argv[1] = ULONG2NUM(node->node_id);
5915
5916 // location
5917 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5918
5919 // flags
5920 argv[3] = ULONG2NUM(node->flags);
5921
5922 // keyword_loc
5923#line 220 "prism/templates/ext/prism/api_node.c.erb"
5924 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
5925
5926 // lparen_loc
5927#line 223 "prism/templates/ext/prism/api_node.c.erb"
5928 argv[5] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
5929
5930 // arguments
5931#line 195 "prism/templates/ext/prism/api_node.c.erb"
5932 argv[6] = rb_ary_pop(value_stack);
5933
5934 // rparen_loc
5935#line 223 "prism/templates/ext/prism/api_node.c.erb"
5936 argv[7] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
5937
5938 // block
5939#line 195 "prism/templates/ext/prism/api_node.c.erb"
5940 argv[8] = rb_ary_pop(value_stack);
5941
5942 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismSuperNode));
5943 break;
5944 }
5945#line 172 "prism/templates/ext/prism/api_node.c.erb"
5946 case PM_SYMBOL_NODE: {
5947 pm_symbol_node_t *cast = (pm_symbol_node_t *) node;
5948 VALUE argv[8];
5949
5950 // source
5951 argv[0] = source;
5952
5953 // node_id
5954 argv[1] = ULONG2NUM(node->node_id);
5955
5956 // location
5957 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5958
5959 // flags
5960 argv[3] = ULONG2NUM(node->flags);
5961
5962 // opening_loc
5963#line 223 "prism/templates/ext/prism/api_node.c.erb"
5964 argv[4] = cast->opening_loc.start == NULL ? Qnil : pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
5965
5966 // value_loc
5967#line 223 "prism/templates/ext/prism/api_node.c.erb"
5968 argv[5] = cast->value_loc.start == NULL ? Qnil : pm_location_new(parser, cast->value_loc.start, cast->value_loc.end);
5969
5970 // closing_loc
5971#line 223 "prism/templates/ext/prism/api_node.c.erb"
5972 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
5973
5974 // unescaped
5975#line 204 "prism/templates/ext/prism/api_node.c.erb"
5976 argv[7] = pm_string_new(&cast->unescaped, encoding);
5977
5978 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismSymbolNode));
5979 break;
5980 }
5981#line 172 "prism/templates/ext/prism/api_node.c.erb"
5982 case PM_TRUE_NODE: {
5983 VALUE argv[4];
5984
5985 // source
5986 argv[0] = source;
5987
5988 // node_id
5989 argv[1] = ULONG2NUM(node->node_id);
5990
5991 // location
5992 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
5993
5994 // flags
5995 argv[3] = ULONG2NUM(node->flags);
5996
5997 rb_ary_push(value_stack, rb_class_new_instance(4, argv, rb_cPrismTrueNode));
5998 break;
5999 }
6000#line 172 "prism/templates/ext/prism/api_node.c.erb"
6001 case PM_UNDEF_NODE: {
6002 pm_undef_node_t *cast = (pm_undef_node_t *) node;
6003 VALUE argv[6];
6004
6005 // source
6006 argv[0] = source;
6007
6008 // node_id
6009 argv[1] = ULONG2NUM(node->node_id);
6010
6011 // location
6012 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6013
6014 // flags
6015 argv[3] = ULONG2NUM(node->flags);
6016
6017 // names
6018#line 198 "prism/templates/ext/prism/api_node.c.erb"
6019 argv[4] = rb_ary_new_capa(cast->names.size);
6020 for (size_t index = 0; index < cast->names.size; index++) {
6021 rb_ary_push(argv[4], rb_ary_pop(value_stack));
6022 }
6023
6024 // keyword_loc
6025#line 220 "prism/templates/ext/prism/api_node.c.erb"
6026 argv[5] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
6027
6028 rb_ary_push(value_stack, rb_class_new_instance(6, argv, rb_cPrismUndefNode));
6029 break;
6030 }
6031#line 172 "prism/templates/ext/prism/api_node.c.erb"
6032 case PM_UNLESS_NODE: {
6033 pm_unless_node_t *cast = (pm_unless_node_t *) node;
6034 VALUE argv[10];
6035
6036 // source
6037 argv[0] = source;
6038
6039 // node_id
6040 argv[1] = ULONG2NUM(node->node_id);
6041
6042 // location
6043 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6044
6045 // flags
6046 argv[3] = ULONG2NUM(node->flags);
6047
6048 // keyword_loc
6049#line 220 "prism/templates/ext/prism/api_node.c.erb"
6050 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
6051
6052 // predicate
6053#line 195 "prism/templates/ext/prism/api_node.c.erb"
6054 argv[5] = rb_ary_pop(value_stack);
6055
6056 // then_keyword_loc
6057#line 223 "prism/templates/ext/prism/api_node.c.erb"
6058 argv[6] = cast->then_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->then_keyword_loc.start, cast->then_keyword_loc.end);
6059
6060 // statements
6061#line 195 "prism/templates/ext/prism/api_node.c.erb"
6062 argv[7] = rb_ary_pop(value_stack);
6063
6064 // else_clause
6065#line 195 "prism/templates/ext/prism/api_node.c.erb"
6066 argv[8] = rb_ary_pop(value_stack);
6067
6068 // end_keyword_loc
6069#line 223 "prism/templates/ext/prism/api_node.c.erb"
6070 argv[9] = cast->end_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->end_keyword_loc.start, cast->end_keyword_loc.end);
6071
6072 rb_ary_push(value_stack, rb_class_new_instance(10, argv, rb_cPrismUnlessNode));
6073 break;
6074 }
6075#line 172 "prism/templates/ext/prism/api_node.c.erb"
6076 case PM_UNTIL_NODE: {
6077 pm_until_node_t *cast = (pm_until_node_t *) node;
6078 VALUE argv[9];
6079
6080 // source
6081 argv[0] = source;
6082
6083 // node_id
6084 argv[1] = ULONG2NUM(node->node_id);
6085
6086 // location
6087 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6088
6089 // flags
6090 argv[3] = ULONG2NUM(node->flags);
6091
6092 // keyword_loc
6093#line 220 "prism/templates/ext/prism/api_node.c.erb"
6094 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
6095
6096 // do_keyword_loc
6097#line 223 "prism/templates/ext/prism/api_node.c.erb"
6098 argv[5] = cast->do_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->do_keyword_loc.start, cast->do_keyword_loc.end);
6099
6100 // closing_loc
6101#line 223 "prism/templates/ext/prism/api_node.c.erb"
6102 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
6103
6104 // predicate
6105#line 195 "prism/templates/ext/prism/api_node.c.erb"
6106 argv[7] = rb_ary_pop(value_stack);
6107
6108 // statements
6109#line 195 "prism/templates/ext/prism/api_node.c.erb"
6110 argv[8] = rb_ary_pop(value_stack);
6111
6112 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismUntilNode));
6113 break;
6114 }
6115#line 172 "prism/templates/ext/prism/api_node.c.erb"
6116 case PM_WHEN_NODE: {
6117 pm_when_node_t *cast = (pm_when_node_t *) node;
6118 VALUE argv[8];
6119
6120 // source
6121 argv[0] = source;
6122
6123 // node_id
6124 argv[1] = ULONG2NUM(node->node_id);
6125
6126 // location
6127 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6128
6129 // flags
6130 argv[3] = ULONG2NUM(node->flags);
6131
6132 // keyword_loc
6133#line 220 "prism/templates/ext/prism/api_node.c.erb"
6134 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
6135
6136 // conditions
6137#line 198 "prism/templates/ext/prism/api_node.c.erb"
6138 argv[5] = rb_ary_new_capa(cast->conditions.size);
6139 for (size_t index = 0; index < cast->conditions.size; index++) {
6140 rb_ary_push(argv[5], rb_ary_pop(value_stack));
6141 }
6142
6143 // then_keyword_loc
6144#line 223 "prism/templates/ext/prism/api_node.c.erb"
6145 argv[6] = cast->then_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->then_keyword_loc.start, cast->then_keyword_loc.end);
6146
6147 // statements
6148#line 195 "prism/templates/ext/prism/api_node.c.erb"
6149 argv[7] = rb_ary_pop(value_stack);
6150
6151 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismWhenNode));
6152 break;
6153 }
6154#line 172 "prism/templates/ext/prism/api_node.c.erb"
6155 case PM_WHILE_NODE: {
6156 pm_while_node_t *cast = (pm_while_node_t *) node;
6157 VALUE argv[9];
6158
6159 // source
6160 argv[0] = source;
6161
6162 // node_id
6163 argv[1] = ULONG2NUM(node->node_id);
6164
6165 // location
6166 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6167
6168 // flags
6169 argv[3] = ULONG2NUM(node->flags);
6170
6171 // keyword_loc
6172#line 220 "prism/templates/ext/prism/api_node.c.erb"
6173 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
6174
6175 // do_keyword_loc
6176#line 223 "prism/templates/ext/prism/api_node.c.erb"
6177 argv[5] = cast->do_keyword_loc.start == NULL ? Qnil : pm_location_new(parser, cast->do_keyword_loc.start, cast->do_keyword_loc.end);
6178
6179 // closing_loc
6180#line 223 "prism/templates/ext/prism/api_node.c.erb"
6181 argv[6] = cast->closing_loc.start == NULL ? Qnil : pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
6182
6183 // predicate
6184#line 195 "prism/templates/ext/prism/api_node.c.erb"
6185 argv[7] = rb_ary_pop(value_stack);
6186
6187 // statements
6188#line 195 "prism/templates/ext/prism/api_node.c.erb"
6189 argv[8] = rb_ary_pop(value_stack);
6190
6191 rb_ary_push(value_stack, rb_class_new_instance(9, argv, rb_cPrismWhileNode));
6192 break;
6193 }
6194#line 172 "prism/templates/ext/prism/api_node.c.erb"
6195 case PM_X_STRING_NODE: {
6196 pm_x_string_node_t *cast = (pm_x_string_node_t *) node;
6197 VALUE argv[8];
6198
6199 // source
6200 argv[0] = source;
6201
6202 // node_id
6203 argv[1] = ULONG2NUM(node->node_id);
6204
6205 // location
6206 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6207
6208 // flags
6209 argv[3] = ULONG2NUM(node->flags);
6210
6211 // opening_loc
6212#line 220 "prism/templates/ext/prism/api_node.c.erb"
6213 argv[4] = pm_location_new(parser, cast->opening_loc.start, cast->opening_loc.end);
6214
6215 // content_loc
6216#line 220 "prism/templates/ext/prism/api_node.c.erb"
6217 argv[5] = pm_location_new(parser, cast->content_loc.start, cast->content_loc.end);
6218
6219 // closing_loc
6220#line 220 "prism/templates/ext/prism/api_node.c.erb"
6221 argv[6] = pm_location_new(parser, cast->closing_loc.start, cast->closing_loc.end);
6222
6223 // unescaped
6224#line 204 "prism/templates/ext/prism/api_node.c.erb"
6225 argv[7] = pm_string_new(&cast->unescaped, encoding);
6226
6227 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismXStringNode));
6228 break;
6229 }
6230#line 172 "prism/templates/ext/prism/api_node.c.erb"
6231 case PM_YIELD_NODE: {
6232 pm_yield_node_t *cast = (pm_yield_node_t *) node;
6233 VALUE argv[8];
6234
6235 // source
6236 argv[0] = source;
6237
6238 // node_id
6239 argv[1] = ULONG2NUM(node->node_id);
6240
6241 // location
6242 argv[2] = pm_location_new(parser, node->location.start, node->location.end);
6243
6244 // flags
6245 argv[3] = ULONG2NUM(node->flags);
6246
6247 // keyword_loc
6248#line 220 "prism/templates/ext/prism/api_node.c.erb"
6249 argv[4] = pm_location_new(parser, cast->keyword_loc.start, cast->keyword_loc.end);
6250
6251 // lparen_loc
6252#line 223 "prism/templates/ext/prism/api_node.c.erb"
6253 argv[5] = cast->lparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->lparen_loc.start, cast->lparen_loc.end);
6254
6255 // arguments
6256#line 195 "prism/templates/ext/prism/api_node.c.erb"
6257 argv[6] = rb_ary_pop(value_stack);
6258
6259 // rparen_loc
6260#line 223 "prism/templates/ext/prism/api_node.c.erb"
6261 argv[7] = cast->rparen_loc.start == NULL ? Qnil : pm_location_new(parser, cast->rparen_loc.start, cast->rparen_loc.end);
6262
6263 rb_ary_push(value_stack, rb_class_new_instance(8, argv, rb_cPrismYieldNode));
6264 break;
6265 }
6266 default:
6267 rb_raise(rb_eRuntimeError, "unknown node type: %d", PM_NODE_TYPE(node));
6268 }
6269 }
6270 }
6271
6272 return rb_ary_pop(value_stack);
6273}
6274
6275void
6276Init_prism_api_node(void) {
6277 rb_cPrismAliasGlobalVariableNode = rb_define_class_under(rb_cPrism, "AliasGlobalVariableNode", rb_cPrismNode);
6278 rb_cPrismAliasMethodNode = rb_define_class_under(rb_cPrism, "AliasMethodNode", rb_cPrismNode);
6279 rb_cPrismAlternationPatternNode = rb_define_class_under(rb_cPrism, "AlternationPatternNode", rb_cPrismNode);
6280 rb_cPrismAndNode = rb_define_class_under(rb_cPrism, "AndNode", rb_cPrismNode);
6281 rb_cPrismArgumentsNode = rb_define_class_under(rb_cPrism, "ArgumentsNode", rb_cPrismNode);
6282 rb_cPrismArrayNode = rb_define_class_under(rb_cPrism, "ArrayNode", rb_cPrismNode);
6283 rb_cPrismArrayPatternNode = rb_define_class_under(rb_cPrism, "ArrayPatternNode", rb_cPrismNode);
6284 rb_cPrismAssocNode = rb_define_class_under(rb_cPrism, "AssocNode", rb_cPrismNode);
6285 rb_cPrismAssocSplatNode = rb_define_class_under(rb_cPrism, "AssocSplatNode", rb_cPrismNode);
6286 rb_cPrismBackReferenceReadNode = rb_define_class_under(rb_cPrism, "BackReferenceReadNode", rb_cPrismNode);
6287 rb_cPrismBeginNode = rb_define_class_under(rb_cPrism, "BeginNode", rb_cPrismNode);
6288 rb_cPrismBlockArgumentNode = rb_define_class_under(rb_cPrism, "BlockArgumentNode", rb_cPrismNode);
6289 rb_cPrismBlockLocalVariableNode = rb_define_class_under(rb_cPrism, "BlockLocalVariableNode", rb_cPrismNode);
6290 rb_cPrismBlockNode = rb_define_class_under(rb_cPrism, "BlockNode", rb_cPrismNode);
6291 rb_cPrismBlockParameterNode = rb_define_class_under(rb_cPrism, "BlockParameterNode", rb_cPrismNode);
6292 rb_cPrismBlockParametersNode = rb_define_class_under(rb_cPrism, "BlockParametersNode", rb_cPrismNode);
6293 rb_cPrismBreakNode = rb_define_class_under(rb_cPrism, "BreakNode", rb_cPrismNode);
6294 rb_cPrismCallAndWriteNode = rb_define_class_under(rb_cPrism, "CallAndWriteNode", rb_cPrismNode);
6295 rb_cPrismCallNode = rb_define_class_under(rb_cPrism, "CallNode", rb_cPrismNode);
6296 rb_cPrismCallOperatorWriteNode = rb_define_class_under(rb_cPrism, "CallOperatorWriteNode", rb_cPrismNode);
6297 rb_cPrismCallOrWriteNode = rb_define_class_under(rb_cPrism, "CallOrWriteNode", rb_cPrismNode);
6298 rb_cPrismCallTargetNode = rb_define_class_under(rb_cPrism, "CallTargetNode", rb_cPrismNode);
6299 rb_cPrismCapturePatternNode = rb_define_class_under(rb_cPrism, "CapturePatternNode", rb_cPrismNode);
6300 rb_cPrismCaseMatchNode = rb_define_class_under(rb_cPrism, "CaseMatchNode", rb_cPrismNode);
6301 rb_cPrismCaseNode = rb_define_class_under(rb_cPrism, "CaseNode", rb_cPrismNode);
6302 rb_cPrismClassNode = rb_define_class_under(rb_cPrism, "ClassNode", rb_cPrismNode);
6303 rb_cPrismClassVariableAndWriteNode = rb_define_class_under(rb_cPrism, "ClassVariableAndWriteNode", rb_cPrismNode);
6304 rb_cPrismClassVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "ClassVariableOperatorWriteNode", rb_cPrismNode);
6305 rb_cPrismClassVariableOrWriteNode = rb_define_class_under(rb_cPrism, "ClassVariableOrWriteNode", rb_cPrismNode);
6306 rb_cPrismClassVariableReadNode = rb_define_class_under(rb_cPrism, "ClassVariableReadNode", rb_cPrismNode);
6307 rb_cPrismClassVariableTargetNode = rb_define_class_under(rb_cPrism, "ClassVariableTargetNode", rb_cPrismNode);
6308 rb_cPrismClassVariableWriteNode = rb_define_class_under(rb_cPrism, "ClassVariableWriteNode", rb_cPrismNode);
6309 rb_cPrismConstantAndWriteNode = rb_define_class_under(rb_cPrism, "ConstantAndWriteNode", rb_cPrismNode);
6310 rb_cPrismConstantOperatorWriteNode = rb_define_class_under(rb_cPrism, "ConstantOperatorWriteNode", rb_cPrismNode);
6311 rb_cPrismConstantOrWriteNode = rb_define_class_under(rb_cPrism, "ConstantOrWriteNode", rb_cPrismNode);
6312 rb_cPrismConstantPathAndWriteNode = rb_define_class_under(rb_cPrism, "ConstantPathAndWriteNode", rb_cPrismNode);
6313 rb_cPrismConstantPathNode = rb_define_class_under(rb_cPrism, "ConstantPathNode", rb_cPrismNode);
6314 rb_cPrismConstantPathOperatorWriteNode = rb_define_class_under(rb_cPrism, "ConstantPathOperatorWriteNode", rb_cPrismNode);
6315 rb_cPrismConstantPathOrWriteNode = rb_define_class_under(rb_cPrism, "ConstantPathOrWriteNode", rb_cPrismNode);
6316 rb_cPrismConstantPathTargetNode = rb_define_class_under(rb_cPrism, "ConstantPathTargetNode", rb_cPrismNode);
6317 rb_cPrismConstantPathWriteNode = rb_define_class_under(rb_cPrism, "ConstantPathWriteNode", rb_cPrismNode);
6318 rb_cPrismConstantReadNode = rb_define_class_under(rb_cPrism, "ConstantReadNode", rb_cPrismNode);
6319 rb_cPrismConstantTargetNode = rb_define_class_under(rb_cPrism, "ConstantTargetNode", rb_cPrismNode);
6320 rb_cPrismConstantWriteNode = rb_define_class_under(rb_cPrism, "ConstantWriteNode", rb_cPrismNode);
6321 rb_cPrismDefNode = rb_define_class_under(rb_cPrism, "DefNode", rb_cPrismNode);
6322 rb_cPrismDefinedNode = rb_define_class_under(rb_cPrism, "DefinedNode", rb_cPrismNode);
6323 rb_cPrismElseNode = rb_define_class_under(rb_cPrism, "ElseNode", rb_cPrismNode);
6324 rb_cPrismEmbeddedStatementsNode = rb_define_class_under(rb_cPrism, "EmbeddedStatementsNode", rb_cPrismNode);
6325 rb_cPrismEmbeddedVariableNode = rb_define_class_under(rb_cPrism, "EmbeddedVariableNode", rb_cPrismNode);
6326 rb_cPrismEnsureNode = rb_define_class_under(rb_cPrism, "EnsureNode", rb_cPrismNode);
6327 rb_cPrismFalseNode = rb_define_class_under(rb_cPrism, "FalseNode", rb_cPrismNode);
6328 rb_cPrismFindPatternNode = rb_define_class_under(rb_cPrism, "FindPatternNode", rb_cPrismNode);
6329 rb_cPrismFlipFlopNode = rb_define_class_under(rb_cPrism, "FlipFlopNode", rb_cPrismNode);
6330 rb_cPrismFloatNode = rb_define_class_under(rb_cPrism, "FloatNode", rb_cPrismNode);
6331 rb_cPrismForNode = rb_define_class_under(rb_cPrism, "ForNode", rb_cPrismNode);
6332 rb_cPrismForwardingArgumentsNode = rb_define_class_under(rb_cPrism, "ForwardingArgumentsNode", rb_cPrismNode);
6333 rb_cPrismForwardingParameterNode = rb_define_class_under(rb_cPrism, "ForwardingParameterNode", rb_cPrismNode);
6334 rb_cPrismForwardingSuperNode = rb_define_class_under(rb_cPrism, "ForwardingSuperNode", rb_cPrismNode);
6335 rb_cPrismGlobalVariableAndWriteNode = rb_define_class_under(rb_cPrism, "GlobalVariableAndWriteNode", rb_cPrismNode);
6336 rb_cPrismGlobalVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "GlobalVariableOperatorWriteNode", rb_cPrismNode);
6337 rb_cPrismGlobalVariableOrWriteNode = rb_define_class_under(rb_cPrism, "GlobalVariableOrWriteNode", rb_cPrismNode);
6338 rb_cPrismGlobalVariableReadNode = rb_define_class_under(rb_cPrism, "GlobalVariableReadNode", rb_cPrismNode);
6339 rb_cPrismGlobalVariableTargetNode = rb_define_class_under(rb_cPrism, "GlobalVariableTargetNode", rb_cPrismNode);
6340 rb_cPrismGlobalVariableWriteNode = rb_define_class_under(rb_cPrism, "GlobalVariableWriteNode", rb_cPrismNode);
6341 rb_cPrismHashNode = rb_define_class_under(rb_cPrism, "HashNode", rb_cPrismNode);
6342 rb_cPrismHashPatternNode = rb_define_class_under(rb_cPrism, "HashPatternNode", rb_cPrismNode);
6343 rb_cPrismIfNode = rb_define_class_under(rb_cPrism, "IfNode", rb_cPrismNode);
6344 rb_cPrismImaginaryNode = rb_define_class_under(rb_cPrism, "ImaginaryNode", rb_cPrismNode);
6345 rb_cPrismImplicitNode = rb_define_class_under(rb_cPrism, "ImplicitNode", rb_cPrismNode);
6346 rb_cPrismImplicitRestNode = rb_define_class_under(rb_cPrism, "ImplicitRestNode", rb_cPrismNode);
6347 rb_cPrismInNode = rb_define_class_under(rb_cPrism, "InNode", rb_cPrismNode);
6348 rb_cPrismIndexAndWriteNode = rb_define_class_under(rb_cPrism, "IndexAndWriteNode", rb_cPrismNode);
6349 rb_cPrismIndexOperatorWriteNode = rb_define_class_under(rb_cPrism, "IndexOperatorWriteNode", rb_cPrismNode);
6350 rb_cPrismIndexOrWriteNode = rb_define_class_under(rb_cPrism, "IndexOrWriteNode", rb_cPrismNode);
6351 rb_cPrismIndexTargetNode = rb_define_class_under(rb_cPrism, "IndexTargetNode", rb_cPrismNode);
6352 rb_cPrismInstanceVariableAndWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableAndWriteNode", rb_cPrismNode);
6353 rb_cPrismInstanceVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOperatorWriteNode", rb_cPrismNode);
6354 rb_cPrismInstanceVariableOrWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableOrWriteNode", rb_cPrismNode);
6355 rb_cPrismInstanceVariableReadNode = rb_define_class_under(rb_cPrism, "InstanceVariableReadNode", rb_cPrismNode);
6356 rb_cPrismInstanceVariableTargetNode = rb_define_class_under(rb_cPrism, "InstanceVariableTargetNode", rb_cPrismNode);
6357 rb_cPrismInstanceVariableWriteNode = rb_define_class_under(rb_cPrism, "InstanceVariableWriteNode", rb_cPrismNode);
6358 rb_cPrismIntegerNode = rb_define_class_under(rb_cPrism, "IntegerNode", rb_cPrismNode);
6359 rb_cPrismInterpolatedMatchLastLineNode = rb_define_class_under(rb_cPrism, "InterpolatedMatchLastLineNode", rb_cPrismNode);
6360 rb_cPrismInterpolatedRegularExpressionNode = rb_define_class_under(rb_cPrism, "InterpolatedRegularExpressionNode", rb_cPrismNode);
6361 rb_cPrismInterpolatedStringNode = rb_define_class_under(rb_cPrism, "InterpolatedStringNode", rb_cPrismNode);
6362 rb_cPrismInterpolatedSymbolNode = rb_define_class_under(rb_cPrism, "InterpolatedSymbolNode", rb_cPrismNode);
6363 rb_cPrismInterpolatedXStringNode = rb_define_class_under(rb_cPrism, "InterpolatedXStringNode", rb_cPrismNode);
6364 rb_cPrismItLocalVariableReadNode = rb_define_class_under(rb_cPrism, "ItLocalVariableReadNode", rb_cPrismNode);
6365 rb_cPrismItParametersNode = rb_define_class_under(rb_cPrism, "ItParametersNode", rb_cPrismNode);
6366 rb_cPrismKeywordHashNode = rb_define_class_under(rb_cPrism, "KeywordHashNode", rb_cPrismNode);
6367 rb_cPrismKeywordRestParameterNode = rb_define_class_under(rb_cPrism, "KeywordRestParameterNode", rb_cPrismNode);
6368 rb_cPrismLambdaNode = rb_define_class_under(rb_cPrism, "LambdaNode", rb_cPrismNode);
6369 rb_cPrismLocalVariableAndWriteNode = rb_define_class_under(rb_cPrism, "LocalVariableAndWriteNode", rb_cPrismNode);
6370 rb_cPrismLocalVariableOperatorWriteNode = rb_define_class_under(rb_cPrism, "LocalVariableOperatorWriteNode", rb_cPrismNode);
6371 rb_cPrismLocalVariableOrWriteNode = rb_define_class_under(rb_cPrism, "LocalVariableOrWriteNode", rb_cPrismNode);
6372 rb_cPrismLocalVariableReadNode = rb_define_class_under(rb_cPrism, "LocalVariableReadNode", rb_cPrismNode);
6373 rb_cPrismLocalVariableTargetNode = rb_define_class_under(rb_cPrism, "LocalVariableTargetNode", rb_cPrismNode);
6374 rb_cPrismLocalVariableWriteNode = rb_define_class_under(rb_cPrism, "LocalVariableWriteNode", rb_cPrismNode);
6375 rb_cPrismMatchLastLineNode = rb_define_class_under(rb_cPrism, "MatchLastLineNode", rb_cPrismNode);
6376 rb_cPrismMatchPredicateNode = rb_define_class_under(rb_cPrism, "MatchPredicateNode", rb_cPrismNode);
6377 rb_cPrismMatchRequiredNode = rb_define_class_under(rb_cPrism, "MatchRequiredNode", rb_cPrismNode);
6378 rb_cPrismMatchWriteNode = rb_define_class_under(rb_cPrism, "MatchWriteNode", rb_cPrismNode);
6379 rb_cPrismMissingNode = rb_define_class_under(rb_cPrism, "MissingNode", rb_cPrismNode);
6380 rb_cPrismModuleNode = rb_define_class_under(rb_cPrism, "ModuleNode", rb_cPrismNode);
6381 rb_cPrismMultiTargetNode = rb_define_class_under(rb_cPrism, "MultiTargetNode", rb_cPrismNode);
6382 rb_cPrismMultiWriteNode = rb_define_class_under(rb_cPrism, "MultiWriteNode", rb_cPrismNode);
6383 rb_cPrismNextNode = rb_define_class_under(rb_cPrism, "NextNode", rb_cPrismNode);
6384 rb_cPrismNilNode = rb_define_class_under(rb_cPrism, "NilNode", rb_cPrismNode);
6385 rb_cPrismNoKeywordsParameterNode = rb_define_class_under(rb_cPrism, "NoKeywordsParameterNode", rb_cPrismNode);
6386 rb_cPrismNumberedParametersNode = rb_define_class_under(rb_cPrism, "NumberedParametersNode", rb_cPrismNode);
6387 rb_cPrismNumberedReferenceReadNode = rb_define_class_under(rb_cPrism, "NumberedReferenceReadNode", rb_cPrismNode);
6388 rb_cPrismOptionalKeywordParameterNode = rb_define_class_under(rb_cPrism, "OptionalKeywordParameterNode", rb_cPrismNode);
6389 rb_cPrismOptionalParameterNode = rb_define_class_under(rb_cPrism, "OptionalParameterNode", rb_cPrismNode);
6390 rb_cPrismOrNode = rb_define_class_under(rb_cPrism, "OrNode", rb_cPrismNode);
6391 rb_cPrismParametersNode = rb_define_class_under(rb_cPrism, "ParametersNode", rb_cPrismNode);
6392 rb_cPrismParenthesesNode = rb_define_class_under(rb_cPrism, "ParenthesesNode", rb_cPrismNode);
6393 rb_cPrismPinnedExpressionNode = rb_define_class_under(rb_cPrism, "PinnedExpressionNode", rb_cPrismNode);
6394 rb_cPrismPinnedVariableNode = rb_define_class_under(rb_cPrism, "PinnedVariableNode", rb_cPrismNode);
6395 rb_cPrismPostExecutionNode = rb_define_class_under(rb_cPrism, "PostExecutionNode", rb_cPrismNode);
6396 rb_cPrismPreExecutionNode = rb_define_class_under(rb_cPrism, "PreExecutionNode", rb_cPrismNode);
6397 rb_cPrismProgramNode = rb_define_class_under(rb_cPrism, "ProgramNode", rb_cPrismNode);
6398 rb_cPrismRangeNode = rb_define_class_under(rb_cPrism, "RangeNode", rb_cPrismNode);
6399 rb_cPrismRationalNode = rb_define_class_under(rb_cPrism, "RationalNode", rb_cPrismNode);
6400 rb_cPrismRedoNode = rb_define_class_under(rb_cPrism, "RedoNode", rb_cPrismNode);
6401 rb_cPrismRegularExpressionNode = rb_define_class_under(rb_cPrism, "RegularExpressionNode", rb_cPrismNode);
6402 rb_cPrismRequiredKeywordParameterNode = rb_define_class_under(rb_cPrism, "RequiredKeywordParameterNode", rb_cPrismNode);
6403 rb_cPrismRequiredParameterNode = rb_define_class_under(rb_cPrism, "RequiredParameterNode", rb_cPrismNode);
6404 rb_cPrismRescueModifierNode = rb_define_class_under(rb_cPrism, "RescueModifierNode", rb_cPrismNode);
6405 rb_cPrismRescueNode = rb_define_class_under(rb_cPrism, "RescueNode", rb_cPrismNode);
6406 rb_cPrismRestParameterNode = rb_define_class_under(rb_cPrism, "RestParameterNode", rb_cPrismNode);
6407 rb_cPrismRetryNode = rb_define_class_under(rb_cPrism, "RetryNode", rb_cPrismNode);
6408 rb_cPrismReturnNode = rb_define_class_under(rb_cPrism, "ReturnNode", rb_cPrismNode);
6409 rb_cPrismSelfNode = rb_define_class_under(rb_cPrism, "SelfNode", rb_cPrismNode);
6410 rb_cPrismShareableConstantNode = rb_define_class_under(rb_cPrism, "ShareableConstantNode", rb_cPrismNode);
6411 rb_cPrismSingletonClassNode = rb_define_class_under(rb_cPrism, "SingletonClassNode", rb_cPrismNode);
6412 rb_cPrismSourceEncodingNode = rb_define_class_under(rb_cPrism, "SourceEncodingNode", rb_cPrismNode);
6413 rb_cPrismSourceFileNode = rb_define_class_under(rb_cPrism, "SourceFileNode", rb_cPrismNode);
6414 rb_cPrismSourceLineNode = rb_define_class_under(rb_cPrism, "SourceLineNode", rb_cPrismNode);
6415 rb_cPrismSplatNode = rb_define_class_under(rb_cPrism, "SplatNode", rb_cPrismNode);
6416 rb_cPrismStatementsNode = rb_define_class_under(rb_cPrism, "StatementsNode", rb_cPrismNode);
6417 rb_cPrismStringNode = rb_define_class_under(rb_cPrism, "StringNode", rb_cPrismNode);
6418 rb_cPrismSuperNode = rb_define_class_under(rb_cPrism, "SuperNode", rb_cPrismNode);
6419 rb_cPrismSymbolNode = rb_define_class_under(rb_cPrism, "SymbolNode", rb_cPrismNode);
6420 rb_cPrismTrueNode = rb_define_class_under(rb_cPrism, "TrueNode", rb_cPrismNode);
6421 rb_cPrismUndefNode = rb_define_class_under(rb_cPrism, "UndefNode", rb_cPrismNode);
6422 rb_cPrismUnlessNode = rb_define_class_under(rb_cPrism, "UnlessNode", rb_cPrismNode);
6423 rb_cPrismUntilNode = rb_define_class_under(rb_cPrism, "UntilNode", rb_cPrismNode);
6424 rb_cPrismWhenNode = rb_define_class_under(rb_cPrism, "WhenNode", rb_cPrismNode);
6425 rb_cPrismWhileNode = rb_define_class_under(rb_cPrism, "WhileNode", rb_cPrismNode);
6426 rb_cPrismXStringNode = rb_define_class_under(rb_cPrism, "XStringNode", rb_cPrismNode);
6427 rb_cPrismYieldNode = rb_define_class_under(rb_cPrism, "YieldNode", rb_cPrismNode);
6428}
@ PM_DEFINED_NODE
DefinedNode.
Definition ast.h:709
@ PM_PRE_EXECUTION_NODE
PreExecutionNode.
Definition ast.h:931
@ PM_RETRY_NODE
RetryNode.
Definition ast.h:964
@ PM_REDO_NODE
RedoNode.
Definition ast.h:943
@ PM_CONSTANT_PATH_WRITE_NODE
ConstantPathWriteNode.
Definition ast.h:694
@ PM_INDEX_AND_WRITE_NODE
IndexAndWriteNode.
Definition ast.h:787
@ PM_SOURCE_LINE_NODE
SourceLineNode.
Definition ast.h:985
@ PM_UNLESS_NODE
UnlessNode.
Definition ast.h:1009
@ PM_EMBEDDED_VARIABLE_NODE
EmbeddedVariableNode.
Definition ast.h:718
@ PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE
GlobalVariableOperatorWriteNode.
Definition ast.h:751
@ PM_CALL_NODE
CallNode.
Definition ast.h:628
@ PM_NIL_NODE
NilNode.
Definition ast.h:895
@ PM_GLOBAL_VARIABLE_READ_NODE
GlobalVariableReadNode.
Definition ast.h:757
@ PM_RATIONAL_NODE
RationalNode.
Definition ast.h:940
@ PM_YIELD_NODE
YieldNode.
Definition ast.h:1024
@ PM_LOCAL_VARIABLE_AND_WRITE_NODE
LocalVariableAndWriteNode.
Definition ast.h:850
@ PM_CONSTANT_AND_WRITE_NODE
ConstantAndWriteNode.
Definition ast.h:670
@ PM_CLASS_NODE
ClassNode.
Definition ast.h:649
@ PM_FIND_PATTERN_NODE
FindPatternNode.
Definition ast.h:727
@ PM_CALL_OPERATOR_WRITE_NODE
CallOperatorWriteNode.
Definition ast.h:631
@ PM_MATCH_WRITE_NODE
MatchWriteNode.
Definition ast.h:877
@ PM_ARRAY_NODE
ArrayNode.
Definition ast.h:589
@ PM_CONSTANT_PATH_TARGET_NODE
ConstantPathTargetNode.
Definition ast.h:691
@ PM_PROGRAM_NODE
ProgramNode.
Definition ast.h:934
@ PM_OR_NODE
OrNode.
Definition ast.h:913
@ PM_MULTI_WRITE_NODE
MultiWriteNode.
Definition ast.h:889
@ PM_IF_NODE
IfNode.
Definition ast.h:772
@ PM_IMPLICIT_NODE
ImplicitNode.
Definition ast.h:778
@ PM_ARGUMENTS_NODE
ArgumentsNode.
Definition ast.h:586
@ PM_FORWARDING_SUPER_NODE
ForwardingSuperNode.
Definition ast.h:745
@ PM_WHILE_NODE
WhileNode.
Definition ast.h:1018
@ PM_INTERPOLATED_STRING_NODE
InterpolatedStringNode.
Definition ast.h:826
@ PM_FALSE_NODE
FalseNode.
Definition ast.h:724
@ PM_FORWARDING_PARAMETER_NODE
ForwardingParameterNode.
Definition ast.h:742
@ PM_BLOCK_LOCAL_VARIABLE_NODE
BlockLocalVariableNode.
Definition ast.h:610
@ PM_HASH_NODE
HashNode.
Definition ast.h:766
@ PM_UNTIL_NODE
UntilNode.
Definition ast.h:1012
@ PM_MATCH_PREDICATE_NODE
MatchPredicateNode.
Definition ast.h:871
@ PM_X_STRING_NODE
XStringNode.
Definition ast.h:1021
@ PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE
LocalVariableOperatorWriteNode.
Definition ast.h:853
@ PM_LOCAL_VARIABLE_OR_WRITE_NODE
LocalVariableOrWriteNode.
Definition ast.h:856
@ PM_INSTANCE_VARIABLE_AND_WRITE_NODE
InstanceVariableAndWriteNode.
Definition ast.h:799
@ PM_GLOBAL_VARIABLE_TARGET_NODE
GlobalVariableTargetNode.
Definition ast.h:760
@ PM_AND_NODE
AndNode.
Definition ast.h:583
@ PM_CONSTANT_TARGET_NODE
ConstantTargetNode.
Definition ast.h:700
@ PM_IT_LOCAL_VARIABLE_READ_NODE
ItLocalVariableReadNode.
Definition ast.h:835
@ PM_CONSTANT_PATH_AND_WRITE_NODE
ConstantPathAndWriteNode.
Definition ast.h:679
@ PM_IN_NODE
InNode.
Definition ast.h:784
@ PM_BLOCK_PARAMETER_NODE
BlockParameterNode.
Definition ast.h:616
@ PM_CAPTURE_PATTERN_NODE
CapturePatternNode.
Definition ast.h:640
@ PM_SOURCE_FILE_NODE
SourceFileNode.
Definition ast.h:982
@ PM_NO_KEYWORDS_PARAMETER_NODE
NoKeywordsParameterNode.
Definition ast.h:898
@ PM_CONSTANT_PATH_OPERATOR_WRITE_NODE
ConstantPathOperatorWriteNode.
Definition ast.h:685
@ PM_MULTI_TARGET_NODE
MultiTargetNode.
Definition ast.h:886
@ PM_SPLAT_NODE
SplatNode.
Definition ast.h:988
@ PM_LAMBDA_NODE
LambdaNode.
Definition ast.h:847
@ PM_CLASS_VARIABLE_READ_NODE
ClassVariableReadNode.
Definition ast.h:661
@ PM_REQUIRED_KEYWORD_PARAMETER_NODE
RequiredKeywordParameterNode.
Definition ast.h:949
@ PM_CALL_TARGET_NODE
CallTargetNode.
Definition ast.h:637
@ PM_ELSE_NODE
ElseNode.
Definition ast.h:712
@ PM_INTERPOLATED_MATCH_LAST_LINE_NODE
InterpolatedMatchLastLineNode.
Definition ast.h:820
@ PM_WHEN_NODE
WhenNode.
Definition ast.h:1015
@ PM_NUMBERED_PARAMETERS_NODE
NumberedParametersNode.
Definition ast.h:901
@ PM_SYMBOL_NODE
SymbolNode.
Definition ast.h:1000
@ PM_RESCUE_MODIFIER_NODE
RescueModifierNode.
Definition ast.h:955
@ PM_ALIAS_METHOD_NODE
AliasMethodNode.
Definition ast.h:577
@ PM_MATCH_REQUIRED_NODE
MatchRequiredNode.
Definition ast.h:874
@ PM_FORWARDING_ARGUMENTS_NODE
ForwardingArgumentsNode.
Definition ast.h:739
@ PM_BACK_REFERENCE_READ_NODE
BackReferenceReadNode.
Definition ast.h:601
@ PM_BLOCK_ARGUMENT_NODE
BlockArgumentNode.
Definition ast.h:607
@ PM_MISSING_NODE
MissingNode.
Definition ast.h:880
@ PM_SELF_NODE
SelfNode.
Definition ast.h:970
@ PM_IMPLICIT_REST_NODE
ImplicitRestNode.
Definition ast.h:781
@ PM_TRUE_NODE
TrueNode.
Definition ast.h:1003
@ PM_ASSOC_SPLAT_NODE
AssocSplatNode.
Definition ast.h:598
@ PM_CLASS_VARIABLE_AND_WRITE_NODE
ClassVariableAndWriteNode.
Definition ast.h:652
@ PM_RANGE_NODE
RangeNode.
Definition ast.h:937
@ PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE
InstanceVariableOperatorWriteNode.
Definition ast.h:802
@ PM_LOCAL_VARIABLE_READ_NODE
LocalVariableReadNode.
Definition ast.h:859
@ PM_SHAREABLE_CONSTANT_NODE
ShareableConstantNode.
Definition ast.h:973
@ PM_NEXT_NODE
NextNode.
Definition ast.h:892
@ PM_INSTANCE_VARIABLE_OR_WRITE_NODE
InstanceVariableOrWriteNode.
Definition ast.h:805
@ PM_REGULAR_EXPRESSION_NODE
RegularExpressionNode.
Definition ast.h:946
@ PM_CLASS_VARIABLE_OR_WRITE_NODE
ClassVariableOrWriteNode.
Definition ast.h:658
@ PM_BLOCK_PARAMETERS_NODE
BlockParametersNode.
Definition ast.h:619
@ PM_CONSTANT_WRITE_NODE
ConstantWriteNode.
Definition ast.h:703
@ PM_HASH_PATTERN_NODE
HashPatternNode.
Definition ast.h:769
@ PM_INDEX_OPERATOR_WRITE_NODE
IndexOperatorWriteNode.
Definition ast.h:790
@ PM_UNDEF_NODE
UndefNode.
Definition ast.h:1006
@ PM_ALTERNATION_PATTERN_NODE
AlternationPatternNode.
Definition ast.h:580
@ PM_ENSURE_NODE
EnsureNode.
Definition ast.h:721
@ PM_LOCAL_VARIABLE_WRITE_NODE
LocalVariableWriteNode.
Definition ast.h:865
@ PM_SINGLETON_CLASS_NODE
SingletonClassNode.
Definition ast.h:976
@ PM_KEYWORD_HASH_NODE
KeywordHashNode.
Definition ast.h:841
@ PM_PARENTHESES_NODE
ParenthesesNode.
Definition ast.h:919
@ PM_FOR_NODE
ForNode.
Definition ast.h:736
@ PM_CLASS_VARIABLE_WRITE_NODE
ClassVariableWriteNode.
Definition ast.h:667
@ PM_POST_EXECUTION_NODE
PostExecutionNode.
Definition ast.h:928
@ PM_CONSTANT_OPERATOR_WRITE_NODE
ConstantOperatorWriteNode.
Definition ast.h:673
@ PM_RETURN_NODE
ReturnNode.
Definition ast.h:967
@ PM_MODULE_NODE
ModuleNode.
Definition ast.h:883
@ PM_ARRAY_PATTERN_NODE
ArrayPatternNode.
Definition ast.h:592
@ PM_SUPER_NODE
SuperNode.
Definition ast.h:997
@ PM_MATCH_LAST_LINE_NODE
MatchLastLineNode.
Definition ast.h:868
@ PM_CONSTANT_PATH_NODE
ConstantPathNode.
Definition ast.h:682
@ PM_INTERPOLATED_SYMBOL_NODE
InterpolatedSymbolNode.
Definition ast.h:829
@ PM_CALL_AND_WRITE_NODE
CallAndWriteNode.
Definition ast.h:625
@ PM_OPTIONAL_KEYWORD_PARAMETER_NODE
OptionalKeywordParameterNode.
Definition ast.h:907
@ PM_CLASS_VARIABLE_TARGET_NODE
ClassVariableTargetNode.
Definition ast.h:664
@ PM_CASE_MATCH_NODE
CaseMatchNode.
Definition ast.h:643
@ PM_BREAK_NODE
BreakNode.
Definition ast.h:622
@ PM_CALL_OR_WRITE_NODE
CallOrWriteNode.
Definition ast.h:634
@ PM_IMAGINARY_NODE
ImaginaryNode.
Definition ast.h:775
@ PM_DEF_NODE
DefNode.
Definition ast.h:706
@ PM_CONSTANT_READ_NODE
ConstantReadNode.
Definition ast.h:697
@ PM_GLOBAL_VARIABLE_WRITE_NODE
GlobalVariableWriteNode.
Definition ast.h:763
@ PM_SOURCE_ENCODING_NODE
SourceEncodingNode.
Definition ast.h:979
@ PM_BEGIN_NODE
BeginNode.
Definition ast.h:604
@ PM_INTERPOLATED_X_STRING_NODE
InterpolatedXStringNode.
Definition ast.h:832
@ PM_INSTANCE_VARIABLE_READ_NODE
InstanceVariableReadNode.
Definition ast.h:808
@ PM_FLIP_FLOP_NODE
FlipFlopNode.
Definition ast.h:730
@ PM_PINNED_VARIABLE_NODE
PinnedVariableNode.
Definition ast.h:925
@ PM_REQUIRED_PARAMETER_NODE
RequiredParameterNode.
Definition ast.h:952
@ PM_INSTANCE_VARIABLE_WRITE_NODE
InstanceVariableWriteNode.
Definition ast.h:814
@ PM_INSTANCE_VARIABLE_TARGET_NODE
InstanceVariableTargetNode.
Definition ast.h:811
@ PM_GLOBAL_VARIABLE_AND_WRITE_NODE
GlobalVariableAndWriteNode.
Definition ast.h:748
@ PM_CASE_NODE
CaseNode.
Definition ast.h:646
@ PM_RESCUE_NODE
RescueNode.
Definition ast.h:958
@ PM_FLOAT_NODE
FloatNode.
Definition ast.h:733
@ PM_ASSOC_NODE
AssocNode.
Definition ast.h:595
@ PM_IT_PARAMETERS_NODE
ItParametersNode.
Definition ast.h:838
@ PM_INTEGER_NODE
IntegerNode.
Definition ast.h:817
@ PM_LOCAL_VARIABLE_TARGET_NODE
LocalVariableTargetNode.
Definition ast.h:862
@ PM_STRING_NODE
StringNode.
Definition ast.h:994
@ PM_INDEX_OR_WRITE_NODE
IndexOrWriteNode.
Definition ast.h:793
@ PM_ALIAS_GLOBAL_VARIABLE_NODE
AliasGlobalVariableNode.
Definition ast.h:574
@ PM_PARAMETERS_NODE
ParametersNode.
Definition ast.h:916
@ PM_NUMBERED_REFERENCE_READ_NODE
NumberedReferenceReadNode.
Definition ast.h:904
@ PM_CONSTANT_PATH_OR_WRITE_NODE
ConstantPathOrWriteNode.
Definition ast.h:688
@ PM_GLOBAL_VARIABLE_OR_WRITE_NODE
GlobalVariableOrWriteNode.
Definition ast.h:754
@ PM_CONSTANT_OR_WRITE_NODE
ConstantOrWriteNode.
Definition ast.h:676
@ PM_STATEMENTS_NODE
StatementsNode.
Definition ast.h:991
@ PM_OPTIONAL_PARAMETER_NODE
OptionalParameterNode.
Definition ast.h:910
@ PM_PINNED_EXPRESSION_NODE
PinnedExpressionNode.
Definition ast.h:922
@ PM_BLOCK_NODE
BlockNode.
Definition ast.h:613
@ PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE
ClassVariableOperatorWriteNode.
Definition ast.h:655
@ PM_REST_PARAMETER_NODE
RestParameterNode.
Definition ast.h:961
@ PM_EMBEDDED_STATEMENTS_NODE
EmbeddedStatementsNode.
Definition ast.h:715
@ PM_INTERPOLATED_REGULAR_EXPRESSION_NODE
InterpolatedRegularExpressionNode.
Definition ast.h:823
@ PM_INDEX_TARGET_NODE
IndexTargetNode.
Definition ast.h:796
@ PM_KEYWORD_REST_PARAMETER_NODE
KeywordRestParameterNode.
Definition ast.h:844
#define PM_NODE_TYPE(node)
Cast the type to an enum to allow the compiler to provide exhaustiveness checking.
Definition ast.h:1053
VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
Defines a class under the namespace of outer.
Definition class.c:1012
#define xfree
Old name of ruby_xfree.
Definition xmalloc.h:58
#define ID2SYM
Old name of RB_ID2SYM.
Definition symbol.h:44
#define ULONG2NUM
Old name of RB_ULONG2NUM.
Definition long.h:60
#define xmalloc
Old name of ruby_xmalloc.
Definition xmalloc.h:53
#define LONG2NUM
Old name of RB_LONG2NUM.
Definition long.h:50
#define ULL2NUM
Old name of RB_ULL2NUM.
Definition long_long.h:31
#define Qnil
Old name of RUBY_Qnil.
#define DBL2NUM
Old name of rb_float_new.
Definition double.h:29
#define UINT2NUM
Old name of RB_UINT2NUM.
Definition int.h:46
VALUE rb_eRuntimeError
RuntimeError exception.
Definition error.c:1428
VALUE rb_class_new_instance(int argc, const VALUE *argv, VALUE klass)
Allocates, then initialises an instance of the given class.
Definition object.c:2138
VALUE rb_funcall(VALUE recv, ID mid, int n,...)
Calls a method.
Definition vm_eval.c:1099
#define rb_str_new(str, len)
Allocates an instance of rb_cString.
Definition string.h:1498
VALUE rb_str_intern(VALUE str)
Identical to rb_to_symbol(), except it assumes the receiver being an instance of RString.
Definition symbol.c:878
static ID rb_intern_const(const char *str)
This is a "tiny optimisation" over rb_intern().
Definition symbol.h:284
VALUE type(ANYARGS)
ANYARGS-ed function type.
PRISM_EXPORTED_FUNCTION const char * pm_token_type_name(pm_token_type_t token_type)
Returns a string representation of the given token type.
Definition token_type.c:17
#define RARRAY_AREF(a, i)
Definition rarray.h:403
AliasGlobalVariableNode.
Definition ast.h:1107
struct pm_node * old_name
AliasGlobalVariableNode::old_name.
Definition ast.h:1130
struct pm_node * new_name
AliasGlobalVariableNode::new_name.
Definition ast.h:1120
pm_location_t keyword_loc
AliasGlobalVariableNode::keyword_loc.
Definition ast.h:1140
AliasMethodNode.
Definition ast.h:1155
struct pm_node * old_name
AliasMethodNode::old_name.
Definition ast.h:1190
struct pm_node * new_name
AliasMethodNode::new_name.
Definition ast.h:1174
pm_location_t keyword_loc
AliasMethodNode::keyword_loc.
Definition ast.h:1200
AlternationPatternNode.
Definition ast.h:1215
pm_location_t operator_loc
AlternationPatternNode::operator_loc.
Definition ast.h:1248
struct pm_node * left
AlternationPatternNode::left.
Definition ast.h:1228
struct pm_node * right
AlternationPatternNode::right.
Definition ast.h:1238
AndNode.
Definition ast.h:1263
struct pm_node * left
AndNode::left.
Definition ast.h:1279
struct pm_node * right
AndNode::right.
Definition ast.h:1292
pm_location_t operator_loc
AndNode::operator_loc.
Definition ast.h:1302
ArgumentsNode.
Definition ast.h:1324
struct pm_node_list arguments
ArgumentsNode::arguments.
Definition ast.h:1337
ArrayNode.
Definition ast.h:1355
pm_location_t closing_loc
ArrayNode::closing_loc.
Definition ast.h:1389
struct pm_node_list elements
ArrayNode::elements.
Definition ast.h:1365
pm_location_t opening_loc
ArrayNode::opening_loc.
Definition ast.h:1377
ArrayPatternNode.
Definition ast.h:1416
struct pm_node_list requireds
ArrayPatternNode::requireds.
Definition ast.h:1434
struct pm_node * rest
ArrayPatternNode::rest.
Definition ast.h:1444
struct pm_node * constant
ArrayPatternNode::constant.
Definition ast.h:1424
pm_location_t opening_loc
ArrayPatternNode::opening_loc.
Definition ast.h:1464
pm_location_t closing_loc
ArrayPatternNode::closing_loc.
Definition ast.h:1474
struct pm_node_list posts
ArrayPatternNode::posts.
Definition ast.h:1454
AssocNode.
Definition ast.h:1489
struct pm_node * value
AssocNode::value.
Definition ast.h:1521
struct pm_node * key
AssocNode::key.
Definition ast.h:1508
pm_location_t operator_loc
AssocNode::operator_loc.
Definition ast.h:1531
AssocSplatNode.
Definition ast.h:1546
struct pm_node * value
AssocSplatNode::value.
Definition ast.h:1559
pm_location_t operator_loc
AssocSplatNode::operator_loc.
Definition ast.h:1569
BackReferenceReadNode.
Definition ast.h:1584
pm_constant_id_t name
BackReferenceReadNode::name.
Definition ast.h:1598
BeginNode.
Definition ast.h:1615
struct pm_ensure_node * ensure_clause
BeginNode::ensure_clause.
Definition ast.h:1668
struct pm_rescue_node * rescue_clause
BeginNode::rescue_clause.
Definition ast.h:1648
struct pm_statements_node * statements
BeginNode::statements.
Definition ast.h:1638
pm_location_t end_keyword_loc
BeginNode::end_keyword_loc.
Definition ast.h:1678
pm_location_t begin_keyword_loc
BeginNode::begin_keyword_loc.
Definition ast.h:1628
struct pm_else_node * else_clause
BeginNode::else_clause.
Definition ast.h:1658
BlockArgumentNode.
Definition ast.h:1693
struct pm_node * expression
BlockArgumentNode::expression.
Definition ast.h:1706
pm_location_t operator_loc
BlockArgumentNode::operator_loc.
Definition ast.h:1716
BlockLocalVariableNode.
Definition ast.h:1734
pm_constant_id_t name
BlockLocalVariableNode::name.
Definition ast.h:1747
BlockNode.
Definition ast.h:1762
pm_location_t closing_loc
BlockNode::closing_loc.
Definition ast.h:1819
struct pm_node * parameters
BlockNode::parameters.
Definition ast.h:1789
pm_location_t opening_loc
BlockNode::opening_loc.
Definition ast.h:1809
struct pm_node * body
BlockNode::body.
Definition ast.h:1799
pm_constant_id_list_t locals
BlockNode::locals.
Definition ast.h:1775
BlockParameterNode.
Definition ast.h:1838
pm_location_t operator_loc
BlockParameterNode::operator_loc.
Definition ast.h:1873
pm_location_t name_loc
BlockParameterNode::name_loc.
Definition ast.h:1862
pm_constant_id_t name
BlockParameterNode::name.
Definition ast.h:1852
BlockParametersNode.
Definition ast.h:1892
struct pm_parameters_node * parameters
BlockParametersNode::parameters.
Definition ast.h:1909
struct pm_node_list locals
BlockParametersNode::locals.
Definition ast.h:1923
pm_location_t closing_loc
BlockParametersNode::closing_loc.
Definition ast.h:1951
pm_location_t opening_loc
BlockParametersNode::opening_loc.
Definition ast.h:1937
BreakNode.
Definition ast.h:1966
struct pm_arguments_node * arguments
BreakNode::arguments.
Definition ast.h:1979
pm_location_t keyword_loc
BreakNode::keyword_loc.
Definition ast.h:1989
CallAndWriteNode.
Definition ast.h:2010
pm_location_t operator_loc
CallAndWriteNode::operator_loc.
Definition ast.h:2073
struct pm_node * value
CallAndWriteNode::value.
Definition ast.h:2083
pm_location_t call_operator_loc
CallAndWriteNode::call_operator_loc.
Definition ast.h:2033
pm_location_t message_loc
CallAndWriteNode::message_loc.
Definition ast.h:2043
pm_constant_id_t read_name
CallAndWriteNode::read_name.
Definition ast.h:2053
pm_constant_id_t write_name
CallAndWriteNode::write_name.
Definition ast.h:2063
struct pm_node * receiver
CallAndWriteNode::receiver.
Definition ast.h:2023
CallNode.
Definition ast.h:2119
pm_location_t opening_loc
CallNode::opening_loc.
Definition ast.h:2180
pm_location_t closing_loc
CallNode::closing_loc.
Definition ast.h:2200
struct pm_node * receiver
CallNode::receiver.
Definition ast.h:2138
pm_constant_id_t name
CallNode::name.
Definition ast.h:2161
pm_location_t call_operator_loc
CallNode::call_operator_loc.
Definition ast.h:2151
pm_location_t message_loc
CallNode::message_loc.
Definition ast.h:2171
struct pm_arguments_node * arguments
CallNode::arguments.
Definition ast.h:2190
struct pm_node * block
CallNode::block.
Definition ast.h:2210
CallOperatorWriteNode.
Definition ast.h:2231
pm_constant_id_t read_name
CallOperatorWriteNode::read_name.
Definition ast.h:2274
pm_constant_id_t binary_operator
CallOperatorWriteNode::binary_operator.
Definition ast.h:2294
pm_location_t binary_operator_loc
CallOperatorWriteNode::binary_operator_loc.
Definition ast.h:2304
struct pm_node * receiver
CallOperatorWriteNode::receiver.
Definition ast.h:2244
pm_constant_id_t write_name
CallOperatorWriteNode::write_name.
Definition ast.h:2284
pm_location_t message_loc
CallOperatorWriteNode::message_loc.
Definition ast.h:2264
struct pm_node * value
CallOperatorWriteNode::value.
Definition ast.h:2314
pm_location_t call_operator_loc
CallOperatorWriteNode::call_operator_loc.
Definition ast.h:2254
CallOrWriteNode.
Definition ast.h:2335
pm_location_t operator_loc
CallOrWriteNode::operator_loc.
Definition ast.h:2398
pm_location_t call_operator_loc
CallOrWriteNode::call_operator_loc.
Definition ast.h:2358
struct pm_node * receiver
CallOrWriteNode::receiver.
Definition ast.h:2348
struct pm_node * value
CallOrWriteNode::value.
Definition ast.h:2408
pm_constant_id_t write_name
CallOrWriteNode::write_name.
Definition ast.h:2388
pm_constant_id_t read_name
CallOrWriteNode::read_name.
Definition ast.h:2378
pm_location_t message_loc
CallOrWriteNode::message_loc.
Definition ast.h:2368
CallTargetNode.
Definition ast.h:2437
pm_constant_id_t name
CallTargetNode::name.
Definition ast.h:2470
struct pm_node * receiver
CallTargetNode::receiver.
Definition ast.h:2450
pm_location_t call_operator_loc
CallTargetNode::call_operator_loc.
Definition ast.h:2460
pm_location_t message_loc
CallTargetNode::message_loc.
Definition ast.h:2480
CapturePatternNode.
Definition ast.h:2495
struct pm_local_variable_target_node * target
CapturePatternNode::target.
Definition ast.h:2518
pm_location_t operator_loc
CapturePatternNode::operator_loc.
Definition ast.h:2528
struct pm_node * value
CapturePatternNode::value.
Definition ast.h:2508
CaseMatchNode.
Definition ast.h:2545
pm_location_t end_keyword_loc
CaseMatchNode::end_keyword_loc.
Definition ast.h:2598
struct pm_node_list conditions
CaseMatchNode::conditions.
Definition ast.h:2568
pm_location_t case_keyword_loc
CaseMatchNode::case_keyword_loc.
Definition ast.h:2588
struct pm_else_node * else_clause
CaseMatchNode::else_clause.
Definition ast.h:2578
struct pm_node * predicate
CaseMatchNode::predicate.
Definition ast.h:2558
CaseNode.
Definition ast.h:2615
struct pm_node * predicate
CaseNode::predicate.
Definition ast.h:2628
struct pm_else_node * else_clause
CaseNode::else_clause.
Definition ast.h:2648
struct pm_node_list conditions
CaseNode::conditions.
Definition ast.h:2638
pm_location_t case_keyword_loc
CaseNode::case_keyword_loc.
Definition ast.h:2658
pm_location_t end_keyword_loc
CaseNode::end_keyword_loc.
Definition ast.h:2668
ClassNode.
Definition ast.h:2683
pm_location_t class_keyword_loc
ClassNode::class_keyword_loc.
Definition ast.h:2696
pm_location_t end_keyword_loc
ClassNode::end_keyword_loc.
Definition ast.h:2721
struct pm_node * constant_path
ClassNode::constant_path.
Definition ast.h:2701
pm_constant_id_list_t locals
ClassNode::locals.
Definition ast.h:2691
pm_location_t inheritance_operator_loc
ClassNode::inheritance_operator_loc.
Definition ast.h:2706
pm_constant_id_t name
ClassNode::name.
Definition ast.h:2726
struct pm_node * body
ClassNode::body.
Definition ast.h:2716
struct pm_node * superclass
ClassNode::superclass.
Definition ast.h:2711
ClassVariableAndWriteNode.
Definition ast.h:2741
struct pm_node * value
ClassVariableAndWriteNode::value.
Definition ast.h:2784
pm_constant_id_t name
ClassVariableAndWriteNode::name.
Definition ast.h:2754
pm_location_t operator_loc
ClassVariableAndWriteNode::operator_loc.
Definition ast.h:2774
pm_location_t name_loc
ClassVariableAndWriteNode::name_loc.
Definition ast.h:2764
ClassVariableOperatorWriteNode.
Definition ast.h:2799
pm_constant_id_t name
ClassVariableOperatorWriteNode::name.
Definition ast.h:2807
pm_location_t name_loc
ClassVariableOperatorWriteNode::name_loc.
Definition ast.h:2812
pm_constant_id_t binary_operator
ClassVariableOperatorWriteNode::binary_operator.
Definition ast.h:2827
struct pm_node * value
ClassVariableOperatorWriteNode::value.
Definition ast.h:2822
pm_location_t binary_operator_loc
ClassVariableOperatorWriteNode::binary_operator_loc.
Definition ast.h:2817
ClassVariableOrWriteNode.
Definition ast.h:2842
pm_location_t name_loc
ClassVariableOrWriteNode::name_loc.
Definition ast.h:2855
pm_location_t operator_loc
ClassVariableOrWriteNode::operator_loc.
Definition ast.h:2860
pm_constant_id_t name
ClassVariableOrWriteNode::name.
Definition ast.h:2850
struct pm_node * value
ClassVariableOrWriteNode::value.
Definition ast.h:2865
ClassVariableReadNode.
Definition ast.h:2880
pm_constant_id_t name
ClassVariableReadNode::name.
Definition ast.h:2894
ClassVariableTargetNode.
Definition ast.h:2909
pm_constant_id_t name
ClassVariableTargetNode::name.
Definition ast.h:2917
ClassVariableWriteNode.
Definition ast.h:2932
pm_location_t name_loc
ClassVariableWriteNode::name_loc.
Definition ast.h:2956
struct pm_node * value
ClassVariableWriteNode::value.
Definition ast.h:2969
pm_location_t operator_loc
ClassVariableWriteNode::operator_loc.
Definition ast.h:2979
pm_constant_id_t name
ClassVariableWriteNode::name.
Definition ast.h:2946
ConstantAndWriteNode.
Definition ast.h:2994
pm_location_t operator_loc
ConstantAndWriteNode::operator_loc.
Definition ast.h:3012
pm_location_t name_loc
ConstantAndWriteNode::name_loc.
Definition ast.h:3007
pm_constant_id_t name
ConstantAndWriteNode::name.
Definition ast.h:3002
struct pm_node * value
ConstantAndWriteNode::value.
Definition ast.h:3017
size_t size
The number of constant ids in the list.
pm_constant_id_t * ids
The constant ids in the list.
ConstantOperatorWriteNode.
Definition ast.h:3032
pm_constant_id_t name
ConstantOperatorWriteNode::name.
Definition ast.h:3040
pm_location_t name_loc
ConstantOperatorWriteNode::name_loc.
Definition ast.h:3045
pm_constant_id_t binary_operator
ConstantOperatorWriteNode::binary_operator.
Definition ast.h:3060
pm_location_t binary_operator_loc
ConstantOperatorWriteNode::binary_operator_loc.
Definition ast.h:3050
struct pm_node * value
ConstantOperatorWriteNode::value.
Definition ast.h:3055
ConstantOrWriteNode.
Definition ast.h:3075
pm_location_t operator_loc
ConstantOrWriteNode::operator_loc.
Definition ast.h:3093
pm_location_t name_loc
ConstantOrWriteNode::name_loc.
Definition ast.h:3088
pm_constant_id_t name
ConstantOrWriteNode::name.
Definition ast.h:3083
struct pm_node * value
ConstantOrWriteNode::value.
Definition ast.h:3098
ConstantPathAndWriteNode.
Definition ast.h:3113
struct pm_constant_path_node * target
ConstantPathAndWriteNode::target.
Definition ast.h:3121
pm_location_t operator_loc
ConstantPathAndWriteNode::operator_loc.
Definition ast.h:3126
struct pm_node * value
ConstantPathAndWriteNode::value.
Definition ast.h:3131
ConstantPathNode.
Definition ast.h:3146
pm_location_t delimiter_loc
ConstantPathNode::delimiter_loc.
Definition ast.h:3185
pm_location_t name_loc
ConstantPathNode::name_loc.
Definition ast.h:3198
pm_constant_id_t name
ConstantPathNode::name.
Definition ast.h:3172
struct pm_node * parent
ConstantPathNode::parent.
Definition ast.h:3165
ConstantPathOperatorWriteNode.
Definition ast.h:3213
struct pm_constant_path_node * target
ConstantPathOperatorWriteNode::target.
Definition ast.h:3221
struct pm_node * value
ConstantPathOperatorWriteNode::value.
Definition ast.h:3231
pm_constant_id_t binary_operator
ConstantPathOperatorWriteNode::binary_operator.
Definition ast.h:3236
pm_location_t binary_operator_loc
ConstantPathOperatorWriteNode::binary_operator_loc.
Definition ast.h:3226
ConstantPathOrWriteNode.
Definition ast.h:3251
pm_location_t operator_loc
ConstantPathOrWriteNode::operator_loc.
Definition ast.h:3264
struct pm_node * value
ConstantPathOrWriteNode::value.
Definition ast.h:3269
struct pm_constant_path_node * target
ConstantPathOrWriteNode::target.
Definition ast.h:3259
ConstantPathTargetNode.
Definition ast.h:3284
struct pm_node * parent
ConstantPathTargetNode::parent.
Definition ast.h:3292
pm_location_t delimiter_loc
ConstantPathTargetNode::delimiter_loc.
Definition ast.h:3302
pm_constant_id_t name
ConstantPathTargetNode::name.
Definition ast.h:3297
pm_location_t name_loc
ConstantPathTargetNode::name_loc.
Definition ast.h:3307
ConstantPathWriteNode.
Definition ast.h:3328
struct pm_constant_path_node * target
ConstantPathWriteNode::target.
Definition ast.h:3344
pm_location_t operator_loc
ConstantPathWriteNode::operator_loc.
Definition ast.h:3354
struct pm_node * value
ConstantPathWriteNode::value.
Definition ast.h:3364
uint32_t size
The number of buckets in the hash map.
pm_constant_t * constants
The constants that are stored in the buckets.
ConstantReadNode.
Definition ast.h:3379
pm_constant_id_t name
ConstantReadNode::name.
Definition ast.h:3393
A constant in the pool which effectively stores a string.
size_t length
The length of the string.
const uint8_t * start
A pointer to the start of the string.
ConstantTargetNode.
Definition ast.h:3408
pm_constant_id_t name
ConstantTargetNode::name.
Definition ast.h:3416
ConstantWriteNode.
Definition ast.h:3431
struct pm_node * value
ConstantWriteNode::value.
Definition ast.h:3468
pm_constant_id_t name
ConstantWriteNode::name.
Definition ast.h:3445
pm_location_t name_loc
ConstantWriteNode::name_loc.
Definition ast.h:3455
pm_location_t operator_loc
ConstantWriteNode::operator_loc.
Definition ast.h:3478
DefNode.
Definition ast.h:3494
struct pm_parameters_node * parameters
DefNode::parameters.
Definition ast.h:3517
pm_location_t end_keyword_loc
DefNode::end_keyword_loc.
Definition ast.h:3557
pm_constant_id_t name
DefNode::name.
Definition ast.h:3502
pm_location_t name_loc
DefNode::name_loc.
Definition ast.h:3507
pm_location_t rparen_loc
DefNode::rparen_loc.
Definition ast.h:3547
struct pm_node * body
DefNode::body.
Definition ast.h:3522
pm_location_t equal_loc
DefNode::equal_loc.
Definition ast.h:3552
pm_location_t def_keyword_loc
DefNode::def_keyword_loc.
Definition ast.h:3532
struct pm_node * receiver
DefNode::receiver.
Definition ast.h:3512
pm_location_t lparen_loc
DefNode::lparen_loc.
Definition ast.h:3542
pm_location_t operator_loc
DefNode::operator_loc.
Definition ast.h:3537
pm_constant_id_list_t locals
DefNode::locals.
Definition ast.h:3527
DefinedNode.
Definition ast.h:3572
pm_location_t lparen_loc
DefinedNode::lparen_loc.
Definition ast.h:3580
pm_location_t rparen_loc
DefinedNode::rparen_loc.
Definition ast.h:3590
pm_location_t keyword_loc
DefinedNode::keyword_loc.
Definition ast.h:3595
struct pm_node * value
DefinedNode::value.
Definition ast.h:3585
ElseNode.
Definition ast.h:3610
struct pm_statements_node * statements
ElseNode::statements.
Definition ast.h:3623
pm_location_t else_keyword_loc
ElseNode::else_keyword_loc.
Definition ast.h:3618
pm_location_t end_keyword_loc
ElseNode::end_keyword_loc.
Definition ast.h:3628
EmbeddedStatementsNode.
Definition ast.h:3643
pm_location_t closing_loc
EmbeddedStatementsNode::closing_loc.
Definition ast.h:3661
struct pm_statements_node * statements
EmbeddedStatementsNode::statements.
Definition ast.h:3656
pm_location_t opening_loc
EmbeddedStatementsNode::opening_loc.
Definition ast.h:3651
EmbeddedVariableNode.
Definition ast.h:3676
struct pm_node * variable
EmbeddedVariableNode::variable.
Definition ast.h:3689
pm_location_t operator_loc
EmbeddedVariableNode::operator_loc.
Definition ast.h:3684
EnsureNode.
Definition ast.h:3708
struct pm_statements_node * statements
EnsureNode::statements.
Definition ast.h:3721
pm_location_t ensure_keyword_loc
EnsureNode::ensure_keyword_loc.
Definition ast.h:3716
pm_location_t end_keyword_loc
EnsureNode::end_keyword_loc.
Definition ast.h:3726
FindPatternNode.
Definition ast.h:3765
struct pm_node * constant
FindPatternNode::constant.
Definition ast.h:3773
struct pm_node * right
FindPatternNode::right.
Definition ast.h:3788
pm_location_t opening_loc
FindPatternNode::opening_loc.
Definition ast.h:3793
struct pm_node_list requireds
FindPatternNode::requireds.
Definition ast.h:3783
struct pm_splat_node * left
FindPatternNode::left.
Definition ast.h:3778
pm_location_t closing_loc
FindPatternNode::closing_loc.
Definition ast.h:3798
FlipFlopNode.
Definition ast.h:3816
pm_location_t operator_loc
FlipFlopNode::operator_loc.
Definition ast.h:3834
struct pm_node * left
FlipFlopNode::left.
Definition ast.h:3824
struct pm_node * right
FlipFlopNode::right.
Definition ast.h:3829
FloatNode.
Definition ast.h:3849
double value
FloatNode::value.
Definition ast.h:3859
ForNode.
Definition ast.h:3874
struct pm_statements_node * statements
ForNode::statements.
Definition ast.h:3909
struct pm_node * index
ForNode::index.
Definition ast.h:3887
struct pm_node * collection
ForNode::collection.
Definition ast.h:3897
pm_location_t end_keyword_loc
ForNode::end_keyword_loc.
Definition ast.h:3949
pm_location_t for_keyword_loc
ForNode::for_keyword_loc.
Definition ast.h:3919
pm_location_t do_keyword_loc
ForNode::do_keyword_loc.
Definition ast.h:3939
pm_location_t in_keyword_loc
ForNode::in_keyword_loc.
Definition ast.h:3929
ForwardingSuperNode.
Definition ast.h:4003
struct pm_block_node * block
ForwardingSuperNode::block.
Definition ast.h:4011
GlobalVariableAndWriteNode.
Definition ast.h:4026
pm_location_t operator_loc
GlobalVariableAndWriteNode::operator_loc.
Definition ast.h:4044
pm_location_t name_loc
GlobalVariableAndWriteNode::name_loc.
Definition ast.h:4039
struct pm_node * value
GlobalVariableAndWriteNode::value.
Definition ast.h:4049
pm_constant_id_t name
GlobalVariableAndWriteNode::name.
Definition ast.h:4034
GlobalVariableOperatorWriteNode.
Definition ast.h:4064
pm_constant_id_t name
GlobalVariableOperatorWriteNode::name.
Definition ast.h:4072
pm_constant_id_t binary_operator
GlobalVariableOperatorWriteNode::binary_operator.
Definition ast.h:4092
struct pm_node * value
GlobalVariableOperatorWriteNode::value.
Definition ast.h:4087
pm_location_t name_loc
GlobalVariableOperatorWriteNode::name_loc.
Definition ast.h:4077
pm_location_t binary_operator_loc
GlobalVariableOperatorWriteNode::binary_operator_loc.
Definition ast.h:4082
GlobalVariableOrWriteNode.
Definition ast.h:4107
pm_constant_id_t name
GlobalVariableOrWriteNode::name.
Definition ast.h:4115
pm_location_t name_loc
GlobalVariableOrWriteNode::name_loc.
Definition ast.h:4120
pm_location_t operator_loc
GlobalVariableOrWriteNode::operator_loc.
Definition ast.h:4125
struct pm_node * value
GlobalVariableOrWriteNode::value.
Definition ast.h:4130
GlobalVariableReadNode.
Definition ast.h:4145
pm_constant_id_t name
GlobalVariableReadNode::name.
Definition ast.h:4159
GlobalVariableTargetNode.
Definition ast.h:4174
pm_constant_id_t name
GlobalVariableTargetNode::name.
Definition ast.h:4182
GlobalVariableWriteNode.
Definition ast.h:4197
struct pm_node * value
GlobalVariableWriteNode::value.
Definition ast.h:4234
pm_location_t name_loc
GlobalVariableWriteNode::name_loc.
Definition ast.h:4221
pm_location_t operator_loc
GlobalVariableWriteNode::operator_loc.
Definition ast.h:4244
pm_constant_id_t name
GlobalVariableWriteNode::name.
Definition ast.h:4211
HashNode.
Definition ast.h:4259
struct pm_node_list elements
HashNode::elements.
Definition ast.h:4285
pm_location_t closing_loc
HashNode::closing_loc.
Definition ast.h:4295
pm_location_t opening_loc
HashNode::opening_loc.
Definition ast.h:4272
HashPatternNode.
Definition ast.h:4313
struct pm_node_list elements
HashPatternNode::elements.
Definition ast.h:4326
pm_location_t opening_loc
HashPatternNode::opening_loc.
Definition ast.h:4336
struct pm_node * rest
HashPatternNode::rest.
Definition ast.h:4331
pm_location_t closing_loc
HashPatternNode::closing_loc.
Definition ast.h:4341
struct pm_node * constant
HashPatternNode::constant.
Definition ast.h:4321
IfNode.
Definition ast.h:4362
struct pm_node * predicate
IfNode::predicate.
Definition ast.h:4395
pm_location_t end_keyword_loc
IfNode::end_keyword_loc.
Definition ast.h:4453
pm_location_t if_keyword_loc
IfNode::if_keyword_loc.
Definition ast.h:4377
struct pm_statements_node * statements
IfNode::statements.
Definition ast.h:4422
struct pm_node * subsequent
IfNode::subsequent.
Definition ast.h:4441
pm_location_t then_keyword_loc
IfNode::then_keyword_loc.
Definition ast.h:4408
ImaginaryNode.
Definition ast.h:4468
struct pm_node * numeric
ImaginaryNode::numeric.
Definition ast.h:4476
ImplicitNode.
Definition ast.h:4497
struct pm_node * value
ImplicitNode::value.
Definition ast.h:4505
InNode.
Definition ast.h:4547
struct pm_statements_node * statements
InNode::statements.
Definition ast.h:4560
struct pm_node * pattern
InNode::pattern.
Definition ast.h:4555
pm_location_t then_loc
InNode::then_loc.
Definition ast.h:4570
pm_location_t in_loc
InNode::in_loc.
Definition ast.h:4565
IndexAndWriteNode.
Definition ast.h:4591
struct pm_arguments_node * arguments
IndexAndWriteNode::arguments.
Definition ast.h:4614
struct pm_node * receiver
IndexAndWriteNode::receiver.
Definition ast.h:4599
struct pm_block_argument_node * block
IndexAndWriteNode::block.
Definition ast.h:4624
struct pm_node * value
IndexAndWriteNode::value.
Definition ast.h:4634
pm_location_t operator_loc
IndexAndWriteNode::operator_loc.
Definition ast.h:4629
pm_location_t closing_loc
IndexAndWriteNode::closing_loc.
Definition ast.h:4619
pm_location_t opening_loc
IndexAndWriteNode::opening_loc.
Definition ast.h:4609
pm_location_t call_operator_loc
IndexAndWriteNode::call_operator_loc.
Definition ast.h:4604
IndexOperatorWriteNode.
Definition ast.h:4655
struct pm_block_argument_node * block
IndexOperatorWriteNode::block.
Definition ast.h:4688
pm_location_t binary_operator_loc
IndexOperatorWriteNode::binary_operator_loc.
Definition ast.h:4698
struct pm_node * value
IndexOperatorWriteNode::value.
Definition ast.h:4703
pm_location_t opening_loc
IndexOperatorWriteNode::opening_loc.
Definition ast.h:4673
pm_location_t call_operator_loc
IndexOperatorWriteNode::call_operator_loc.
Definition ast.h:4668
pm_location_t closing_loc
IndexOperatorWriteNode::closing_loc.
Definition ast.h:4683
struct pm_arguments_node * arguments
IndexOperatorWriteNode::arguments.
Definition ast.h:4678
pm_constant_id_t binary_operator
IndexOperatorWriteNode::binary_operator.
Definition ast.h:4693
struct pm_node * receiver
IndexOperatorWriteNode::receiver.
Definition ast.h:4663
IndexOrWriteNode.
Definition ast.h:4724
pm_location_t closing_loc
IndexOrWriteNode::closing_loc.
Definition ast.h:4752
pm_location_t call_operator_loc
IndexOrWriteNode::call_operator_loc.
Definition ast.h:4737
struct pm_block_argument_node * block
IndexOrWriteNode::block.
Definition ast.h:4757
pm_location_t operator_loc
IndexOrWriteNode::operator_loc.
Definition ast.h:4762
struct pm_node * receiver
IndexOrWriteNode::receiver.
Definition ast.h:4732
pm_location_t opening_loc
IndexOrWriteNode::opening_loc.
Definition ast.h:4742
struct pm_node * value
IndexOrWriteNode::value.
Definition ast.h:4767
struct pm_arguments_node * arguments
IndexOrWriteNode::arguments.
Definition ast.h:4747
IndexTargetNode.
Definition ast.h:4796
struct pm_node * receiver
IndexTargetNode::receiver.
Definition ast.h:4804
pm_location_t closing_loc
IndexTargetNode::closing_loc.
Definition ast.h:4819
struct pm_arguments_node * arguments
IndexTargetNode::arguments.
Definition ast.h:4814
pm_location_t opening_loc
IndexTargetNode::opening_loc.
Definition ast.h:4809
struct pm_block_argument_node * block
IndexTargetNode::block.
Definition ast.h:4824
InstanceVariableAndWriteNode.
Definition ast.h:4839
pm_location_t operator_loc
InstanceVariableAndWriteNode::operator_loc.
Definition ast.h:4857
pm_location_t name_loc
InstanceVariableAndWriteNode::name_loc.
Definition ast.h:4852
struct pm_node * value
InstanceVariableAndWriteNode::value.
Definition ast.h:4862
pm_constant_id_t name
InstanceVariableAndWriteNode::name.
Definition ast.h:4847
InstanceVariableOperatorWriteNode.
Definition ast.h:4877
struct pm_node * value
InstanceVariableOperatorWriteNode::value.
Definition ast.h:4900
pm_constant_id_t binary_operator
InstanceVariableOperatorWriteNode::binary_operator.
Definition ast.h:4905
pm_location_t binary_operator_loc
InstanceVariableOperatorWriteNode::binary_operator_loc.
Definition ast.h:4895
pm_constant_id_t name
InstanceVariableOperatorWriteNode::name.
Definition ast.h:4885
pm_location_t name_loc
InstanceVariableOperatorWriteNode::name_loc.
Definition ast.h:4890
InstanceVariableOrWriteNode.
Definition ast.h:4920
pm_location_t operator_loc
InstanceVariableOrWriteNode::operator_loc.
Definition ast.h:4938
struct pm_node * value
InstanceVariableOrWriteNode::value.
Definition ast.h:4943
pm_location_t name_loc
InstanceVariableOrWriteNode::name_loc.
Definition ast.h:4933
pm_constant_id_t name
InstanceVariableOrWriteNode::name.
Definition ast.h:4928
InstanceVariableReadNode.
Definition ast.h:4958
pm_constant_id_t name
InstanceVariableReadNode::name.
Definition ast.h:4972
InstanceVariableTargetNode.
Definition ast.h:4987
pm_constant_id_t name
InstanceVariableTargetNode::name.
Definition ast.h:4995
InstanceVariableWriteNode.
Definition ast.h:5010
pm_location_t operator_loc
InstanceVariableWriteNode::operator_loc.
Definition ast.h:5057
pm_constant_id_t name
InstanceVariableWriteNode::name.
Definition ast.h:5024
struct pm_node * value
InstanceVariableWriteNode::value.
Definition ast.h:5047
pm_location_t name_loc
InstanceVariableWriteNode::name_loc.
Definition ast.h:5034
IntegerNode.
Definition ast.h:5078
pm_integer_t value
IntegerNode::value.
Definition ast.h:5088
A structure represents an arbitrary-sized integer.
Definition pm_integer.h:20
size_t length
The number of allocated values.
Definition pm_integer.h:25
uint32_t value
Embedded value for small integer.
Definition pm_integer.h:36
uint32_t * values
List of 32-bit integers.
Definition pm_integer.h:30
bool negative
Whether or not the integer is negative.
Definition pm_integer.h:42
InterpolatedMatchLastLineNode.
Definition ast.h:5116
pm_location_t closing_loc
InterpolatedMatchLastLineNode::closing_loc.
Definition ast.h:5134
struct pm_node_list parts
InterpolatedMatchLastLineNode::parts.
Definition ast.h:5129
pm_location_t opening_loc
InterpolatedMatchLastLineNode::opening_loc.
Definition ast.h:5124
InterpolatedRegularExpressionNode.
Definition ast.h:5162
pm_location_t opening_loc
InterpolatedRegularExpressionNode::opening_loc.
Definition ast.h:5170
struct pm_node_list parts
InterpolatedRegularExpressionNode::parts.
Definition ast.h:5175
pm_location_t closing_loc
InterpolatedRegularExpressionNode::closing_loc.
Definition ast.h:5180
InterpolatedStringNode.
Definition ast.h:5199
pm_location_t closing_loc
InterpolatedStringNode::closing_loc.
Definition ast.h:5217
pm_location_t opening_loc
InterpolatedStringNode::opening_loc.
Definition ast.h:5207
struct pm_node_list parts
InterpolatedStringNode::parts.
Definition ast.h:5212
InterpolatedSymbolNode.
Definition ast.h:5232
struct pm_node_list parts
InterpolatedSymbolNode::parts.
Definition ast.h:5245
pm_location_t closing_loc
InterpolatedSymbolNode::closing_loc.
Definition ast.h:5250
pm_location_t opening_loc
InterpolatedSymbolNode::opening_loc.
Definition ast.h:5240
InterpolatedXStringNode.
Definition ast.h:5265
pm_location_t opening_loc
InterpolatedXStringNode::opening_loc.
Definition ast.h:5273
pm_location_t closing_loc
InterpolatedXStringNode::closing_loc.
Definition ast.h:5283
struct pm_node_list parts
InterpolatedXStringNode::parts.
Definition ast.h:5278
KeywordHashNode.
Definition ast.h:5337
struct pm_node_list elements
KeywordHashNode::elements.
Definition ast.h:5345
KeywordRestParameterNode.
Definition ast.h:5364
pm_constant_id_t name
KeywordRestParameterNode::name.
Definition ast.h:5372
pm_location_t operator_loc
KeywordRestParameterNode::operator_loc.
Definition ast.h:5382
pm_location_t name_loc
KeywordRestParameterNode::name_loc.
Definition ast.h:5377
LambdaNode.
Definition ast.h:5397
pm_location_t closing_loc
LambdaNode::closing_loc.
Definition ast.h:5420
struct pm_node * body
LambdaNode::body.
Definition ast.h:5430
pm_location_t opening_loc
LambdaNode::opening_loc.
Definition ast.h:5415
struct pm_node * parameters
LambdaNode::parameters.
Definition ast.h:5425
pm_location_t operator_loc
LambdaNode::operator_loc.
Definition ast.h:5410
pm_constant_id_list_t locals
LambdaNode::locals.
Definition ast.h:5405
LocalVariableAndWriteNode.
Definition ast.h:5445
pm_constant_id_t name
LocalVariableAndWriteNode::name.
Definition ast.h:5468
uint32_t depth
LocalVariableAndWriteNode::depth.
Definition ast.h:5473
pm_location_t operator_loc
LocalVariableAndWriteNode::operator_loc.
Definition ast.h:5458
struct pm_node * value
LocalVariableAndWriteNode::value.
Definition ast.h:5463
pm_location_t name_loc
LocalVariableAndWriteNode::name_loc.
Definition ast.h:5453
LocalVariableOperatorWriteNode.
Definition ast.h:5488
uint32_t depth
LocalVariableOperatorWriteNode::depth.
Definition ast.h:5521
pm_constant_id_t binary_operator
LocalVariableOperatorWriteNode::binary_operator.
Definition ast.h:5516
struct pm_node * value
LocalVariableOperatorWriteNode::value.
Definition ast.h:5506
pm_location_t name_loc
LocalVariableOperatorWriteNode::name_loc.
Definition ast.h:5496
pm_location_t binary_operator_loc
LocalVariableOperatorWriteNode::binary_operator_loc.
Definition ast.h:5501
pm_constant_id_t name
LocalVariableOperatorWriteNode::name.
Definition ast.h:5511
LocalVariableOrWriteNode.
Definition ast.h:5536
uint32_t depth
LocalVariableOrWriteNode::depth.
Definition ast.h:5564
pm_location_t operator_loc
LocalVariableOrWriteNode::operator_loc.
Definition ast.h:5549
struct pm_node * value
LocalVariableOrWriteNode::value.
Definition ast.h:5554
pm_constant_id_t name
LocalVariableOrWriteNode::name.
Definition ast.h:5559
pm_location_t name_loc
LocalVariableOrWriteNode::name_loc.
Definition ast.h:5544
LocalVariableReadNode.
Definition ast.h:5579
uint32_t depth
LocalVariableReadNode::depth.
Definition ast.h:5610
pm_constant_id_t name
LocalVariableReadNode::name.
Definition ast.h:5597
LocalVariableTargetNode.
Definition ast.h:5625
uint32_t depth
LocalVariableTargetNode::depth.
Definition ast.h:5638
pm_constant_id_t name
LocalVariableTargetNode::name.
Definition ast.h:5633
LocalVariableWriteNode.
Definition ast.h:5653
pm_location_t operator_loc
LocalVariableWriteNode::operator_loc.
Definition ast.h:5717
pm_location_t name_loc
LocalVariableWriteNode::name_loc.
Definition ast.h:5690
struct pm_node * value
LocalVariableWriteNode::value.
Definition ast.h:5707
uint32_t depth
LocalVariableWriteNode::depth.
Definition ast.h:5680
pm_constant_id_t name
LocalVariableWriteNode::name.
Definition ast.h:5667
const uint8_t * start
A pointer to the start location of the range in the source.
Definition ast.h:547
const uint8_t * end
A pointer to the end location of the range in the source.
Definition ast.h:550
MatchLastLineNode.
Definition ast.h:5745
pm_location_t content_loc
MatchLastLineNode::content_loc.
Definition ast.h:5758
pm_location_t opening_loc
MatchLastLineNode::opening_loc.
Definition ast.h:5753
pm_location_t closing_loc
MatchLastLineNode::closing_loc.
Definition ast.h:5763
pm_string_t unescaped
MatchLastLineNode::unescaped.
Definition ast.h:5768
MatchPredicateNode.
Definition ast.h:5783
pm_location_t operator_loc
MatchPredicateNode::operator_loc.
Definition ast.h:5801
struct pm_node * pattern
MatchPredicateNode::pattern.
Definition ast.h:5796
struct pm_node * value
MatchPredicateNode::value.
Definition ast.h:5791
MatchRequiredNode.
Definition ast.h:5816
pm_location_t operator_loc
MatchRequiredNode::operator_loc.
Definition ast.h:5834
struct pm_node * value
MatchRequiredNode::value.
Definition ast.h:5824
struct pm_node * pattern
MatchRequiredNode::pattern.
Definition ast.h:5829
MatchWriteNode.
Definition ast.h:5849
struct pm_node_list targets
MatchWriteNode::targets.
Definition ast.h:5862
struct pm_call_node * call
MatchWriteNode::call.
Definition ast.h:5857
ModuleNode.
Definition ast.h:5892
pm_location_t end_keyword_loc
ModuleNode::end_keyword_loc.
Definition ast.h:5920
struct pm_node * constant_path
ModuleNode::constant_path.
Definition ast.h:5910
struct pm_node * body
ModuleNode::body.
Definition ast.h:5915
pm_constant_id_list_t locals
ModuleNode::locals.
Definition ast.h:5900
pm_location_t module_keyword_loc
ModuleNode::module_keyword_loc.
Definition ast.h:5905
pm_constant_id_t name
ModuleNode::name.
Definition ast.h:5925
MultiTargetNode.
Definition ast.h:5945
pm_location_t lparen_loc
MultiTargetNode::lparen_loc.
Definition ast.h:6003
struct pm_node_list lefts
MultiTargetNode::lefts.
Definition ast.h:5963
struct pm_node * rest
MultiTargetNode::rest.
Definition ast.h:5983
pm_location_t rparen_loc
MultiTargetNode::rparen_loc.
Definition ast.h:6013
struct pm_node_list rights
MultiTargetNode::rights.
Definition ast.h:5993
MultiWriteNode.
Definition ast.h:6028
pm_location_t rparen_loc
MultiWriteNode::rparen_loc.
Definition ast.h:6096
struct pm_node * value
MultiWriteNode::value.
Definition ast.h:6116
struct pm_node * rest
MultiWriteNode::rest.
Definition ast.h:6066
struct pm_node_list rights
MultiWriteNode::rights.
Definition ast.h:6076
pm_location_t operator_loc
MultiWriteNode::operator_loc.
Definition ast.h:6106
pm_location_t lparen_loc
MultiWriteNode::lparen_loc.
Definition ast.h:6086
struct pm_node_list lefts
MultiWriteNode::lefts.
Definition ast.h:6046
size_t * offsets
The list of offsets.
size_t size
The number of offsets in the list.
NextNode.
Definition ast.h:6131
struct pm_arguments_node * arguments
NextNode::arguments.
Definition ast.h:6139
pm_location_t keyword_loc
NextNode::keyword_loc.
Definition ast.h:6144
NoKeywordsParameterNode.
Definition ast.h:6178
pm_location_t keyword_loc
NoKeywordsParameterNode::keyword_loc.
Definition ast.h:6191
pm_location_t operator_loc
NoKeywordsParameterNode::operator_loc.
Definition ast.h:6186
size_t size
The number of nodes in the list.
Definition ast.h:560
struct pm_node ** nodes
The nodes in the list.
Definition ast.h:566
This is the base structure that represents a node in the syntax tree.
Definition ast.h:1069
uint32_t node_id
The unique identifier for this node, which is deterministic based on the source.
Definition ast.h:1086
pm_node_flags_t flags
This represents any flags on the node.
Definition ast.h:1080
pm_location_t location
This is the location of the node in the source.
Definition ast.h:1092
NumberedParametersNode.
Definition ast.h:6206
uint8_t maximum
NumberedParametersNode::maximum.
Definition ast.h:6214
NumberedReferenceReadNode.
Definition ast.h:6229
uint32_t number
NumberedReferenceReadNode::number.
Definition ast.h:6245
OptionalKeywordParameterNode.
Definition ast.h:6264
pm_constant_id_t name
OptionalKeywordParameterNode::name.
Definition ast.h:6272
struct pm_node * value
OptionalKeywordParameterNode::value.
Definition ast.h:6282
pm_location_t name_loc
OptionalKeywordParameterNode::name_loc.
Definition ast.h:6277
OptionalParameterNode.
Definition ast.h:6301
pm_location_t name_loc
OptionalParameterNode::name_loc.
Definition ast.h:6314
struct pm_node * value
OptionalParameterNode::value.
Definition ast.h:6324
pm_constant_id_t name
OptionalParameterNode::name.
Definition ast.h:6309
pm_location_t operator_loc
OptionalParameterNode::operator_loc.
Definition ast.h:6319
OrNode.
Definition ast.h:6339
struct pm_node * left
OrNode::left.
Definition ast.h:6355
struct pm_node * right
OrNode::right.
Definition ast.h:6368
pm_location_t operator_loc
OrNode::operator_loc.
Definition ast.h:6378
ParametersNode.
Definition ast.h:6394
struct pm_node * rest
ParametersNode::rest.
Definition ast.h:6412
struct pm_node_list requireds
ParametersNode::requireds.
Definition ast.h:6402
struct pm_block_parameter_node * block
ParametersNode::block.
Definition ast.h:6432
struct pm_node_list optionals
ParametersNode::optionals.
Definition ast.h:6407
struct pm_node_list posts
ParametersNode::posts.
Definition ast.h:6417
struct pm_node * keyword_rest
ParametersNode::keyword_rest.
Definition ast.h:6427
struct pm_node_list keywords
ParametersNode::keywords.
Definition ast.h:6422
ParenthesesNode.
Definition ast.h:6447
struct pm_node * body
ParenthesesNode::body.
Definition ast.h:6455
pm_location_t closing_loc
ParenthesesNode::closing_loc.
Definition ast.h:6465
pm_location_t opening_loc
ParenthesesNode::opening_loc.
Definition ast.h:6460
This struct represents the overall parser.
Definition parser.h:640
const uint8_t * end
The pointer to the end of the source.
Definition parser.h:694
pm_constant_pool_t constant_pool
This constant pool keeps all of the constants defined throughout the file so that we can reference th...
Definition parser.h:786
const uint8_t * start
The pointer to the start of the source.
Definition parser.h:691
int32_t start_line
The line number at the start of the parse.
Definition parser.h:809
pm_newline_list_t newline_list
This is the list of newline offsets in the source file.
Definition parser.h:789
PinnedExpressionNode.
Definition ast.h:6480
pm_location_t rparen_loc
PinnedExpressionNode::rparen_loc.
Definition ast.h:6503
struct pm_node * expression
PinnedExpressionNode::expression.
Definition ast.h:6488
pm_location_t lparen_loc
PinnedExpressionNode::lparen_loc.
Definition ast.h:6498
pm_location_t operator_loc
PinnedExpressionNode::operator_loc.
Definition ast.h:6493
PinnedVariableNode.
Definition ast.h:6518
struct pm_node * variable
PinnedVariableNode::variable.
Definition ast.h:6526
pm_location_t operator_loc
PinnedVariableNode::operator_loc.
Definition ast.h:6531
PostExecutionNode.
Definition ast.h:6546
pm_location_t closing_loc
PostExecutionNode::closing_loc.
Definition ast.h:6569
struct pm_statements_node * statements
PostExecutionNode::statements.
Definition ast.h:6554
pm_location_t opening_loc
PostExecutionNode::opening_loc.
Definition ast.h:6564
pm_location_t keyword_loc
PostExecutionNode::keyword_loc.
Definition ast.h:6559
PreExecutionNode.
Definition ast.h:6584
struct pm_statements_node * statements
PreExecutionNode::statements.
Definition ast.h:6592
pm_location_t closing_loc
PreExecutionNode::closing_loc.
Definition ast.h:6607
pm_location_t opening_loc
PreExecutionNode::opening_loc.
Definition ast.h:6602
pm_location_t keyword_loc
PreExecutionNode::keyword_loc.
Definition ast.h:6597
ProgramNode.
Definition ast.h:6619
struct pm_statements_node * statements
ProgramNode::statements.
Definition ast.h:6632
pm_constant_id_list_t locals
ProgramNode::locals.
Definition ast.h:6627
RangeNode.
Definition ast.h:6653
struct pm_node * right
RangeNode::right.
Definition ast.h:6683
pm_location_t operator_loc
RangeNode::operator_loc.
Definition ast.h:6690
struct pm_node * left
RangeNode::left.
Definition ast.h:6669
RationalNode.
Definition ast.h:6711
pm_integer_t denominator
RationalNode::denominator.
Definition ast.h:6732
pm_integer_t numerator
RationalNode::numerator.
Definition ast.h:6723
RegularExpressionNode.
Definition ast.h:6778
pm_location_t closing_loc
RegularExpressionNode::closing_loc.
Definition ast.h:6796
pm_string_t unescaped
RegularExpressionNode::unescaped.
Definition ast.h:6801
pm_location_t opening_loc
RegularExpressionNode::opening_loc.
Definition ast.h:6786
pm_location_t content_loc
RegularExpressionNode::content_loc.
Definition ast.h:6791
RequiredKeywordParameterNode.
Definition ast.h:6820
pm_location_t name_loc
RequiredKeywordParameterNode::name_loc.
Definition ast.h:6833
pm_constant_id_t name
RequiredKeywordParameterNode::name.
Definition ast.h:6828
RequiredParameterNode.
Definition ast.h:6852
pm_constant_id_t name
RequiredParameterNode::name.
Definition ast.h:6860
RescueModifierNode.
Definition ast.h:6875
struct pm_node * rescue_expression
RescueModifierNode::rescue_expression.
Definition ast.h:6893
pm_location_t keyword_loc
RescueModifierNode::keyword_loc.
Definition ast.h:6888
struct pm_node * expression
RescueModifierNode::expression.
Definition ast.h:6883
RescueNode.
Definition ast.h:6913
pm_location_t keyword_loc
RescueNode::keyword_loc.
Definition ast.h:6921
struct pm_rescue_node * subsequent
RescueNode::subsequent.
Definition ast.h:6946
pm_location_t operator_loc
RescueNode::operator_loc.
Definition ast.h:6931
struct pm_node * reference
RescueNode::reference.
Definition ast.h:6936
struct pm_node_list exceptions
RescueNode::exceptions.
Definition ast.h:6926
struct pm_statements_node * statements
RescueNode::statements.
Definition ast.h:6941
RestParameterNode.
Definition ast.h:6965
pm_constant_id_t name
RestParameterNode::name.
Definition ast.h:6973
pm_location_t name_loc
RestParameterNode::name_loc.
Definition ast.h:6978
pm_location_t operator_loc
RestParameterNode::operator_loc.
Definition ast.h:6983
ReturnNode.
Definition ast.h:7016
pm_location_t keyword_loc
ReturnNode::keyword_loc.
Definition ast.h:7024
struct pm_arguments_node * arguments
ReturnNode::arguments.
Definition ast.h:7029
ShareableConstantNode.
Definition ast.h:7068
struct pm_node * write
ShareableConstantNode::write.
Definition ast.h:7078
SingletonClassNode.
Definition ast.h:7093
pm_constant_id_list_t locals
SingletonClassNode::locals.
Definition ast.h:7101
pm_location_t operator_loc
SingletonClassNode::operator_loc.
Definition ast.h:7111
struct pm_node * expression
SingletonClassNode::expression.
Definition ast.h:7116
pm_location_t end_keyword_loc
SingletonClassNode::end_keyword_loc.
Definition ast.h:7126
pm_location_t class_keyword_loc
SingletonClassNode::class_keyword_loc.
Definition ast.h:7106
struct pm_node * body
SingletonClassNode::body.
Definition ast.h:7121
SourceFileNode.
Definition ast.h:7165
pm_string_t filepath
SourceFileNode::filepath.
Definition ast.h:7175
SplatNode.
Definition ast.h:7208
struct pm_node * expression
SplatNode::expression.
Definition ast.h:7221
pm_location_t operator_loc
SplatNode::operator_loc.
Definition ast.h:7216
StatementsNode.
Definition ast.h:7236
struct pm_node_list body
StatementsNode::body.
Definition ast.h:7244
StringNode.
Definition ast.h:7271
pm_string_t unescaped
StringNode::unescaped.
Definition ast.h:7294
pm_location_t content_loc
StringNode::content_loc.
Definition ast.h:7284
pm_location_t closing_loc
StringNode::closing_loc.
Definition ast.h:7289
pm_location_t opening_loc
StringNode::opening_loc.
Definition ast.h:7279
A generic string type that can have various ownership semantics.
Definition pm_string.h:33
SuperNode.
Definition ast.h:7312
struct pm_arguments_node * arguments
SuperNode::arguments.
Definition ast.h:7330
pm_location_t lparen_loc
SuperNode::lparen_loc.
Definition ast.h:7325
pm_location_t keyword_loc
SuperNode::keyword_loc.
Definition ast.h:7320
pm_location_t rparen_loc
SuperNode::rparen_loc.
Definition ast.h:7335
struct pm_node * block
SuperNode::block.
Definition ast.h:7340
SymbolNode.
Definition ast.h:7363
pm_location_t opening_loc
SymbolNode::opening_loc.
Definition ast.h:7371
pm_location_t value_loc
SymbolNode::value_loc.
Definition ast.h:7376
pm_location_t closing_loc
SymbolNode::closing_loc.
Definition ast.h:7381
pm_string_t unescaped
SymbolNode::unescaped.
Definition ast.h:7386
This struct represents a token in the Ruby source.
Definition ast.h:530
UndefNode.
Definition ast.h:7419
pm_location_t keyword_loc
UndefNode::keyword_loc.
Definition ast.h:7432
struct pm_node_list names
UndefNode::names.
Definition ast.h:7427
UnlessNode.
Definition ast.h:7450
pm_location_t keyword_loc
UnlessNode::keyword_loc.
Definition ast.h:7466
pm_location_t then_keyword_loc
UnlessNode::then_keyword_loc.
Definition ast.h:7489
pm_location_t end_keyword_loc
UnlessNode::end_keyword_loc.
Definition ast.h:7520
struct pm_statements_node * statements
UnlessNode::statements.
Definition ast.h:7500
struct pm_node * predicate
UnlessNode::predicate.
Definition ast.h:7479
struct pm_else_node * else_clause
UnlessNode::else_clause.
Definition ast.h:7510
UntilNode.
Definition ast.h:7541
struct pm_statements_node * statements
UntilNode::statements.
Definition ast.h:7569
pm_location_t closing_loc
UntilNode::closing_loc.
Definition ast.h:7559
struct pm_node * predicate
UntilNode::predicate.
Definition ast.h:7564
pm_location_t keyword_loc
UntilNode::keyword_loc.
Definition ast.h:7549
pm_location_t do_keyword_loc
UntilNode::do_keyword_loc.
Definition ast.h:7554
WhenNode.
Definition ast.h:7586
struct pm_statements_node * statements
WhenNode::statements.
Definition ast.h:7609
pm_location_t then_keyword_loc
WhenNode::then_keyword_loc.
Definition ast.h:7604
pm_location_t keyword_loc
WhenNode::keyword_loc.
Definition ast.h:7594
struct pm_node_list conditions
WhenNode::conditions.
Definition ast.h:7599
WhileNode.
Definition ast.h:7630
pm_location_t closing_loc
WhileNode::closing_loc.
Definition ast.h:7648
pm_location_t keyword_loc
WhileNode::keyword_loc.
Definition ast.h:7638
struct pm_statements_node * statements
WhileNode::statements.
Definition ast.h:7658
pm_location_t do_keyword_loc
WhileNode::do_keyword_loc.
Definition ast.h:7643
struct pm_node * predicate
WhileNode::predicate.
Definition ast.h:7653
XStringNode.
Definition ast.h:7677
pm_location_t closing_loc
XStringNode::closing_loc.
Definition ast.h:7695
pm_location_t opening_loc
XStringNode::opening_loc.
Definition ast.h:7685
pm_location_t content_loc
XStringNode::content_loc.
Definition ast.h:7690
pm_string_t unescaped
XStringNode::unescaped.
Definition ast.h:7700
YieldNode.
Definition ast.h:7715
pm_location_t keyword_loc
YieldNode::keyword_loc.
Definition ast.h:7723
pm_location_t lparen_loc
YieldNode::lparen_loc.
Definition ast.h:7728
pm_location_t rparen_loc
YieldNode::rparen_loc.
Definition ast.h:7738
struct pm_arguments_node * arguments
YieldNode::arguments.
Definition ast.h:7733
uintptr_t ID
Type that represents a Ruby identifier such as a variable name.
Definition value.h:52
uintptr_t VALUE
Type that represents a Ruby object.
Definition value.h:40