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