debase-ruby_core_source 3.3.0 → 3.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Rakefile +2 -1
  4. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/ast.h +4612 -0
  5. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/defines.h +94 -0
  6. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/diagnostic.h +297 -0
  7. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/encoding.h +248 -0
  8. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/extension.h +18 -0
  9. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/node.h +57 -0
  10. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/options.h +204 -0
  11. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/pack.h +152 -0
  12. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/parser.h +716 -0
  13. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/prettyprint.h +26 -0
  14. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/prism.h +272 -0
  15. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/regexp.h +33 -0
  16. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_buffer.h +146 -0
  17. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_char.h +205 -0
  18. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_constant_pool.h +191 -0
  19. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_list.h +97 -0
  20. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_memchr.h +29 -0
  21. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_newline_list.h +104 -0
  22. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_state_stack.h +42 -0
  23. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_string.h +150 -0
  24. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_string_list.h +44 -0
  25. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_strncasecmp.h +32 -0
  26. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/util/pm_strpbrk.h +43 -0
  27. data/lib/debase/ruby_core_source/ruby-3.3.0-p0/prism/version.h +29 -0
  28. data/lib/debase/ruby_core_source/version.rb +1 -1
  29. metadata +30 -6
@@ -0,0 +1,4612 @@
1
+ /******************************************************************************/
2
+ /* This file is generated by the templates/template.rb script and should not */
3
+ /* be modified manually. See */
4
+ /* templates/include/prism/ast.h.erb */
5
+ /* if you are looking to modify the */
6
+ /* template */
7
+ /******************************************************************************/
8
+ /**
9
+ * @file ast.h
10
+ *
11
+ * The abstract syntax tree.
12
+ */
13
+ #ifndef PRISM_AST_H
14
+ #define PRISM_AST_H
15
+
16
+ #include "prism/defines.h"
17
+ #include "prism/util/pm_constant_pool.h"
18
+ #include "prism/util/pm_string.h"
19
+
20
+ #include <assert.h>
21
+ #include <stddef.h>
22
+ #include <stdint.h>
23
+
24
+ /**
25
+ * This enum represents every type of token in the Ruby source.
26
+ */
27
+ typedef enum pm_token_type {
28
+ /** final token in the file */
29
+ PM_TOKEN_EOF = 1,
30
+
31
+ /** a token that was expected but not found */
32
+ PM_TOKEN_MISSING,
33
+
34
+ /** a token that was not present but it is okay */
35
+ PM_TOKEN_NOT_PROVIDED,
36
+
37
+ /** & */
38
+ PM_TOKEN_AMPERSAND,
39
+
40
+ /** && */
41
+ PM_TOKEN_AMPERSAND_AMPERSAND,
42
+
43
+ /** &&= */
44
+ PM_TOKEN_AMPERSAND_AMPERSAND_EQUAL,
45
+
46
+ /** &. */
47
+ PM_TOKEN_AMPERSAND_DOT,
48
+
49
+ /** &= */
50
+ PM_TOKEN_AMPERSAND_EQUAL,
51
+
52
+ /** ` */
53
+ PM_TOKEN_BACKTICK,
54
+
55
+ /** a back reference */
56
+ PM_TOKEN_BACK_REFERENCE,
57
+
58
+ /** ! or !@ */
59
+ PM_TOKEN_BANG,
60
+
61
+ /** != */
62
+ PM_TOKEN_BANG_EQUAL,
63
+
64
+ /** !~ */
65
+ PM_TOKEN_BANG_TILDE,
66
+
67
+ /** { */
68
+ PM_TOKEN_BRACE_LEFT,
69
+
70
+ /** } */
71
+ PM_TOKEN_BRACE_RIGHT,
72
+
73
+ /** [ */
74
+ PM_TOKEN_BRACKET_LEFT,
75
+
76
+ /** [ for the beginning of an array */
77
+ PM_TOKEN_BRACKET_LEFT_ARRAY,
78
+
79
+ /** [] */
80
+ PM_TOKEN_BRACKET_LEFT_RIGHT,
81
+
82
+ /** []= */
83
+ PM_TOKEN_BRACKET_LEFT_RIGHT_EQUAL,
84
+
85
+ /** ] */
86
+ PM_TOKEN_BRACKET_RIGHT,
87
+
88
+ /** ^ */
89
+ PM_TOKEN_CARET,
90
+
91
+ /** ^= */
92
+ PM_TOKEN_CARET_EQUAL,
93
+
94
+ /** a character literal */
95
+ PM_TOKEN_CHARACTER_LITERAL,
96
+
97
+ /** a class variable */
98
+ PM_TOKEN_CLASS_VARIABLE,
99
+
100
+ /** : */
101
+ PM_TOKEN_COLON,
102
+
103
+ /** :: */
104
+ PM_TOKEN_COLON_COLON,
105
+
106
+ /** , */
107
+ PM_TOKEN_COMMA,
108
+
109
+ /** a comment */
110
+ PM_TOKEN_COMMENT,
111
+
112
+ /** a constant */
113
+ PM_TOKEN_CONSTANT,
114
+
115
+ /** the . call operator */
116
+ PM_TOKEN_DOT,
117
+
118
+ /** the .. range operator */
119
+ PM_TOKEN_DOT_DOT,
120
+
121
+ /** the ... range operator or forwarding parameter */
122
+ PM_TOKEN_DOT_DOT_DOT,
123
+
124
+ /** =begin */
125
+ PM_TOKEN_EMBDOC_BEGIN,
126
+
127
+ /** =end */
128
+ PM_TOKEN_EMBDOC_END,
129
+
130
+ /** a line inside of embedded documentation */
131
+ PM_TOKEN_EMBDOC_LINE,
132
+
133
+ /** #{ */
134
+ PM_TOKEN_EMBEXPR_BEGIN,
135
+
136
+ /** } */
137
+ PM_TOKEN_EMBEXPR_END,
138
+
139
+ /** # */
140
+ PM_TOKEN_EMBVAR,
141
+
142
+ /** = */
143
+ PM_TOKEN_EQUAL,
144
+
145
+ /** == */
146
+ PM_TOKEN_EQUAL_EQUAL,
147
+
148
+ /** === */
149
+ PM_TOKEN_EQUAL_EQUAL_EQUAL,
150
+
151
+ /** => */
152
+ PM_TOKEN_EQUAL_GREATER,
153
+
154
+ /** =~ */
155
+ PM_TOKEN_EQUAL_TILDE,
156
+
157
+ /** a floating point number */
158
+ PM_TOKEN_FLOAT,
159
+
160
+ /** a floating pointer number with an imaginary suffix */
161
+ PM_TOKEN_FLOAT_IMAGINARY,
162
+
163
+ /** a floating pointer number with a rational suffix */
164
+ PM_TOKEN_FLOAT_RATIONAL,
165
+
166
+ /** a floating pointer number with a rational and imaginary suffix */
167
+ PM_TOKEN_FLOAT_RATIONAL_IMAGINARY,
168
+
169
+ /** a global variable */
170
+ PM_TOKEN_GLOBAL_VARIABLE,
171
+
172
+ /** > */
173
+ PM_TOKEN_GREATER,
174
+
175
+ /** >= */
176
+ PM_TOKEN_GREATER_EQUAL,
177
+
178
+ /** >> */
179
+ PM_TOKEN_GREATER_GREATER,
180
+
181
+ /** >>= */
182
+ PM_TOKEN_GREATER_GREATER_EQUAL,
183
+
184
+ /** the end of a heredoc */
185
+ PM_TOKEN_HEREDOC_END,
186
+
187
+ /** the start of a heredoc */
188
+ PM_TOKEN_HEREDOC_START,
189
+
190
+ /** an identifier */
191
+ PM_TOKEN_IDENTIFIER,
192
+
193
+ /** an ignored newline */
194
+ PM_TOKEN_IGNORED_NEWLINE,
195
+
196
+ /** an instance variable */
197
+ PM_TOKEN_INSTANCE_VARIABLE,
198
+
199
+ /** an integer (any base) */
200
+ PM_TOKEN_INTEGER,
201
+
202
+ /** an integer with an imaginary suffix */
203
+ PM_TOKEN_INTEGER_IMAGINARY,
204
+
205
+ /** an integer with a rational suffix */
206
+ PM_TOKEN_INTEGER_RATIONAL,
207
+
208
+ /** an integer with a rational and imaginary suffix */
209
+ PM_TOKEN_INTEGER_RATIONAL_IMAGINARY,
210
+
211
+ /** alias */
212
+ PM_TOKEN_KEYWORD_ALIAS,
213
+
214
+ /** and */
215
+ PM_TOKEN_KEYWORD_AND,
216
+
217
+ /** begin */
218
+ PM_TOKEN_KEYWORD_BEGIN,
219
+
220
+ /** BEGIN */
221
+ PM_TOKEN_KEYWORD_BEGIN_UPCASE,
222
+
223
+ /** break */
224
+ PM_TOKEN_KEYWORD_BREAK,
225
+
226
+ /** case */
227
+ PM_TOKEN_KEYWORD_CASE,
228
+
229
+ /** class */
230
+ PM_TOKEN_KEYWORD_CLASS,
231
+
232
+ /** def */
233
+ PM_TOKEN_KEYWORD_DEF,
234
+
235
+ /** defined? */
236
+ PM_TOKEN_KEYWORD_DEFINED,
237
+
238
+ /** do */
239
+ PM_TOKEN_KEYWORD_DO,
240
+
241
+ /** do keyword for a predicate in a while, until, or for loop */
242
+ PM_TOKEN_KEYWORD_DO_LOOP,
243
+
244
+ /** else */
245
+ PM_TOKEN_KEYWORD_ELSE,
246
+
247
+ /** elsif */
248
+ PM_TOKEN_KEYWORD_ELSIF,
249
+
250
+ /** end */
251
+ PM_TOKEN_KEYWORD_END,
252
+
253
+ /** END */
254
+ PM_TOKEN_KEYWORD_END_UPCASE,
255
+
256
+ /** ensure */
257
+ PM_TOKEN_KEYWORD_ENSURE,
258
+
259
+ /** false */
260
+ PM_TOKEN_KEYWORD_FALSE,
261
+
262
+ /** for */
263
+ PM_TOKEN_KEYWORD_FOR,
264
+
265
+ /** if */
266
+ PM_TOKEN_KEYWORD_IF,
267
+
268
+ /** if in the modifier form */
269
+ PM_TOKEN_KEYWORD_IF_MODIFIER,
270
+
271
+ /** in */
272
+ PM_TOKEN_KEYWORD_IN,
273
+
274
+ /** module */
275
+ PM_TOKEN_KEYWORD_MODULE,
276
+
277
+ /** next */
278
+ PM_TOKEN_KEYWORD_NEXT,
279
+
280
+ /** nil */
281
+ PM_TOKEN_KEYWORD_NIL,
282
+
283
+ /** not */
284
+ PM_TOKEN_KEYWORD_NOT,
285
+
286
+ /** or */
287
+ PM_TOKEN_KEYWORD_OR,
288
+
289
+ /** redo */
290
+ PM_TOKEN_KEYWORD_REDO,
291
+
292
+ /** rescue */
293
+ PM_TOKEN_KEYWORD_RESCUE,
294
+
295
+ /** rescue in the modifier form */
296
+ PM_TOKEN_KEYWORD_RESCUE_MODIFIER,
297
+
298
+ /** retry */
299
+ PM_TOKEN_KEYWORD_RETRY,
300
+
301
+ /** return */
302
+ PM_TOKEN_KEYWORD_RETURN,
303
+
304
+ /** self */
305
+ PM_TOKEN_KEYWORD_SELF,
306
+
307
+ /** super */
308
+ PM_TOKEN_KEYWORD_SUPER,
309
+
310
+ /** then */
311
+ PM_TOKEN_KEYWORD_THEN,
312
+
313
+ /** true */
314
+ PM_TOKEN_KEYWORD_TRUE,
315
+
316
+ /** undef */
317
+ PM_TOKEN_KEYWORD_UNDEF,
318
+
319
+ /** unless */
320
+ PM_TOKEN_KEYWORD_UNLESS,
321
+
322
+ /** unless in the modifier form */
323
+ PM_TOKEN_KEYWORD_UNLESS_MODIFIER,
324
+
325
+ /** until */
326
+ PM_TOKEN_KEYWORD_UNTIL,
327
+
328
+ /** until in the modifier form */
329
+ PM_TOKEN_KEYWORD_UNTIL_MODIFIER,
330
+
331
+ /** when */
332
+ PM_TOKEN_KEYWORD_WHEN,
333
+
334
+ /** while */
335
+ PM_TOKEN_KEYWORD_WHILE,
336
+
337
+ /** while in the modifier form */
338
+ PM_TOKEN_KEYWORD_WHILE_MODIFIER,
339
+
340
+ /** yield */
341
+ PM_TOKEN_KEYWORD_YIELD,
342
+
343
+ /** __ENCODING__ */
344
+ PM_TOKEN_KEYWORD___ENCODING__,
345
+
346
+ /** __FILE__ */
347
+ PM_TOKEN_KEYWORD___FILE__,
348
+
349
+ /** __LINE__ */
350
+ PM_TOKEN_KEYWORD___LINE__,
351
+
352
+ /** a label */
353
+ PM_TOKEN_LABEL,
354
+
355
+ /** the end of a label */
356
+ PM_TOKEN_LABEL_END,
357
+
358
+ /** { */
359
+ PM_TOKEN_LAMBDA_BEGIN,
360
+
361
+ /** < */
362
+ PM_TOKEN_LESS,
363
+
364
+ /** <= */
365
+ PM_TOKEN_LESS_EQUAL,
366
+
367
+ /** <=> */
368
+ PM_TOKEN_LESS_EQUAL_GREATER,
369
+
370
+ /** << */
371
+ PM_TOKEN_LESS_LESS,
372
+
373
+ /** <<= */
374
+ PM_TOKEN_LESS_LESS_EQUAL,
375
+
376
+ /** a method name */
377
+ PM_TOKEN_METHOD_NAME,
378
+
379
+ /** - */
380
+ PM_TOKEN_MINUS,
381
+
382
+ /** -= */
383
+ PM_TOKEN_MINUS_EQUAL,
384
+
385
+ /** -> */
386
+ PM_TOKEN_MINUS_GREATER,
387
+
388
+ /** a newline character outside of other tokens */
389
+ PM_TOKEN_NEWLINE,
390
+
391
+ /** a numbered reference to a capture group in the previous regular expression match */
392
+ PM_TOKEN_NUMBERED_REFERENCE,
393
+
394
+ /** ( */
395
+ PM_TOKEN_PARENTHESIS_LEFT,
396
+
397
+ /** ( for a parentheses node */
398
+ PM_TOKEN_PARENTHESIS_LEFT_PARENTHESES,
399
+
400
+ /** ) */
401
+ PM_TOKEN_PARENTHESIS_RIGHT,
402
+
403
+ /** % */
404
+ PM_TOKEN_PERCENT,
405
+
406
+ /** %= */
407
+ PM_TOKEN_PERCENT_EQUAL,
408
+
409
+ /** %i */
410
+ PM_TOKEN_PERCENT_LOWER_I,
411
+
412
+ /** %w */
413
+ PM_TOKEN_PERCENT_LOWER_W,
414
+
415
+ /** %x */
416
+ PM_TOKEN_PERCENT_LOWER_X,
417
+
418
+ /** %I */
419
+ PM_TOKEN_PERCENT_UPPER_I,
420
+
421
+ /** %W */
422
+ PM_TOKEN_PERCENT_UPPER_W,
423
+
424
+ /** | */
425
+ PM_TOKEN_PIPE,
426
+
427
+ /** |= */
428
+ PM_TOKEN_PIPE_EQUAL,
429
+
430
+ /** || */
431
+ PM_TOKEN_PIPE_PIPE,
432
+
433
+ /** ||= */
434
+ PM_TOKEN_PIPE_PIPE_EQUAL,
435
+
436
+ /** + */
437
+ PM_TOKEN_PLUS,
438
+
439
+ /** += */
440
+ PM_TOKEN_PLUS_EQUAL,
441
+
442
+ /** ? */
443
+ PM_TOKEN_QUESTION_MARK,
444
+
445
+ /** the beginning of a regular expression */
446
+ PM_TOKEN_REGEXP_BEGIN,
447
+
448
+ /** the end of a regular expression */
449
+ PM_TOKEN_REGEXP_END,
450
+
451
+ /** ; */
452
+ PM_TOKEN_SEMICOLON,
453
+
454
+ /** / */
455
+ PM_TOKEN_SLASH,
456
+
457
+ /** /= */
458
+ PM_TOKEN_SLASH_EQUAL,
459
+
460
+ /** * */
461
+ PM_TOKEN_STAR,
462
+
463
+ /** *= */
464
+ PM_TOKEN_STAR_EQUAL,
465
+
466
+ /** ** */
467
+ PM_TOKEN_STAR_STAR,
468
+
469
+ /** **= */
470
+ PM_TOKEN_STAR_STAR_EQUAL,
471
+
472
+ /** the beginning of a string */
473
+ PM_TOKEN_STRING_BEGIN,
474
+
475
+ /** the contents of a string */
476
+ PM_TOKEN_STRING_CONTENT,
477
+
478
+ /** the end of a string */
479
+ PM_TOKEN_STRING_END,
480
+
481
+ /** the beginning of a symbol */
482
+ PM_TOKEN_SYMBOL_BEGIN,
483
+
484
+ /** ~ or ~@ */
485
+ PM_TOKEN_TILDE,
486
+
487
+ /** unary & */
488
+ PM_TOKEN_UAMPERSAND,
489
+
490
+ /** unary :: */
491
+ PM_TOKEN_UCOLON_COLON,
492
+
493
+ /** unary .. operator */
494
+ PM_TOKEN_UDOT_DOT,
495
+
496
+ /** unary ... operator */
497
+ PM_TOKEN_UDOT_DOT_DOT,
498
+
499
+ /** -@ */
500
+ PM_TOKEN_UMINUS,
501
+
502
+ /** -@ for a number */
503
+ PM_TOKEN_UMINUS_NUM,
504
+
505
+ /** +@ */
506
+ PM_TOKEN_UPLUS,
507
+
508
+ /** unary * */
509
+ PM_TOKEN_USTAR,
510
+
511
+ /** unary ** */
512
+ PM_TOKEN_USTAR_STAR,
513
+
514
+ /** a separator between words in a list */
515
+ PM_TOKEN_WORDS_SEP,
516
+
517
+ /** marker for the point in the file at which the parser should stop */
518
+ PM_TOKEN___END__,
519
+
520
+ /** The maximum token value. */
521
+ PM_TOKEN_MAXIMUM,
522
+ } pm_token_type_t;
523
+
524
+ /**
525
+ * This struct represents a token in the Ruby source. We use it to track both
526
+ * type and location information.
527
+ */
528
+ typedef struct {
529
+ /** The type of the token. */
530
+ pm_token_type_t type;
531
+
532
+ /** A pointer to the start location of the token in the source. */
533
+ const uint8_t *start;
534
+
535
+ /** A pointer to the end location of the token in the source. */
536
+ const uint8_t *end;
537
+ } pm_token_t;
538
+
539
+ /**
540
+ * This represents a range of bytes in the source string to which a node or
541
+ * token corresponds.
542
+ */
543
+ typedef struct {
544
+ /** A pointer to the start location of the range in the source. */
545
+ const uint8_t *start;
546
+
547
+ /** A pointer to the end location of the range in the source. */
548
+ const uint8_t *end;
549
+ } pm_location_t;
550
+
551
+ struct pm_node;
552
+
553
+ /**
554
+ * A list of nodes in the source, most often used for lists of children.
555
+ */
556
+ typedef struct pm_node_list {
557
+ /** The number of nodes in the list. */
558
+ size_t size;
559
+
560
+ /** The capacity of the list that has been allocated. */
561
+ size_t capacity;
562
+
563
+ /** The nodes in the list. */
564
+ struct pm_node **nodes;
565
+ } pm_node_list_t;
566
+
567
+ /**
568
+ * This enum represents every type of node in the Ruby syntax tree.
569
+ */
570
+ enum pm_node_type {
571
+ /** AliasGlobalVariableNode */
572
+ PM_ALIAS_GLOBAL_VARIABLE_NODE = 1,
573
+
574
+ /** AliasMethodNode */
575
+ PM_ALIAS_METHOD_NODE = 2,
576
+
577
+ /** AlternationPatternNode */
578
+ PM_ALTERNATION_PATTERN_NODE = 3,
579
+
580
+ /** AndNode */
581
+ PM_AND_NODE = 4,
582
+
583
+ /** ArgumentsNode */
584
+ PM_ARGUMENTS_NODE = 5,
585
+
586
+ /** ArrayNode */
587
+ PM_ARRAY_NODE = 6,
588
+
589
+ /** ArrayPatternNode */
590
+ PM_ARRAY_PATTERN_NODE = 7,
591
+
592
+ /** AssocNode */
593
+ PM_ASSOC_NODE = 8,
594
+
595
+ /** AssocSplatNode */
596
+ PM_ASSOC_SPLAT_NODE = 9,
597
+
598
+ /** BackReferenceReadNode */
599
+ PM_BACK_REFERENCE_READ_NODE = 10,
600
+
601
+ /** BeginNode */
602
+ PM_BEGIN_NODE = 11,
603
+
604
+ /** BlockArgumentNode */
605
+ PM_BLOCK_ARGUMENT_NODE = 12,
606
+
607
+ /** BlockLocalVariableNode */
608
+ PM_BLOCK_LOCAL_VARIABLE_NODE = 13,
609
+
610
+ /** BlockNode */
611
+ PM_BLOCK_NODE = 14,
612
+
613
+ /** BlockParameterNode */
614
+ PM_BLOCK_PARAMETER_NODE = 15,
615
+
616
+ /** BlockParametersNode */
617
+ PM_BLOCK_PARAMETERS_NODE = 16,
618
+
619
+ /** BreakNode */
620
+ PM_BREAK_NODE = 17,
621
+
622
+ /** CallAndWriteNode */
623
+ PM_CALL_AND_WRITE_NODE = 18,
624
+
625
+ /** CallNode */
626
+ PM_CALL_NODE = 19,
627
+
628
+ /** CallOperatorWriteNode */
629
+ PM_CALL_OPERATOR_WRITE_NODE = 20,
630
+
631
+ /** CallOrWriteNode */
632
+ PM_CALL_OR_WRITE_NODE = 21,
633
+
634
+ /** CallTargetNode */
635
+ PM_CALL_TARGET_NODE = 22,
636
+
637
+ /** CapturePatternNode */
638
+ PM_CAPTURE_PATTERN_NODE = 23,
639
+
640
+ /** CaseMatchNode */
641
+ PM_CASE_MATCH_NODE = 24,
642
+
643
+ /** CaseNode */
644
+ PM_CASE_NODE = 25,
645
+
646
+ /** ClassNode */
647
+ PM_CLASS_NODE = 26,
648
+
649
+ /** ClassVariableAndWriteNode */
650
+ PM_CLASS_VARIABLE_AND_WRITE_NODE = 27,
651
+
652
+ /** ClassVariableOperatorWriteNode */
653
+ PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE = 28,
654
+
655
+ /** ClassVariableOrWriteNode */
656
+ PM_CLASS_VARIABLE_OR_WRITE_NODE = 29,
657
+
658
+ /** ClassVariableReadNode */
659
+ PM_CLASS_VARIABLE_READ_NODE = 30,
660
+
661
+ /** ClassVariableTargetNode */
662
+ PM_CLASS_VARIABLE_TARGET_NODE = 31,
663
+
664
+ /** ClassVariableWriteNode */
665
+ PM_CLASS_VARIABLE_WRITE_NODE = 32,
666
+
667
+ /** ConstantAndWriteNode */
668
+ PM_CONSTANT_AND_WRITE_NODE = 33,
669
+
670
+ /** ConstantOperatorWriteNode */
671
+ PM_CONSTANT_OPERATOR_WRITE_NODE = 34,
672
+
673
+ /** ConstantOrWriteNode */
674
+ PM_CONSTANT_OR_WRITE_NODE = 35,
675
+
676
+ /** ConstantPathAndWriteNode */
677
+ PM_CONSTANT_PATH_AND_WRITE_NODE = 36,
678
+
679
+ /** ConstantPathNode */
680
+ PM_CONSTANT_PATH_NODE = 37,
681
+
682
+ /** ConstantPathOperatorWriteNode */
683
+ PM_CONSTANT_PATH_OPERATOR_WRITE_NODE = 38,
684
+
685
+ /** ConstantPathOrWriteNode */
686
+ PM_CONSTANT_PATH_OR_WRITE_NODE = 39,
687
+
688
+ /** ConstantPathTargetNode */
689
+ PM_CONSTANT_PATH_TARGET_NODE = 40,
690
+
691
+ /** ConstantPathWriteNode */
692
+ PM_CONSTANT_PATH_WRITE_NODE = 41,
693
+
694
+ /** ConstantReadNode */
695
+ PM_CONSTANT_READ_NODE = 42,
696
+
697
+ /** ConstantTargetNode */
698
+ PM_CONSTANT_TARGET_NODE = 43,
699
+
700
+ /** ConstantWriteNode */
701
+ PM_CONSTANT_WRITE_NODE = 44,
702
+
703
+ /** DefNode */
704
+ PM_DEF_NODE = 45,
705
+
706
+ /** DefinedNode */
707
+ PM_DEFINED_NODE = 46,
708
+
709
+ /** ElseNode */
710
+ PM_ELSE_NODE = 47,
711
+
712
+ /** EmbeddedStatementsNode */
713
+ PM_EMBEDDED_STATEMENTS_NODE = 48,
714
+
715
+ /** EmbeddedVariableNode */
716
+ PM_EMBEDDED_VARIABLE_NODE = 49,
717
+
718
+ /** EnsureNode */
719
+ PM_ENSURE_NODE = 50,
720
+
721
+ /** FalseNode */
722
+ PM_FALSE_NODE = 51,
723
+
724
+ /** FindPatternNode */
725
+ PM_FIND_PATTERN_NODE = 52,
726
+
727
+ /** FlipFlopNode */
728
+ PM_FLIP_FLOP_NODE = 53,
729
+
730
+ /** FloatNode */
731
+ PM_FLOAT_NODE = 54,
732
+
733
+ /** ForNode */
734
+ PM_FOR_NODE = 55,
735
+
736
+ /** ForwardingArgumentsNode */
737
+ PM_FORWARDING_ARGUMENTS_NODE = 56,
738
+
739
+ /** ForwardingParameterNode */
740
+ PM_FORWARDING_PARAMETER_NODE = 57,
741
+
742
+ /** ForwardingSuperNode */
743
+ PM_FORWARDING_SUPER_NODE = 58,
744
+
745
+ /** GlobalVariableAndWriteNode */
746
+ PM_GLOBAL_VARIABLE_AND_WRITE_NODE = 59,
747
+
748
+ /** GlobalVariableOperatorWriteNode */
749
+ PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE = 60,
750
+
751
+ /** GlobalVariableOrWriteNode */
752
+ PM_GLOBAL_VARIABLE_OR_WRITE_NODE = 61,
753
+
754
+ /** GlobalVariableReadNode */
755
+ PM_GLOBAL_VARIABLE_READ_NODE = 62,
756
+
757
+ /** GlobalVariableTargetNode */
758
+ PM_GLOBAL_VARIABLE_TARGET_NODE = 63,
759
+
760
+ /** GlobalVariableWriteNode */
761
+ PM_GLOBAL_VARIABLE_WRITE_NODE = 64,
762
+
763
+ /** HashNode */
764
+ PM_HASH_NODE = 65,
765
+
766
+ /** HashPatternNode */
767
+ PM_HASH_PATTERN_NODE = 66,
768
+
769
+ /** IfNode */
770
+ PM_IF_NODE = 67,
771
+
772
+ /** ImaginaryNode */
773
+ PM_IMAGINARY_NODE = 68,
774
+
775
+ /** ImplicitNode */
776
+ PM_IMPLICIT_NODE = 69,
777
+
778
+ /** ImplicitRestNode */
779
+ PM_IMPLICIT_REST_NODE = 70,
780
+
781
+ /** InNode */
782
+ PM_IN_NODE = 71,
783
+
784
+ /** IndexAndWriteNode */
785
+ PM_INDEX_AND_WRITE_NODE = 72,
786
+
787
+ /** IndexOperatorWriteNode */
788
+ PM_INDEX_OPERATOR_WRITE_NODE = 73,
789
+
790
+ /** IndexOrWriteNode */
791
+ PM_INDEX_OR_WRITE_NODE = 74,
792
+
793
+ /** IndexTargetNode */
794
+ PM_INDEX_TARGET_NODE = 75,
795
+
796
+ /** InstanceVariableAndWriteNode */
797
+ PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 76,
798
+
799
+ /** InstanceVariableOperatorWriteNode */
800
+ PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 77,
801
+
802
+ /** InstanceVariableOrWriteNode */
803
+ PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 78,
804
+
805
+ /** InstanceVariableReadNode */
806
+ PM_INSTANCE_VARIABLE_READ_NODE = 79,
807
+
808
+ /** InstanceVariableTargetNode */
809
+ PM_INSTANCE_VARIABLE_TARGET_NODE = 80,
810
+
811
+ /** InstanceVariableWriteNode */
812
+ PM_INSTANCE_VARIABLE_WRITE_NODE = 81,
813
+
814
+ /** IntegerNode */
815
+ PM_INTEGER_NODE = 82,
816
+
817
+ /** InterpolatedMatchLastLineNode */
818
+ PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 83,
819
+
820
+ /** InterpolatedRegularExpressionNode */
821
+ PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 84,
822
+
823
+ /** InterpolatedStringNode */
824
+ PM_INTERPOLATED_STRING_NODE = 85,
825
+
826
+ /** InterpolatedSymbolNode */
827
+ PM_INTERPOLATED_SYMBOL_NODE = 86,
828
+
829
+ /** InterpolatedXStringNode */
830
+ PM_INTERPOLATED_X_STRING_NODE = 87,
831
+
832
+ /** KeywordHashNode */
833
+ PM_KEYWORD_HASH_NODE = 88,
834
+
835
+ /** KeywordRestParameterNode */
836
+ PM_KEYWORD_REST_PARAMETER_NODE = 89,
837
+
838
+ /** LambdaNode */
839
+ PM_LAMBDA_NODE = 90,
840
+
841
+ /** LocalVariableAndWriteNode */
842
+ PM_LOCAL_VARIABLE_AND_WRITE_NODE = 91,
843
+
844
+ /** LocalVariableOperatorWriteNode */
845
+ PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 92,
846
+
847
+ /** LocalVariableOrWriteNode */
848
+ PM_LOCAL_VARIABLE_OR_WRITE_NODE = 93,
849
+
850
+ /** LocalVariableReadNode */
851
+ PM_LOCAL_VARIABLE_READ_NODE = 94,
852
+
853
+ /** LocalVariableTargetNode */
854
+ PM_LOCAL_VARIABLE_TARGET_NODE = 95,
855
+
856
+ /** LocalVariableWriteNode */
857
+ PM_LOCAL_VARIABLE_WRITE_NODE = 96,
858
+
859
+ /** MatchLastLineNode */
860
+ PM_MATCH_LAST_LINE_NODE = 97,
861
+
862
+ /** MatchPredicateNode */
863
+ PM_MATCH_PREDICATE_NODE = 98,
864
+
865
+ /** MatchRequiredNode */
866
+ PM_MATCH_REQUIRED_NODE = 99,
867
+
868
+ /** MatchWriteNode */
869
+ PM_MATCH_WRITE_NODE = 100,
870
+
871
+ /** MissingNode */
872
+ PM_MISSING_NODE = 101,
873
+
874
+ /** ModuleNode */
875
+ PM_MODULE_NODE = 102,
876
+
877
+ /** MultiTargetNode */
878
+ PM_MULTI_TARGET_NODE = 103,
879
+
880
+ /** MultiWriteNode */
881
+ PM_MULTI_WRITE_NODE = 104,
882
+
883
+ /** NextNode */
884
+ PM_NEXT_NODE = 105,
885
+
886
+ /** NilNode */
887
+ PM_NIL_NODE = 106,
888
+
889
+ /** NoKeywordsParameterNode */
890
+ PM_NO_KEYWORDS_PARAMETER_NODE = 107,
891
+
892
+ /** NumberedParametersNode */
893
+ PM_NUMBERED_PARAMETERS_NODE = 108,
894
+
895
+ /** NumberedReferenceReadNode */
896
+ PM_NUMBERED_REFERENCE_READ_NODE = 109,
897
+
898
+ /** OptionalKeywordParameterNode */
899
+ PM_OPTIONAL_KEYWORD_PARAMETER_NODE = 110,
900
+
901
+ /** OptionalParameterNode */
902
+ PM_OPTIONAL_PARAMETER_NODE = 111,
903
+
904
+ /** OrNode */
905
+ PM_OR_NODE = 112,
906
+
907
+ /** ParametersNode */
908
+ PM_PARAMETERS_NODE = 113,
909
+
910
+ /** ParenthesesNode */
911
+ PM_PARENTHESES_NODE = 114,
912
+
913
+ /** PinnedExpressionNode */
914
+ PM_PINNED_EXPRESSION_NODE = 115,
915
+
916
+ /** PinnedVariableNode */
917
+ PM_PINNED_VARIABLE_NODE = 116,
918
+
919
+ /** PostExecutionNode */
920
+ PM_POST_EXECUTION_NODE = 117,
921
+
922
+ /** PreExecutionNode */
923
+ PM_PRE_EXECUTION_NODE = 118,
924
+
925
+ /** ProgramNode */
926
+ PM_PROGRAM_NODE = 119,
927
+
928
+ /** RangeNode */
929
+ PM_RANGE_NODE = 120,
930
+
931
+ /** RationalNode */
932
+ PM_RATIONAL_NODE = 121,
933
+
934
+ /** RedoNode */
935
+ PM_REDO_NODE = 122,
936
+
937
+ /** RegularExpressionNode */
938
+ PM_REGULAR_EXPRESSION_NODE = 123,
939
+
940
+ /** RequiredKeywordParameterNode */
941
+ PM_REQUIRED_KEYWORD_PARAMETER_NODE = 124,
942
+
943
+ /** RequiredParameterNode */
944
+ PM_REQUIRED_PARAMETER_NODE = 125,
945
+
946
+ /** RescueModifierNode */
947
+ PM_RESCUE_MODIFIER_NODE = 126,
948
+
949
+ /** RescueNode */
950
+ PM_RESCUE_NODE = 127,
951
+
952
+ /** RestParameterNode */
953
+ PM_REST_PARAMETER_NODE = 128,
954
+
955
+ /** RetryNode */
956
+ PM_RETRY_NODE = 129,
957
+
958
+ /** ReturnNode */
959
+ PM_RETURN_NODE = 130,
960
+
961
+ /** SelfNode */
962
+ PM_SELF_NODE = 131,
963
+
964
+ /** SingletonClassNode */
965
+ PM_SINGLETON_CLASS_NODE = 132,
966
+
967
+ /** SourceEncodingNode */
968
+ PM_SOURCE_ENCODING_NODE = 133,
969
+
970
+ /** SourceFileNode */
971
+ PM_SOURCE_FILE_NODE = 134,
972
+
973
+ /** SourceLineNode */
974
+ PM_SOURCE_LINE_NODE = 135,
975
+
976
+ /** SplatNode */
977
+ PM_SPLAT_NODE = 136,
978
+
979
+ /** StatementsNode */
980
+ PM_STATEMENTS_NODE = 137,
981
+
982
+ /** StringNode */
983
+ PM_STRING_NODE = 138,
984
+
985
+ /** SuperNode */
986
+ PM_SUPER_NODE = 139,
987
+
988
+ /** SymbolNode */
989
+ PM_SYMBOL_NODE = 140,
990
+
991
+ /** TrueNode */
992
+ PM_TRUE_NODE = 141,
993
+
994
+ /** UndefNode */
995
+ PM_UNDEF_NODE = 142,
996
+
997
+ /** UnlessNode */
998
+ PM_UNLESS_NODE = 143,
999
+
1000
+ /** UntilNode */
1001
+ PM_UNTIL_NODE = 144,
1002
+
1003
+ /** WhenNode */
1004
+ PM_WHEN_NODE = 145,
1005
+
1006
+ /** WhileNode */
1007
+ PM_WHILE_NODE = 146,
1008
+
1009
+ /** XStringNode */
1010
+ PM_X_STRING_NODE = 147,
1011
+
1012
+ /** YieldNode */
1013
+ PM_YIELD_NODE = 148,
1014
+
1015
+ /** A special kind of node used for compilation. */
1016
+ PM_SCOPE_NODE
1017
+ };
1018
+
1019
+ /**
1020
+ * This is the type of node embedded in the node struct. We explicitly control
1021
+ * the size of it here to avoid having the variable-width enum.
1022
+ */
1023
+ typedef uint16_t pm_node_type_t;
1024
+
1025
+ /**
1026
+ * These are the flags embedded in the node struct. We explicitly control the
1027
+ * size of it here to avoid having the variable-width enum.
1028
+ */
1029
+ typedef uint16_t pm_node_flags_t;
1030
+
1031
+ /**
1032
+ * We store the flags enum in every node in the tree. Some flags are common to
1033
+ * all nodes (the ones listed below). Others are specific to certain node types.
1034
+ */
1035
+ #define PM_NODE_FLAG_BITS (sizeof(pm_node_flags_t) * 8)
1036
+
1037
+ static const pm_node_flags_t PM_NODE_FLAG_NEWLINE = (1 << (PM_NODE_FLAG_BITS - 1));
1038
+ static const pm_node_flags_t PM_NODE_FLAG_STATIC_LITERAL = (1 << (PM_NODE_FLAG_BITS - 2));
1039
+ static const pm_node_flags_t PM_NODE_FLAG_COMMON_MASK = (1 << (PM_NODE_FLAG_BITS - 1)) | (1 << (PM_NODE_FLAG_BITS - 2));
1040
+
1041
+ /**
1042
+ * Cast the type to an enum to allow the compiler to provide exhaustiveness
1043
+ * checking.
1044
+ */
1045
+ #define PM_NODE_TYPE(node) ((enum pm_node_type) node->type)
1046
+
1047
+ /**
1048
+ * Return true if the type of the given node matches the given type.
1049
+ */
1050
+ #define PM_NODE_TYPE_P(node, type) (PM_NODE_TYPE(node) == (type))
1051
+
1052
+ /**
1053
+ * Return true if the given flag is set on the given node.
1054
+ */
1055
+ #define PM_NODE_FLAG_P(node, flag) ((((pm_node_t *)(node))->flags & (flag)) != 0)
1056
+
1057
+ /**
1058
+ * This is the base structure that represents a node in the syntax tree. It is
1059
+ * embedded into every node type.
1060
+ */
1061
+ typedef struct pm_node {
1062
+ /**
1063
+ * This represents the type of the node. It somewhat maps to the nodes that
1064
+ * existed in the original grammar and ripper, but it's not a 1:1 mapping.
1065
+ */
1066
+ pm_node_type_t type;
1067
+
1068
+ /**
1069
+ * This represents any flags on the node. Some are common to all nodes, and
1070
+ * some are specific to the type of node.
1071
+ */
1072
+ pm_node_flags_t flags;
1073
+
1074
+ /**
1075
+ * This is the location of the node in the source. It's a range of bytes
1076
+ * containing a start and an end.
1077
+ */
1078
+ pm_location_t location;
1079
+ } pm_node_t;
1080
+
1081
+ /**
1082
+ * AliasGlobalVariableNode
1083
+ *
1084
+ * Type: PM_ALIAS_GLOBAL_VARIABLE_NODE
1085
+ *
1086
+ * @extends pm_node_t
1087
+ */
1088
+ typedef struct pm_alias_global_variable_node {
1089
+ /** The embedded base node. */
1090
+ pm_node_t base;
1091
+
1092
+ /** AliasGlobalVariableNode#new_name */
1093
+ struct pm_node *new_name;
1094
+
1095
+ /** AliasGlobalVariableNode#old_name */
1096
+ struct pm_node *old_name;
1097
+
1098
+ /** AliasGlobalVariableNode#keyword_loc */
1099
+ pm_location_t keyword_loc;
1100
+ } pm_alias_global_variable_node_t;
1101
+
1102
+ /**
1103
+ * AliasMethodNode
1104
+ *
1105
+ * Type: PM_ALIAS_METHOD_NODE
1106
+ *
1107
+ * @extends pm_node_t
1108
+ */
1109
+ typedef struct pm_alias_method_node {
1110
+ /** The embedded base node. */
1111
+ pm_node_t base;
1112
+
1113
+ /** AliasMethodNode#new_name */
1114
+ struct pm_node *new_name;
1115
+
1116
+ /** AliasMethodNode#old_name */
1117
+ struct pm_node *old_name;
1118
+
1119
+ /** AliasMethodNode#keyword_loc */
1120
+ pm_location_t keyword_loc;
1121
+ } pm_alias_method_node_t;
1122
+
1123
+ /**
1124
+ * AlternationPatternNode
1125
+ *
1126
+ * Type: PM_ALTERNATION_PATTERN_NODE
1127
+ *
1128
+ * @extends pm_node_t
1129
+ */
1130
+ typedef struct pm_alternation_pattern_node {
1131
+ /** The embedded base node. */
1132
+ pm_node_t base;
1133
+
1134
+ /** AlternationPatternNode#left */
1135
+ struct pm_node *left;
1136
+
1137
+ /** AlternationPatternNode#right */
1138
+ struct pm_node *right;
1139
+
1140
+ /** AlternationPatternNode#operator_loc */
1141
+ pm_location_t operator_loc;
1142
+ } pm_alternation_pattern_node_t;
1143
+
1144
+ /**
1145
+ * AndNode
1146
+ *
1147
+ * Type: PM_AND_NODE
1148
+ *
1149
+ * @extends pm_node_t
1150
+ */
1151
+ typedef struct pm_and_node {
1152
+ /** The embedded base node. */
1153
+ pm_node_t base;
1154
+
1155
+ /** AndNode#left */
1156
+ struct pm_node *left;
1157
+
1158
+ /** AndNode#right */
1159
+ struct pm_node *right;
1160
+
1161
+ /** AndNode#operator_loc */
1162
+ pm_location_t operator_loc;
1163
+ } pm_and_node_t;
1164
+
1165
+ /**
1166
+ * ArgumentsNode
1167
+ *
1168
+ * Type: PM_ARGUMENTS_NODE
1169
+ * Flags:
1170
+ * PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT
1171
+ *
1172
+ * @extends pm_node_t
1173
+ */
1174
+ typedef struct pm_arguments_node {
1175
+ /** The embedded base node. */
1176
+ pm_node_t base;
1177
+
1178
+ /** ArgumentsNode#arguments */
1179
+ struct pm_node_list arguments;
1180
+ } pm_arguments_node_t;
1181
+
1182
+ /**
1183
+ * ArrayNode
1184
+ *
1185
+ * Type: PM_ARRAY_NODE
1186
+ * Flags:
1187
+ * PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT
1188
+ *
1189
+ * @extends pm_node_t
1190
+ */
1191
+ typedef struct pm_array_node {
1192
+ /** The embedded base node. */
1193
+ pm_node_t base;
1194
+
1195
+ /** ArrayNode#elements */
1196
+ struct pm_node_list elements;
1197
+
1198
+ /** ArrayNode#opening_loc */
1199
+ pm_location_t opening_loc;
1200
+
1201
+ /** ArrayNode#closing_loc */
1202
+ pm_location_t closing_loc;
1203
+ } pm_array_node_t;
1204
+
1205
+ /**
1206
+ * ArrayPatternNode
1207
+ *
1208
+ * Type: PM_ARRAY_PATTERN_NODE
1209
+ *
1210
+ * @extends pm_node_t
1211
+ */
1212
+ typedef struct pm_array_pattern_node {
1213
+ /** The embedded base node. */
1214
+ pm_node_t base;
1215
+
1216
+ /** ArrayPatternNode#constant */
1217
+ struct pm_node *constant;
1218
+
1219
+ /** ArrayPatternNode#requireds */
1220
+ struct pm_node_list requireds;
1221
+
1222
+ /** ArrayPatternNode#rest */
1223
+ struct pm_node *rest;
1224
+
1225
+ /** ArrayPatternNode#posts */
1226
+ struct pm_node_list posts;
1227
+
1228
+ /** ArrayPatternNode#opening_loc */
1229
+ pm_location_t opening_loc;
1230
+
1231
+ /** ArrayPatternNode#closing_loc */
1232
+ pm_location_t closing_loc;
1233
+ } pm_array_pattern_node_t;
1234
+
1235
+ /**
1236
+ * AssocNode
1237
+ *
1238
+ * Type: PM_ASSOC_NODE
1239
+ *
1240
+ * @extends pm_node_t
1241
+ */
1242
+ typedef struct pm_assoc_node {
1243
+ /** The embedded base node. */
1244
+ pm_node_t base;
1245
+
1246
+ /** AssocNode#key */
1247
+ struct pm_node *key;
1248
+
1249
+ /** AssocNode#value */
1250
+ struct pm_node *value;
1251
+
1252
+ /** AssocNode#operator_loc */
1253
+ pm_location_t operator_loc;
1254
+ } pm_assoc_node_t;
1255
+
1256
+ /**
1257
+ * AssocSplatNode
1258
+ *
1259
+ * Type: PM_ASSOC_SPLAT_NODE
1260
+ *
1261
+ * @extends pm_node_t
1262
+ */
1263
+ typedef struct pm_assoc_splat_node {
1264
+ /** The embedded base node. */
1265
+ pm_node_t base;
1266
+
1267
+ /** AssocSplatNode#value */
1268
+ struct pm_node *value;
1269
+
1270
+ /** AssocSplatNode#operator_loc */
1271
+ pm_location_t operator_loc;
1272
+ } pm_assoc_splat_node_t;
1273
+
1274
+ /**
1275
+ * BackReferenceReadNode
1276
+ *
1277
+ * Type: PM_BACK_REFERENCE_READ_NODE
1278
+ *
1279
+ * @extends pm_node_t
1280
+ */
1281
+ typedef struct pm_back_reference_read_node {
1282
+ /** The embedded base node. */
1283
+ pm_node_t base;
1284
+
1285
+ /** BackReferenceReadNode#name */
1286
+ pm_constant_id_t name;
1287
+ } pm_back_reference_read_node_t;
1288
+
1289
+ /**
1290
+ * BeginNode
1291
+ *
1292
+ * Type: PM_BEGIN_NODE
1293
+ *
1294
+ * @extends pm_node_t
1295
+ */
1296
+ typedef struct pm_begin_node {
1297
+ /** The embedded base node. */
1298
+ pm_node_t base;
1299
+
1300
+ /** BeginNode#begin_keyword_loc */
1301
+ pm_location_t begin_keyword_loc;
1302
+
1303
+ /** BeginNode#statements */
1304
+ struct pm_statements_node *statements;
1305
+
1306
+ /** BeginNode#rescue_clause */
1307
+ struct pm_rescue_node *rescue_clause;
1308
+
1309
+ /** BeginNode#else_clause */
1310
+ struct pm_else_node *else_clause;
1311
+
1312
+ /** BeginNode#ensure_clause */
1313
+ struct pm_ensure_node *ensure_clause;
1314
+
1315
+ /** BeginNode#end_keyword_loc */
1316
+ pm_location_t end_keyword_loc;
1317
+ } pm_begin_node_t;
1318
+
1319
+ /**
1320
+ * BlockArgumentNode
1321
+ *
1322
+ * Type: PM_BLOCK_ARGUMENT_NODE
1323
+ *
1324
+ * @extends pm_node_t
1325
+ */
1326
+ typedef struct pm_block_argument_node {
1327
+ /** The embedded base node. */
1328
+ pm_node_t base;
1329
+
1330
+ /** BlockArgumentNode#expression */
1331
+ struct pm_node *expression;
1332
+
1333
+ /** BlockArgumentNode#operator_loc */
1334
+ pm_location_t operator_loc;
1335
+ } pm_block_argument_node_t;
1336
+
1337
+ /**
1338
+ * BlockLocalVariableNode
1339
+ *
1340
+ * Type: PM_BLOCK_LOCAL_VARIABLE_NODE
1341
+ *
1342
+ * @extends pm_node_t
1343
+ */
1344
+ typedef struct pm_block_local_variable_node {
1345
+ /** The embedded base node. */
1346
+ pm_node_t base;
1347
+
1348
+ /** BlockLocalVariableNode#name */
1349
+ pm_constant_id_t name;
1350
+ } pm_block_local_variable_node_t;
1351
+
1352
+ /**
1353
+ * BlockNode
1354
+ *
1355
+ * Type: PM_BLOCK_NODE
1356
+ *
1357
+ * @extends pm_node_t
1358
+ */
1359
+ typedef struct pm_block_node {
1360
+ /** The embedded base node. */
1361
+ pm_node_t base;
1362
+
1363
+ /** BlockNode#locals */
1364
+ pm_constant_id_list_t locals;
1365
+
1366
+ /** BlockNode#locals_body_index */
1367
+ uint32_t locals_body_index;
1368
+
1369
+ /** BlockNode#parameters */
1370
+ struct pm_node *parameters;
1371
+
1372
+ /** BlockNode#body */
1373
+ struct pm_node *body;
1374
+
1375
+ /** BlockNode#opening_loc */
1376
+ pm_location_t opening_loc;
1377
+
1378
+ /** BlockNode#closing_loc */
1379
+ pm_location_t closing_loc;
1380
+ } pm_block_node_t;
1381
+
1382
+ /**
1383
+ * BlockParameterNode
1384
+ *
1385
+ * Type: PM_BLOCK_PARAMETER_NODE
1386
+ *
1387
+ * @extends pm_node_t
1388
+ */
1389
+ typedef struct pm_block_parameter_node {
1390
+ /** The embedded base node. */
1391
+ pm_node_t base;
1392
+
1393
+ /** BlockParameterNode#name */
1394
+ pm_constant_id_t name;
1395
+
1396
+ /** BlockParameterNode#name_loc */
1397
+ pm_location_t name_loc;
1398
+
1399
+ /** BlockParameterNode#operator_loc */
1400
+ pm_location_t operator_loc;
1401
+ } pm_block_parameter_node_t;
1402
+
1403
+ /**
1404
+ * BlockParametersNode
1405
+ *
1406
+ * Type: PM_BLOCK_PARAMETERS_NODE
1407
+ *
1408
+ * @extends pm_node_t
1409
+ */
1410
+ typedef struct pm_block_parameters_node {
1411
+ /** The embedded base node. */
1412
+ pm_node_t base;
1413
+
1414
+ /** BlockParametersNode#parameters */
1415
+ struct pm_parameters_node *parameters;
1416
+
1417
+ /** BlockParametersNode#locals */
1418
+ struct pm_node_list locals;
1419
+
1420
+ /** BlockParametersNode#opening_loc */
1421
+ pm_location_t opening_loc;
1422
+
1423
+ /** BlockParametersNode#closing_loc */
1424
+ pm_location_t closing_loc;
1425
+ } pm_block_parameters_node_t;
1426
+
1427
+ /**
1428
+ * BreakNode
1429
+ *
1430
+ * Type: PM_BREAK_NODE
1431
+ *
1432
+ * @extends pm_node_t
1433
+ */
1434
+ typedef struct pm_break_node {
1435
+ /** The embedded base node. */
1436
+ pm_node_t base;
1437
+
1438
+ /** BreakNode#arguments */
1439
+ struct pm_arguments_node *arguments;
1440
+
1441
+ /** BreakNode#keyword_loc */
1442
+ pm_location_t keyword_loc;
1443
+ } pm_break_node_t;
1444
+
1445
+ /**
1446
+ * CallAndWriteNode
1447
+ *
1448
+ * Type: PM_CALL_AND_WRITE_NODE
1449
+ * Flags:
1450
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1451
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1452
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1453
+ *
1454
+ * @extends pm_node_t
1455
+ */
1456
+ typedef struct pm_call_and_write_node {
1457
+ /** The embedded base node. */
1458
+ pm_node_t base;
1459
+
1460
+ /** CallAndWriteNode#receiver */
1461
+ struct pm_node *receiver;
1462
+
1463
+ /** CallAndWriteNode#call_operator_loc */
1464
+ pm_location_t call_operator_loc;
1465
+
1466
+ /** CallAndWriteNode#message_loc */
1467
+ pm_location_t message_loc;
1468
+
1469
+ /** CallAndWriteNode#read_name */
1470
+ pm_constant_id_t read_name;
1471
+
1472
+ /** CallAndWriteNode#write_name */
1473
+ pm_constant_id_t write_name;
1474
+
1475
+ /** CallAndWriteNode#operator_loc */
1476
+ pm_location_t operator_loc;
1477
+
1478
+ /** CallAndWriteNode#value */
1479
+ struct pm_node *value;
1480
+ } pm_call_and_write_node_t;
1481
+
1482
+ /**
1483
+ * CallNode
1484
+ *
1485
+ * Type: PM_CALL_NODE
1486
+ * Flags:
1487
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1488
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1489
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1490
+ *
1491
+ * @extends pm_node_t
1492
+ */
1493
+ typedef struct pm_call_node {
1494
+ /** The embedded base node. */
1495
+ pm_node_t base;
1496
+
1497
+ /** CallNode#receiver */
1498
+ struct pm_node *receiver;
1499
+
1500
+ /** CallNode#call_operator_loc */
1501
+ pm_location_t call_operator_loc;
1502
+
1503
+ /** CallNode#name */
1504
+ pm_constant_id_t name;
1505
+
1506
+ /** CallNode#message_loc */
1507
+ pm_location_t message_loc;
1508
+
1509
+ /** CallNode#opening_loc */
1510
+ pm_location_t opening_loc;
1511
+
1512
+ /** CallNode#arguments */
1513
+ struct pm_arguments_node *arguments;
1514
+
1515
+ /** CallNode#closing_loc */
1516
+ pm_location_t closing_loc;
1517
+
1518
+ /** CallNode#block */
1519
+ struct pm_node *block;
1520
+ } pm_call_node_t;
1521
+
1522
+ /**
1523
+ * CallOperatorWriteNode
1524
+ *
1525
+ * Type: PM_CALL_OPERATOR_WRITE_NODE
1526
+ * Flags:
1527
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1528
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1529
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1530
+ *
1531
+ * @extends pm_node_t
1532
+ */
1533
+ typedef struct pm_call_operator_write_node {
1534
+ /** The embedded base node. */
1535
+ pm_node_t base;
1536
+
1537
+ /** CallOperatorWriteNode#receiver */
1538
+ struct pm_node *receiver;
1539
+
1540
+ /** CallOperatorWriteNode#call_operator_loc */
1541
+ pm_location_t call_operator_loc;
1542
+
1543
+ /** CallOperatorWriteNode#message_loc */
1544
+ pm_location_t message_loc;
1545
+
1546
+ /** CallOperatorWriteNode#read_name */
1547
+ pm_constant_id_t read_name;
1548
+
1549
+ /** CallOperatorWriteNode#write_name */
1550
+ pm_constant_id_t write_name;
1551
+
1552
+ /** CallOperatorWriteNode#operator */
1553
+ pm_constant_id_t operator;
1554
+
1555
+ /** CallOperatorWriteNode#operator_loc */
1556
+ pm_location_t operator_loc;
1557
+
1558
+ /** CallOperatorWriteNode#value */
1559
+ struct pm_node *value;
1560
+ } pm_call_operator_write_node_t;
1561
+
1562
+ /**
1563
+ * CallOrWriteNode
1564
+ *
1565
+ * Type: PM_CALL_OR_WRITE_NODE
1566
+ * Flags:
1567
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1568
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1569
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1570
+ *
1571
+ * @extends pm_node_t
1572
+ */
1573
+ typedef struct pm_call_or_write_node {
1574
+ /** The embedded base node. */
1575
+ pm_node_t base;
1576
+
1577
+ /** CallOrWriteNode#receiver */
1578
+ struct pm_node *receiver;
1579
+
1580
+ /** CallOrWriteNode#call_operator_loc */
1581
+ pm_location_t call_operator_loc;
1582
+
1583
+ /** CallOrWriteNode#message_loc */
1584
+ pm_location_t message_loc;
1585
+
1586
+ /** CallOrWriteNode#read_name */
1587
+ pm_constant_id_t read_name;
1588
+
1589
+ /** CallOrWriteNode#write_name */
1590
+ pm_constant_id_t write_name;
1591
+
1592
+ /** CallOrWriteNode#operator_loc */
1593
+ pm_location_t operator_loc;
1594
+
1595
+ /** CallOrWriteNode#value */
1596
+ struct pm_node *value;
1597
+ } pm_call_or_write_node_t;
1598
+
1599
+ /**
1600
+ * CallTargetNode
1601
+ *
1602
+ * Type: PM_CALL_TARGET_NODE
1603
+ * Flags:
1604
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1605
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
1606
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1607
+ *
1608
+ * @extends pm_node_t
1609
+ */
1610
+ typedef struct pm_call_target_node {
1611
+ /** The embedded base node. */
1612
+ pm_node_t base;
1613
+
1614
+ /** CallTargetNode#receiver */
1615
+ struct pm_node *receiver;
1616
+
1617
+ /** CallTargetNode#call_operator_loc */
1618
+ pm_location_t call_operator_loc;
1619
+
1620
+ /** CallTargetNode#name */
1621
+ pm_constant_id_t name;
1622
+
1623
+ /** CallTargetNode#message_loc */
1624
+ pm_location_t message_loc;
1625
+ } pm_call_target_node_t;
1626
+
1627
+ /**
1628
+ * CapturePatternNode
1629
+ *
1630
+ * Type: PM_CAPTURE_PATTERN_NODE
1631
+ *
1632
+ * @extends pm_node_t
1633
+ */
1634
+ typedef struct pm_capture_pattern_node {
1635
+ /** The embedded base node. */
1636
+ pm_node_t base;
1637
+
1638
+ /** CapturePatternNode#value */
1639
+ struct pm_node *value;
1640
+
1641
+ /** CapturePatternNode#target */
1642
+ struct pm_node *target;
1643
+
1644
+ /** CapturePatternNode#operator_loc */
1645
+ pm_location_t operator_loc;
1646
+ } pm_capture_pattern_node_t;
1647
+
1648
+ /**
1649
+ * CaseMatchNode
1650
+ *
1651
+ * Type: PM_CASE_MATCH_NODE
1652
+ *
1653
+ * @extends pm_node_t
1654
+ */
1655
+ typedef struct pm_case_match_node {
1656
+ /** The embedded base node. */
1657
+ pm_node_t base;
1658
+
1659
+ /** CaseMatchNode#predicate */
1660
+ struct pm_node *predicate;
1661
+
1662
+ /** CaseMatchNode#conditions */
1663
+ struct pm_node_list conditions;
1664
+
1665
+ /** CaseMatchNode#consequent */
1666
+ struct pm_else_node *consequent;
1667
+
1668
+ /** CaseMatchNode#case_keyword_loc */
1669
+ pm_location_t case_keyword_loc;
1670
+
1671
+ /** CaseMatchNode#end_keyword_loc */
1672
+ pm_location_t end_keyword_loc;
1673
+ } pm_case_match_node_t;
1674
+
1675
+ /**
1676
+ * CaseNode
1677
+ *
1678
+ * Type: PM_CASE_NODE
1679
+ *
1680
+ * @extends pm_node_t
1681
+ */
1682
+ typedef struct pm_case_node {
1683
+ /** The embedded base node. */
1684
+ pm_node_t base;
1685
+
1686
+ /** CaseNode#predicate */
1687
+ struct pm_node *predicate;
1688
+
1689
+ /** CaseNode#conditions */
1690
+ struct pm_node_list conditions;
1691
+
1692
+ /** CaseNode#consequent */
1693
+ struct pm_else_node *consequent;
1694
+
1695
+ /** CaseNode#case_keyword_loc */
1696
+ pm_location_t case_keyword_loc;
1697
+
1698
+ /** CaseNode#end_keyword_loc */
1699
+ pm_location_t end_keyword_loc;
1700
+ } pm_case_node_t;
1701
+
1702
+ /**
1703
+ * ClassNode
1704
+ *
1705
+ * Type: PM_CLASS_NODE
1706
+ *
1707
+ * @extends pm_node_t
1708
+ */
1709
+ typedef struct pm_class_node {
1710
+ /** The embedded base node. */
1711
+ pm_node_t base;
1712
+
1713
+ /** ClassNode#locals */
1714
+ pm_constant_id_list_t locals;
1715
+
1716
+ /** ClassNode#class_keyword_loc */
1717
+ pm_location_t class_keyword_loc;
1718
+
1719
+ /** ClassNode#constant_path */
1720
+ struct pm_node *constant_path;
1721
+
1722
+ /** ClassNode#inheritance_operator_loc */
1723
+ pm_location_t inheritance_operator_loc;
1724
+
1725
+ /** ClassNode#superclass */
1726
+ struct pm_node *superclass;
1727
+
1728
+ /** ClassNode#body */
1729
+ struct pm_node *body;
1730
+
1731
+ /** ClassNode#end_keyword_loc */
1732
+ pm_location_t end_keyword_loc;
1733
+
1734
+ /** ClassNode#name */
1735
+ pm_constant_id_t name;
1736
+ } pm_class_node_t;
1737
+
1738
+ /**
1739
+ * ClassVariableAndWriteNode
1740
+ *
1741
+ * Type: PM_CLASS_VARIABLE_AND_WRITE_NODE
1742
+ *
1743
+ * @extends pm_node_t
1744
+ */
1745
+ typedef struct pm_class_variable_and_write_node {
1746
+ /** The embedded base node. */
1747
+ pm_node_t base;
1748
+
1749
+ /** ClassVariableAndWriteNode#name */
1750
+ pm_constant_id_t name;
1751
+
1752
+ /** ClassVariableAndWriteNode#name_loc */
1753
+ pm_location_t name_loc;
1754
+
1755
+ /** ClassVariableAndWriteNode#operator_loc */
1756
+ pm_location_t operator_loc;
1757
+
1758
+ /** ClassVariableAndWriteNode#value */
1759
+ struct pm_node *value;
1760
+ } pm_class_variable_and_write_node_t;
1761
+
1762
+ /**
1763
+ * ClassVariableOperatorWriteNode
1764
+ *
1765
+ * Type: PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE
1766
+ *
1767
+ * @extends pm_node_t
1768
+ */
1769
+ typedef struct pm_class_variable_operator_write_node {
1770
+ /** The embedded base node. */
1771
+ pm_node_t base;
1772
+
1773
+ /** ClassVariableOperatorWriteNode#name */
1774
+ pm_constant_id_t name;
1775
+
1776
+ /** ClassVariableOperatorWriteNode#name_loc */
1777
+ pm_location_t name_loc;
1778
+
1779
+ /** ClassVariableOperatorWriteNode#operator_loc */
1780
+ pm_location_t operator_loc;
1781
+
1782
+ /** ClassVariableOperatorWriteNode#value */
1783
+ struct pm_node *value;
1784
+
1785
+ /** ClassVariableOperatorWriteNode#operator */
1786
+ pm_constant_id_t operator;
1787
+ } pm_class_variable_operator_write_node_t;
1788
+
1789
+ /**
1790
+ * ClassVariableOrWriteNode
1791
+ *
1792
+ * Type: PM_CLASS_VARIABLE_OR_WRITE_NODE
1793
+ *
1794
+ * @extends pm_node_t
1795
+ */
1796
+ typedef struct pm_class_variable_or_write_node {
1797
+ /** The embedded base node. */
1798
+ pm_node_t base;
1799
+
1800
+ /** ClassVariableOrWriteNode#name */
1801
+ pm_constant_id_t name;
1802
+
1803
+ /** ClassVariableOrWriteNode#name_loc */
1804
+ pm_location_t name_loc;
1805
+
1806
+ /** ClassVariableOrWriteNode#operator_loc */
1807
+ pm_location_t operator_loc;
1808
+
1809
+ /** ClassVariableOrWriteNode#value */
1810
+ struct pm_node *value;
1811
+ } pm_class_variable_or_write_node_t;
1812
+
1813
+ /**
1814
+ * ClassVariableReadNode
1815
+ *
1816
+ * Type: PM_CLASS_VARIABLE_READ_NODE
1817
+ *
1818
+ * @extends pm_node_t
1819
+ */
1820
+ typedef struct pm_class_variable_read_node {
1821
+ /** The embedded base node. */
1822
+ pm_node_t base;
1823
+
1824
+ /** ClassVariableReadNode#name */
1825
+ pm_constant_id_t name;
1826
+ } pm_class_variable_read_node_t;
1827
+
1828
+ /**
1829
+ * ClassVariableTargetNode
1830
+ *
1831
+ * Type: PM_CLASS_VARIABLE_TARGET_NODE
1832
+ *
1833
+ * @extends pm_node_t
1834
+ */
1835
+ typedef struct pm_class_variable_target_node {
1836
+ /** The embedded base node. */
1837
+ pm_node_t base;
1838
+
1839
+ /** ClassVariableTargetNode#name */
1840
+ pm_constant_id_t name;
1841
+ } pm_class_variable_target_node_t;
1842
+
1843
+ /**
1844
+ * ClassVariableWriteNode
1845
+ *
1846
+ * Type: PM_CLASS_VARIABLE_WRITE_NODE
1847
+ *
1848
+ * @extends pm_node_t
1849
+ */
1850
+ typedef struct pm_class_variable_write_node {
1851
+ /** The embedded base node. */
1852
+ pm_node_t base;
1853
+
1854
+ /** ClassVariableWriteNode#name */
1855
+ pm_constant_id_t name;
1856
+
1857
+ /** ClassVariableWriteNode#name_loc */
1858
+ pm_location_t name_loc;
1859
+
1860
+ /** ClassVariableWriteNode#value */
1861
+ struct pm_node *value;
1862
+
1863
+ /** ClassVariableWriteNode#operator_loc */
1864
+ pm_location_t operator_loc;
1865
+ } pm_class_variable_write_node_t;
1866
+
1867
+ /**
1868
+ * ConstantAndWriteNode
1869
+ *
1870
+ * Type: PM_CONSTANT_AND_WRITE_NODE
1871
+ *
1872
+ * @extends pm_node_t
1873
+ */
1874
+ typedef struct pm_constant_and_write_node {
1875
+ /** The embedded base node. */
1876
+ pm_node_t base;
1877
+
1878
+ /** ConstantAndWriteNode#name */
1879
+ pm_constant_id_t name;
1880
+
1881
+ /** ConstantAndWriteNode#name_loc */
1882
+ pm_location_t name_loc;
1883
+
1884
+ /** ConstantAndWriteNode#operator_loc */
1885
+ pm_location_t operator_loc;
1886
+
1887
+ /** ConstantAndWriteNode#value */
1888
+ struct pm_node *value;
1889
+ } pm_constant_and_write_node_t;
1890
+
1891
+ /**
1892
+ * ConstantOperatorWriteNode
1893
+ *
1894
+ * Type: PM_CONSTANT_OPERATOR_WRITE_NODE
1895
+ *
1896
+ * @extends pm_node_t
1897
+ */
1898
+ typedef struct pm_constant_operator_write_node {
1899
+ /** The embedded base node. */
1900
+ pm_node_t base;
1901
+
1902
+ /** ConstantOperatorWriteNode#name */
1903
+ pm_constant_id_t name;
1904
+
1905
+ /** ConstantOperatorWriteNode#name_loc */
1906
+ pm_location_t name_loc;
1907
+
1908
+ /** ConstantOperatorWriteNode#operator_loc */
1909
+ pm_location_t operator_loc;
1910
+
1911
+ /** ConstantOperatorWriteNode#value */
1912
+ struct pm_node *value;
1913
+
1914
+ /** ConstantOperatorWriteNode#operator */
1915
+ pm_constant_id_t operator;
1916
+ } pm_constant_operator_write_node_t;
1917
+
1918
+ /**
1919
+ * ConstantOrWriteNode
1920
+ *
1921
+ * Type: PM_CONSTANT_OR_WRITE_NODE
1922
+ *
1923
+ * @extends pm_node_t
1924
+ */
1925
+ typedef struct pm_constant_or_write_node {
1926
+ /** The embedded base node. */
1927
+ pm_node_t base;
1928
+
1929
+ /** ConstantOrWriteNode#name */
1930
+ pm_constant_id_t name;
1931
+
1932
+ /** ConstantOrWriteNode#name_loc */
1933
+ pm_location_t name_loc;
1934
+
1935
+ /** ConstantOrWriteNode#operator_loc */
1936
+ pm_location_t operator_loc;
1937
+
1938
+ /** ConstantOrWriteNode#value */
1939
+ struct pm_node *value;
1940
+ } pm_constant_or_write_node_t;
1941
+
1942
+ /**
1943
+ * ConstantPathAndWriteNode
1944
+ *
1945
+ * Type: PM_CONSTANT_PATH_AND_WRITE_NODE
1946
+ *
1947
+ * @extends pm_node_t
1948
+ */
1949
+ typedef struct pm_constant_path_and_write_node {
1950
+ /** The embedded base node. */
1951
+ pm_node_t base;
1952
+
1953
+ /** ConstantPathAndWriteNode#target */
1954
+ struct pm_constant_path_node *target;
1955
+
1956
+ /** ConstantPathAndWriteNode#operator_loc */
1957
+ pm_location_t operator_loc;
1958
+
1959
+ /** ConstantPathAndWriteNode#value */
1960
+ struct pm_node *value;
1961
+ } pm_constant_path_and_write_node_t;
1962
+
1963
+ /**
1964
+ * ConstantPathNode
1965
+ *
1966
+ * Type: PM_CONSTANT_PATH_NODE
1967
+ *
1968
+ * @extends pm_node_t
1969
+ */
1970
+ typedef struct pm_constant_path_node {
1971
+ /** The embedded base node. */
1972
+ pm_node_t base;
1973
+
1974
+ /** ConstantPathNode#parent */
1975
+ struct pm_node *parent;
1976
+
1977
+ /** ConstantPathNode#child */
1978
+ struct pm_node *child;
1979
+
1980
+ /** ConstantPathNode#delimiter_loc */
1981
+ pm_location_t delimiter_loc;
1982
+ } pm_constant_path_node_t;
1983
+
1984
+ /**
1985
+ * ConstantPathOperatorWriteNode
1986
+ *
1987
+ * Type: PM_CONSTANT_PATH_OPERATOR_WRITE_NODE
1988
+ *
1989
+ * @extends pm_node_t
1990
+ */
1991
+ typedef struct pm_constant_path_operator_write_node {
1992
+ /** The embedded base node. */
1993
+ pm_node_t base;
1994
+
1995
+ /** ConstantPathOperatorWriteNode#target */
1996
+ struct pm_constant_path_node *target;
1997
+
1998
+ /** ConstantPathOperatorWriteNode#operator_loc */
1999
+ pm_location_t operator_loc;
2000
+
2001
+ /** ConstantPathOperatorWriteNode#value */
2002
+ struct pm_node *value;
2003
+
2004
+ /** ConstantPathOperatorWriteNode#operator */
2005
+ pm_constant_id_t operator;
2006
+ } pm_constant_path_operator_write_node_t;
2007
+
2008
+ /**
2009
+ * ConstantPathOrWriteNode
2010
+ *
2011
+ * Type: PM_CONSTANT_PATH_OR_WRITE_NODE
2012
+ *
2013
+ * @extends pm_node_t
2014
+ */
2015
+ typedef struct pm_constant_path_or_write_node {
2016
+ /** The embedded base node. */
2017
+ pm_node_t base;
2018
+
2019
+ /** ConstantPathOrWriteNode#target */
2020
+ struct pm_constant_path_node *target;
2021
+
2022
+ /** ConstantPathOrWriteNode#operator_loc */
2023
+ pm_location_t operator_loc;
2024
+
2025
+ /** ConstantPathOrWriteNode#value */
2026
+ struct pm_node *value;
2027
+ } pm_constant_path_or_write_node_t;
2028
+
2029
+ /**
2030
+ * ConstantPathTargetNode
2031
+ *
2032
+ * Type: PM_CONSTANT_PATH_TARGET_NODE
2033
+ *
2034
+ * @extends pm_node_t
2035
+ */
2036
+ typedef struct pm_constant_path_target_node {
2037
+ /** The embedded base node. */
2038
+ pm_node_t base;
2039
+
2040
+ /** ConstantPathTargetNode#parent */
2041
+ struct pm_node *parent;
2042
+
2043
+ /** ConstantPathTargetNode#child */
2044
+ struct pm_node *child;
2045
+
2046
+ /** ConstantPathTargetNode#delimiter_loc */
2047
+ pm_location_t delimiter_loc;
2048
+ } pm_constant_path_target_node_t;
2049
+
2050
+ /**
2051
+ * ConstantPathWriteNode
2052
+ *
2053
+ * Type: PM_CONSTANT_PATH_WRITE_NODE
2054
+ *
2055
+ * @extends pm_node_t
2056
+ */
2057
+ typedef struct pm_constant_path_write_node {
2058
+ /** The embedded base node. */
2059
+ pm_node_t base;
2060
+
2061
+ /** ConstantPathWriteNode#target */
2062
+ struct pm_constant_path_node *target;
2063
+
2064
+ /** ConstantPathWriteNode#operator_loc */
2065
+ pm_location_t operator_loc;
2066
+
2067
+ /** ConstantPathWriteNode#value */
2068
+ struct pm_node *value;
2069
+ } pm_constant_path_write_node_t;
2070
+
2071
+ /**
2072
+ * ConstantReadNode
2073
+ *
2074
+ * Type: PM_CONSTANT_READ_NODE
2075
+ *
2076
+ * @extends pm_node_t
2077
+ */
2078
+ typedef struct pm_constant_read_node {
2079
+ /** The embedded base node. */
2080
+ pm_node_t base;
2081
+
2082
+ /** ConstantReadNode#name */
2083
+ pm_constant_id_t name;
2084
+ } pm_constant_read_node_t;
2085
+
2086
+ /**
2087
+ * ConstantTargetNode
2088
+ *
2089
+ * Type: PM_CONSTANT_TARGET_NODE
2090
+ *
2091
+ * @extends pm_node_t
2092
+ */
2093
+ typedef struct pm_constant_target_node {
2094
+ /** The embedded base node. */
2095
+ pm_node_t base;
2096
+
2097
+ /** ConstantTargetNode#name */
2098
+ pm_constant_id_t name;
2099
+ } pm_constant_target_node_t;
2100
+
2101
+ /**
2102
+ * ConstantWriteNode
2103
+ *
2104
+ * Type: PM_CONSTANT_WRITE_NODE
2105
+ *
2106
+ * @extends pm_node_t
2107
+ */
2108
+ typedef struct pm_constant_write_node {
2109
+ /** The embedded base node. */
2110
+ pm_node_t base;
2111
+
2112
+ /** ConstantWriteNode#name */
2113
+ pm_constant_id_t name;
2114
+
2115
+ /** ConstantWriteNode#name_loc */
2116
+ pm_location_t name_loc;
2117
+
2118
+ /** ConstantWriteNode#value */
2119
+ struct pm_node *value;
2120
+
2121
+ /** ConstantWriteNode#operator_loc */
2122
+ pm_location_t operator_loc;
2123
+ } pm_constant_write_node_t;
2124
+
2125
+ /**
2126
+ * DefNode
2127
+ *
2128
+ * Type: PM_DEF_NODE
2129
+ *
2130
+ * @extends pm_node_t
2131
+ */
2132
+ typedef struct pm_def_node {
2133
+ /** The embedded base node. */
2134
+ pm_node_t base;
2135
+
2136
+ /** DefNode#name */
2137
+ pm_constant_id_t name;
2138
+
2139
+ /** DefNode#name_loc */
2140
+ pm_location_t name_loc;
2141
+
2142
+ /** DefNode#receiver */
2143
+ struct pm_node *receiver;
2144
+
2145
+ /** DefNode#parameters */
2146
+ struct pm_parameters_node *parameters;
2147
+
2148
+ /** DefNode#body */
2149
+ struct pm_node *body;
2150
+
2151
+ /** DefNode#locals */
2152
+ pm_constant_id_list_t locals;
2153
+
2154
+ /** DefNode#locals_body_index */
2155
+ uint32_t locals_body_index;
2156
+
2157
+ /** DefNode#def_keyword_loc */
2158
+ pm_location_t def_keyword_loc;
2159
+
2160
+ /** DefNode#operator_loc */
2161
+ pm_location_t operator_loc;
2162
+
2163
+ /** DefNode#lparen_loc */
2164
+ pm_location_t lparen_loc;
2165
+
2166
+ /** DefNode#rparen_loc */
2167
+ pm_location_t rparen_loc;
2168
+
2169
+ /** DefNode#equal_loc */
2170
+ pm_location_t equal_loc;
2171
+
2172
+ /** DefNode#end_keyword_loc */
2173
+ pm_location_t end_keyword_loc;
2174
+ } pm_def_node_t;
2175
+
2176
+ /**
2177
+ * DefinedNode
2178
+ *
2179
+ * Type: PM_DEFINED_NODE
2180
+ *
2181
+ * @extends pm_node_t
2182
+ */
2183
+ typedef struct pm_defined_node {
2184
+ /** The embedded base node. */
2185
+ pm_node_t base;
2186
+
2187
+ /** DefinedNode#lparen_loc */
2188
+ pm_location_t lparen_loc;
2189
+
2190
+ /** DefinedNode#value */
2191
+ struct pm_node *value;
2192
+
2193
+ /** DefinedNode#rparen_loc */
2194
+ pm_location_t rparen_loc;
2195
+
2196
+ /** DefinedNode#keyword_loc */
2197
+ pm_location_t keyword_loc;
2198
+ } pm_defined_node_t;
2199
+
2200
+ /**
2201
+ * ElseNode
2202
+ *
2203
+ * Type: PM_ELSE_NODE
2204
+ *
2205
+ * @extends pm_node_t
2206
+ */
2207
+ typedef struct pm_else_node {
2208
+ /** The embedded base node. */
2209
+ pm_node_t base;
2210
+
2211
+ /** ElseNode#else_keyword_loc */
2212
+ pm_location_t else_keyword_loc;
2213
+
2214
+ /** ElseNode#statements */
2215
+ struct pm_statements_node *statements;
2216
+
2217
+ /** ElseNode#end_keyword_loc */
2218
+ pm_location_t end_keyword_loc;
2219
+ } pm_else_node_t;
2220
+
2221
+ /**
2222
+ * EmbeddedStatementsNode
2223
+ *
2224
+ * Type: PM_EMBEDDED_STATEMENTS_NODE
2225
+ *
2226
+ * @extends pm_node_t
2227
+ */
2228
+ typedef struct pm_embedded_statements_node {
2229
+ /** The embedded base node. */
2230
+ pm_node_t base;
2231
+
2232
+ /** EmbeddedStatementsNode#opening_loc */
2233
+ pm_location_t opening_loc;
2234
+
2235
+ /** EmbeddedStatementsNode#statements */
2236
+ struct pm_statements_node *statements;
2237
+
2238
+ /** EmbeddedStatementsNode#closing_loc */
2239
+ pm_location_t closing_loc;
2240
+ } pm_embedded_statements_node_t;
2241
+
2242
+ /**
2243
+ * EmbeddedVariableNode
2244
+ *
2245
+ * Type: PM_EMBEDDED_VARIABLE_NODE
2246
+ *
2247
+ * @extends pm_node_t
2248
+ */
2249
+ typedef struct pm_embedded_variable_node {
2250
+ /** The embedded base node. */
2251
+ pm_node_t base;
2252
+
2253
+ /** EmbeddedVariableNode#operator_loc */
2254
+ pm_location_t operator_loc;
2255
+
2256
+ /** EmbeddedVariableNode#variable */
2257
+ struct pm_node *variable;
2258
+ } pm_embedded_variable_node_t;
2259
+
2260
+ /**
2261
+ * EnsureNode
2262
+ *
2263
+ * Type: PM_ENSURE_NODE
2264
+ *
2265
+ * @extends pm_node_t
2266
+ */
2267
+ typedef struct pm_ensure_node {
2268
+ /** The embedded base node. */
2269
+ pm_node_t base;
2270
+
2271
+ /** EnsureNode#ensure_keyword_loc */
2272
+ pm_location_t ensure_keyword_loc;
2273
+
2274
+ /** EnsureNode#statements */
2275
+ struct pm_statements_node *statements;
2276
+
2277
+ /** EnsureNode#end_keyword_loc */
2278
+ pm_location_t end_keyword_loc;
2279
+ } pm_ensure_node_t;
2280
+
2281
+ /**
2282
+ * FalseNode
2283
+ *
2284
+ * Type: PM_FALSE_NODE
2285
+ *
2286
+ * @extends pm_node_t
2287
+ */
2288
+ typedef struct pm_false_node {
2289
+ /** The embedded base node. */
2290
+ pm_node_t base;
2291
+ } pm_false_node_t;
2292
+
2293
+ /**
2294
+ * FindPatternNode
2295
+ *
2296
+ * Type: PM_FIND_PATTERN_NODE
2297
+ *
2298
+ * @extends pm_node_t
2299
+ */
2300
+ typedef struct pm_find_pattern_node {
2301
+ /** The embedded base node. */
2302
+ pm_node_t base;
2303
+
2304
+ /** FindPatternNode#constant */
2305
+ struct pm_node *constant;
2306
+
2307
+ /** FindPatternNode#left */
2308
+ struct pm_node *left;
2309
+
2310
+ /** FindPatternNode#requireds */
2311
+ struct pm_node_list requireds;
2312
+
2313
+ /** FindPatternNode#right */
2314
+ struct pm_node *right;
2315
+
2316
+ /** FindPatternNode#opening_loc */
2317
+ pm_location_t opening_loc;
2318
+
2319
+ /** FindPatternNode#closing_loc */
2320
+ pm_location_t closing_loc;
2321
+ } pm_find_pattern_node_t;
2322
+
2323
+ /**
2324
+ * FlipFlopNode
2325
+ *
2326
+ * Type: PM_FLIP_FLOP_NODE
2327
+ * Flags:
2328
+ * PM_RANGE_FLAGS_EXCLUDE_END
2329
+ *
2330
+ * @extends pm_node_t
2331
+ */
2332
+ typedef struct pm_flip_flop_node {
2333
+ /** The embedded base node. */
2334
+ pm_node_t base;
2335
+
2336
+ /** FlipFlopNode#left */
2337
+ struct pm_node *left;
2338
+
2339
+ /** FlipFlopNode#right */
2340
+ struct pm_node *right;
2341
+
2342
+ /** FlipFlopNode#operator_loc */
2343
+ pm_location_t operator_loc;
2344
+ } pm_flip_flop_node_t;
2345
+
2346
+ /**
2347
+ * FloatNode
2348
+ *
2349
+ * Type: PM_FLOAT_NODE
2350
+ *
2351
+ * @extends pm_node_t
2352
+ */
2353
+ typedef struct pm_float_node {
2354
+ /** The embedded base node. */
2355
+ pm_node_t base;
2356
+ } pm_float_node_t;
2357
+
2358
+ /**
2359
+ * ForNode
2360
+ *
2361
+ * Type: PM_FOR_NODE
2362
+ *
2363
+ * @extends pm_node_t
2364
+ */
2365
+ typedef struct pm_for_node {
2366
+ /** The embedded base node. */
2367
+ pm_node_t base;
2368
+
2369
+ /** ForNode#index */
2370
+ struct pm_node *index;
2371
+
2372
+ /** ForNode#collection */
2373
+ struct pm_node *collection;
2374
+
2375
+ /** ForNode#statements */
2376
+ struct pm_statements_node *statements;
2377
+
2378
+ /** ForNode#for_keyword_loc */
2379
+ pm_location_t for_keyword_loc;
2380
+
2381
+ /** ForNode#in_keyword_loc */
2382
+ pm_location_t in_keyword_loc;
2383
+
2384
+ /** ForNode#do_keyword_loc */
2385
+ pm_location_t do_keyword_loc;
2386
+
2387
+ /** ForNode#end_keyword_loc */
2388
+ pm_location_t end_keyword_loc;
2389
+ } pm_for_node_t;
2390
+
2391
+ /**
2392
+ * ForwardingArgumentsNode
2393
+ *
2394
+ * Type: PM_FORWARDING_ARGUMENTS_NODE
2395
+ *
2396
+ * @extends pm_node_t
2397
+ */
2398
+ typedef struct pm_forwarding_arguments_node {
2399
+ /** The embedded base node. */
2400
+ pm_node_t base;
2401
+ } pm_forwarding_arguments_node_t;
2402
+
2403
+ /**
2404
+ * ForwardingParameterNode
2405
+ *
2406
+ * Type: PM_FORWARDING_PARAMETER_NODE
2407
+ *
2408
+ * @extends pm_node_t
2409
+ */
2410
+ typedef struct pm_forwarding_parameter_node {
2411
+ /** The embedded base node. */
2412
+ pm_node_t base;
2413
+ } pm_forwarding_parameter_node_t;
2414
+
2415
+ /**
2416
+ * ForwardingSuperNode
2417
+ *
2418
+ * Type: PM_FORWARDING_SUPER_NODE
2419
+ *
2420
+ * @extends pm_node_t
2421
+ */
2422
+ typedef struct pm_forwarding_super_node {
2423
+ /** The embedded base node. */
2424
+ pm_node_t base;
2425
+
2426
+ /** ForwardingSuperNode#block */
2427
+ struct pm_block_node *block;
2428
+ } pm_forwarding_super_node_t;
2429
+
2430
+ /**
2431
+ * GlobalVariableAndWriteNode
2432
+ *
2433
+ * Type: PM_GLOBAL_VARIABLE_AND_WRITE_NODE
2434
+ *
2435
+ * @extends pm_node_t
2436
+ */
2437
+ typedef struct pm_global_variable_and_write_node {
2438
+ /** The embedded base node. */
2439
+ pm_node_t base;
2440
+
2441
+ /** GlobalVariableAndWriteNode#name */
2442
+ pm_constant_id_t name;
2443
+
2444
+ /** GlobalVariableAndWriteNode#name_loc */
2445
+ pm_location_t name_loc;
2446
+
2447
+ /** GlobalVariableAndWriteNode#operator_loc */
2448
+ pm_location_t operator_loc;
2449
+
2450
+ /** GlobalVariableAndWriteNode#value */
2451
+ struct pm_node *value;
2452
+ } pm_global_variable_and_write_node_t;
2453
+
2454
+ /**
2455
+ * GlobalVariableOperatorWriteNode
2456
+ *
2457
+ * Type: PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE
2458
+ *
2459
+ * @extends pm_node_t
2460
+ */
2461
+ typedef struct pm_global_variable_operator_write_node {
2462
+ /** The embedded base node. */
2463
+ pm_node_t base;
2464
+
2465
+ /** GlobalVariableOperatorWriteNode#name */
2466
+ pm_constant_id_t name;
2467
+
2468
+ /** GlobalVariableOperatorWriteNode#name_loc */
2469
+ pm_location_t name_loc;
2470
+
2471
+ /** GlobalVariableOperatorWriteNode#operator_loc */
2472
+ pm_location_t operator_loc;
2473
+
2474
+ /** GlobalVariableOperatorWriteNode#value */
2475
+ struct pm_node *value;
2476
+
2477
+ /** GlobalVariableOperatorWriteNode#operator */
2478
+ pm_constant_id_t operator;
2479
+ } pm_global_variable_operator_write_node_t;
2480
+
2481
+ /**
2482
+ * GlobalVariableOrWriteNode
2483
+ *
2484
+ * Type: PM_GLOBAL_VARIABLE_OR_WRITE_NODE
2485
+ *
2486
+ * @extends pm_node_t
2487
+ */
2488
+ typedef struct pm_global_variable_or_write_node {
2489
+ /** The embedded base node. */
2490
+ pm_node_t base;
2491
+
2492
+ /** GlobalVariableOrWriteNode#name */
2493
+ pm_constant_id_t name;
2494
+
2495
+ /** GlobalVariableOrWriteNode#name_loc */
2496
+ pm_location_t name_loc;
2497
+
2498
+ /** GlobalVariableOrWriteNode#operator_loc */
2499
+ pm_location_t operator_loc;
2500
+
2501
+ /** GlobalVariableOrWriteNode#value */
2502
+ struct pm_node *value;
2503
+ } pm_global_variable_or_write_node_t;
2504
+
2505
+ /**
2506
+ * GlobalVariableReadNode
2507
+ *
2508
+ * Type: PM_GLOBAL_VARIABLE_READ_NODE
2509
+ *
2510
+ * @extends pm_node_t
2511
+ */
2512
+ typedef struct pm_global_variable_read_node {
2513
+ /** The embedded base node. */
2514
+ pm_node_t base;
2515
+
2516
+ /** GlobalVariableReadNode#name */
2517
+ pm_constant_id_t name;
2518
+ } pm_global_variable_read_node_t;
2519
+
2520
+ /**
2521
+ * GlobalVariableTargetNode
2522
+ *
2523
+ * Type: PM_GLOBAL_VARIABLE_TARGET_NODE
2524
+ *
2525
+ * @extends pm_node_t
2526
+ */
2527
+ typedef struct pm_global_variable_target_node {
2528
+ /** The embedded base node. */
2529
+ pm_node_t base;
2530
+
2531
+ /** GlobalVariableTargetNode#name */
2532
+ pm_constant_id_t name;
2533
+ } pm_global_variable_target_node_t;
2534
+
2535
+ /**
2536
+ * GlobalVariableWriteNode
2537
+ *
2538
+ * Type: PM_GLOBAL_VARIABLE_WRITE_NODE
2539
+ *
2540
+ * @extends pm_node_t
2541
+ */
2542
+ typedef struct pm_global_variable_write_node {
2543
+ /** The embedded base node. */
2544
+ pm_node_t base;
2545
+
2546
+ /** GlobalVariableWriteNode#name */
2547
+ pm_constant_id_t name;
2548
+
2549
+ /** GlobalVariableWriteNode#name_loc */
2550
+ pm_location_t name_loc;
2551
+
2552
+ /** GlobalVariableWriteNode#value */
2553
+ struct pm_node *value;
2554
+
2555
+ /** GlobalVariableWriteNode#operator_loc */
2556
+ pm_location_t operator_loc;
2557
+ } pm_global_variable_write_node_t;
2558
+
2559
+ /**
2560
+ * HashNode
2561
+ *
2562
+ * Type: PM_HASH_NODE
2563
+ *
2564
+ * @extends pm_node_t
2565
+ */
2566
+ typedef struct pm_hash_node {
2567
+ /** The embedded base node. */
2568
+ pm_node_t base;
2569
+
2570
+ /** HashNode#opening_loc */
2571
+ pm_location_t opening_loc;
2572
+
2573
+ /** HashNode#elements */
2574
+ struct pm_node_list elements;
2575
+
2576
+ /** HashNode#closing_loc */
2577
+ pm_location_t closing_loc;
2578
+ } pm_hash_node_t;
2579
+
2580
+ /**
2581
+ * HashPatternNode
2582
+ *
2583
+ * Type: PM_HASH_PATTERN_NODE
2584
+ *
2585
+ * @extends pm_node_t
2586
+ */
2587
+ typedef struct pm_hash_pattern_node {
2588
+ /** The embedded base node. */
2589
+ pm_node_t base;
2590
+
2591
+ /** HashPatternNode#constant */
2592
+ struct pm_node *constant;
2593
+
2594
+ /** HashPatternNode#elements */
2595
+ struct pm_node_list elements;
2596
+
2597
+ /** HashPatternNode#rest */
2598
+ struct pm_node *rest;
2599
+
2600
+ /** HashPatternNode#opening_loc */
2601
+ pm_location_t opening_loc;
2602
+
2603
+ /** HashPatternNode#closing_loc */
2604
+ pm_location_t closing_loc;
2605
+ } pm_hash_pattern_node_t;
2606
+
2607
+ /**
2608
+ * IfNode
2609
+ *
2610
+ * Type: PM_IF_NODE
2611
+ *
2612
+ * @extends pm_node_t
2613
+ */
2614
+ typedef struct pm_if_node {
2615
+ /** The embedded base node. */
2616
+ pm_node_t base;
2617
+
2618
+ /** IfNode#if_keyword_loc */
2619
+ pm_location_t if_keyword_loc;
2620
+
2621
+ /** IfNode#predicate */
2622
+ struct pm_node *predicate;
2623
+
2624
+ /** IfNode#then_keyword_loc */
2625
+ pm_location_t then_keyword_loc;
2626
+
2627
+ /** IfNode#statements */
2628
+ struct pm_statements_node *statements;
2629
+
2630
+ /** IfNode#consequent */
2631
+ struct pm_node *consequent;
2632
+
2633
+ /** IfNode#end_keyword_loc */
2634
+ pm_location_t end_keyword_loc;
2635
+ } pm_if_node_t;
2636
+
2637
+ /**
2638
+ * ImaginaryNode
2639
+ *
2640
+ * Type: PM_IMAGINARY_NODE
2641
+ *
2642
+ * @extends pm_node_t
2643
+ */
2644
+ typedef struct pm_imaginary_node {
2645
+ /** The embedded base node. */
2646
+ pm_node_t base;
2647
+
2648
+ /** ImaginaryNode#numeric */
2649
+ struct pm_node *numeric;
2650
+ } pm_imaginary_node_t;
2651
+
2652
+ /**
2653
+ * ImplicitNode
2654
+ *
2655
+ * Type: PM_IMPLICIT_NODE
2656
+ *
2657
+ * @extends pm_node_t
2658
+ */
2659
+ typedef struct pm_implicit_node {
2660
+ /** The embedded base node. */
2661
+ pm_node_t base;
2662
+
2663
+ /** ImplicitNode#value */
2664
+ struct pm_node *value;
2665
+ } pm_implicit_node_t;
2666
+
2667
+ /**
2668
+ * ImplicitRestNode
2669
+ *
2670
+ * Type: PM_IMPLICIT_REST_NODE
2671
+ *
2672
+ * @extends pm_node_t
2673
+ */
2674
+ typedef struct pm_implicit_rest_node {
2675
+ /** The embedded base node. */
2676
+ pm_node_t base;
2677
+ } pm_implicit_rest_node_t;
2678
+
2679
+ /**
2680
+ * InNode
2681
+ *
2682
+ * Type: PM_IN_NODE
2683
+ *
2684
+ * @extends pm_node_t
2685
+ */
2686
+ typedef struct pm_in_node {
2687
+ /** The embedded base node. */
2688
+ pm_node_t base;
2689
+
2690
+ /** InNode#pattern */
2691
+ struct pm_node *pattern;
2692
+
2693
+ /** InNode#statements */
2694
+ struct pm_statements_node *statements;
2695
+
2696
+ /** InNode#in_loc */
2697
+ pm_location_t in_loc;
2698
+
2699
+ /** InNode#then_loc */
2700
+ pm_location_t then_loc;
2701
+ } pm_in_node_t;
2702
+
2703
+ /**
2704
+ * IndexAndWriteNode
2705
+ *
2706
+ * Type: PM_INDEX_AND_WRITE_NODE
2707
+ * Flags:
2708
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2709
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2710
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2711
+ *
2712
+ * @extends pm_node_t
2713
+ */
2714
+ typedef struct pm_index_and_write_node {
2715
+ /** The embedded base node. */
2716
+ pm_node_t base;
2717
+
2718
+ /** IndexAndWriteNode#receiver */
2719
+ struct pm_node *receiver;
2720
+
2721
+ /** IndexAndWriteNode#call_operator_loc */
2722
+ pm_location_t call_operator_loc;
2723
+
2724
+ /** IndexAndWriteNode#opening_loc */
2725
+ pm_location_t opening_loc;
2726
+
2727
+ /** IndexAndWriteNode#arguments */
2728
+ struct pm_arguments_node *arguments;
2729
+
2730
+ /** IndexAndWriteNode#closing_loc */
2731
+ pm_location_t closing_loc;
2732
+
2733
+ /** IndexAndWriteNode#block */
2734
+ struct pm_node *block;
2735
+
2736
+ /** IndexAndWriteNode#operator_loc */
2737
+ pm_location_t operator_loc;
2738
+
2739
+ /** IndexAndWriteNode#value */
2740
+ struct pm_node *value;
2741
+ } pm_index_and_write_node_t;
2742
+
2743
+ /**
2744
+ * IndexOperatorWriteNode
2745
+ *
2746
+ * Type: PM_INDEX_OPERATOR_WRITE_NODE
2747
+ * Flags:
2748
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2749
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2750
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2751
+ *
2752
+ * @extends pm_node_t
2753
+ */
2754
+ typedef struct pm_index_operator_write_node {
2755
+ /** The embedded base node. */
2756
+ pm_node_t base;
2757
+
2758
+ /** IndexOperatorWriteNode#receiver */
2759
+ struct pm_node *receiver;
2760
+
2761
+ /** IndexOperatorWriteNode#call_operator_loc */
2762
+ pm_location_t call_operator_loc;
2763
+
2764
+ /** IndexOperatorWriteNode#opening_loc */
2765
+ pm_location_t opening_loc;
2766
+
2767
+ /** IndexOperatorWriteNode#arguments */
2768
+ struct pm_arguments_node *arguments;
2769
+
2770
+ /** IndexOperatorWriteNode#closing_loc */
2771
+ pm_location_t closing_loc;
2772
+
2773
+ /** IndexOperatorWriteNode#block */
2774
+ struct pm_node *block;
2775
+
2776
+ /** IndexOperatorWriteNode#operator */
2777
+ pm_constant_id_t operator;
2778
+
2779
+ /** IndexOperatorWriteNode#operator_loc */
2780
+ pm_location_t operator_loc;
2781
+
2782
+ /** IndexOperatorWriteNode#value */
2783
+ struct pm_node *value;
2784
+ } pm_index_operator_write_node_t;
2785
+
2786
+ /**
2787
+ * IndexOrWriteNode
2788
+ *
2789
+ * Type: PM_INDEX_OR_WRITE_NODE
2790
+ * Flags:
2791
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2792
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2793
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2794
+ *
2795
+ * @extends pm_node_t
2796
+ */
2797
+ typedef struct pm_index_or_write_node {
2798
+ /** The embedded base node. */
2799
+ pm_node_t base;
2800
+
2801
+ /** IndexOrWriteNode#receiver */
2802
+ struct pm_node *receiver;
2803
+
2804
+ /** IndexOrWriteNode#call_operator_loc */
2805
+ pm_location_t call_operator_loc;
2806
+
2807
+ /** IndexOrWriteNode#opening_loc */
2808
+ pm_location_t opening_loc;
2809
+
2810
+ /** IndexOrWriteNode#arguments */
2811
+ struct pm_arguments_node *arguments;
2812
+
2813
+ /** IndexOrWriteNode#closing_loc */
2814
+ pm_location_t closing_loc;
2815
+
2816
+ /** IndexOrWriteNode#block */
2817
+ struct pm_node *block;
2818
+
2819
+ /** IndexOrWriteNode#operator_loc */
2820
+ pm_location_t operator_loc;
2821
+
2822
+ /** IndexOrWriteNode#value */
2823
+ struct pm_node *value;
2824
+ } pm_index_or_write_node_t;
2825
+
2826
+ /**
2827
+ * IndexTargetNode
2828
+ *
2829
+ * Type: PM_INDEX_TARGET_NODE
2830
+ * Flags:
2831
+ * PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
2832
+ * PM_CALL_NODE_FLAGS_VARIABLE_CALL
2833
+ * PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
2834
+ *
2835
+ * @extends pm_node_t
2836
+ */
2837
+ typedef struct pm_index_target_node {
2838
+ /** The embedded base node. */
2839
+ pm_node_t base;
2840
+
2841
+ /** IndexTargetNode#receiver */
2842
+ struct pm_node *receiver;
2843
+
2844
+ /** IndexTargetNode#opening_loc */
2845
+ pm_location_t opening_loc;
2846
+
2847
+ /** IndexTargetNode#arguments */
2848
+ struct pm_arguments_node *arguments;
2849
+
2850
+ /** IndexTargetNode#closing_loc */
2851
+ pm_location_t closing_loc;
2852
+
2853
+ /** IndexTargetNode#block */
2854
+ struct pm_node *block;
2855
+ } pm_index_target_node_t;
2856
+
2857
+ /**
2858
+ * InstanceVariableAndWriteNode
2859
+ *
2860
+ * Type: PM_INSTANCE_VARIABLE_AND_WRITE_NODE
2861
+ *
2862
+ * @extends pm_node_t
2863
+ */
2864
+ typedef struct pm_instance_variable_and_write_node {
2865
+ /** The embedded base node. */
2866
+ pm_node_t base;
2867
+
2868
+ /** InstanceVariableAndWriteNode#name */
2869
+ pm_constant_id_t name;
2870
+
2871
+ /** InstanceVariableAndWriteNode#name_loc */
2872
+ pm_location_t name_loc;
2873
+
2874
+ /** InstanceVariableAndWriteNode#operator_loc */
2875
+ pm_location_t operator_loc;
2876
+
2877
+ /** InstanceVariableAndWriteNode#value */
2878
+ struct pm_node *value;
2879
+ } pm_instance_variable_and_write_node_t;
2880
+
2881
+ /**
2882
+ * InstanceVariableOperatorWriteNode
2883
+ *
2884
+ * Type: PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE
2885
+ *
2886
+ * @extends pm_node_t
2887
+ */
2888
+ typedef struct pm_instance_variable_operator_write_node {
2889
+ /** The embedded base node. */
2890
+ pm_node_t base;
2891
+
2892
+ /** InstanceVariableOperatorWriteNode#name */
2893
+ pm_constant_id_t name;
2894
+
2895
+ /** InstanceVariableOperatorWriteNode#name_loc */
2896
+ pm_location_t name_loc;
2897
+
2898
+ /** InstanceVariableOperatorWriteNode#operator_loc */
2899
+ pm_location_t operator_loc;
2900
+
2901
+ /** InstanceVariableOperatorWriteNode#value */
2902
+ struct pm_node *value;
2903
+
2904
+ /** InstanceVariableOperatorWriteNode#operator */
2905
+ pm_constant_id_t operator;
2906
+ } pm_instance_variable_operator_write_node_t;
2907
+
2908
+ /**
2909
+ * InstanceVariableOrWriteNode
2910
+ *
2911
+ * Type: PM_INSTANCE_VARIABLE_OR_WRITE_NODE
2912
+ *
2913
+ * @extends pm_node_t
2914
+ */
2915
+ typedef struct pm_instance_variable_or_write_node {
2916
+ /** The embedded base node. */
2917
+ pm_node_t base;
2918
+
2919
+ /** InstanceVariableOrWriteNode#name */
2920
+ pm_constant_id_t name;
2921
+
2922
+ /** InstanceVariableOrWriteNode#name_loc */
2923
+ pm_location_t name_loc;
2924
+
2925
+ /** InstanceVariableOrWriteNode#operator_loc */
2926
+ pm_location_t operator_loc;
2927
+
2928
+ /** InstanceVariableOrWriteNode#value */
2929
+ struct pm_node *value;
2930
+ } pm_instance_variable_or_write_node_t;
2931
+
2932
+ /**
2933
+ * InstanceVariableReadNode
2934
+ *
2935
+ * Type: PM_INSTANCE_VARIABLE_READ_NODE
2936
+ *
2937
+ * @extends pm_node_t
2938
+ */
2939
+ typedef struct pm_instance_variable_read_node {
2940
+ /** The embedded base node. */
2941
+ pm_node_t base;
2942
+
2943
+ /** InstanceVariableReadNode#name */
2944
+ pm_constant_id_t name;
2945
+ } pm_instance_variable_read_node_t;
2946
+
2947
+ /**
2948
+ * InstanceVariableTargetNode
2949
+ *
2950
+ * Type: PM_INSTANCE_VARIABLE_TARGET_NODE
2951
+ *
2952
+ * @extends pm_node_t
2953
+ */
2954
+ typedef struct pm_instance_variable_target_node {
2955
+ /** The embedded base node. */
2956
+ pm_node_t base;
2957
+
2958
+ /** InstanceVariableTargetNode#name */
2959
+ pm_constant_id_t name;
2960
+ } pm_instance_variable_target_node_t;
2961
+
2962
+ /**
2963
+ * InstanceVariableWriteNode
2964
+ *
2965
+ * Type: PM_INSTANCE_VARIABLE_WRITE_NODE
2966
+ *
2967
+ * @extends pm_node_t
2968
+ */
2969
+ typedef struct pm_instance_variable_write_node {
2970
+ /** The embedded base node. */
2971
+ pm_node_t base;
2972
+
2973
+ /** InstanceVariableWriteNode#name */
2974
+ pm_constant_id_t name;
2975
+
2976
+ /** InstanceVariableWriteNode#name_loc */
2977
+ pm_location_t name_loc;
2978
+
2979
+ /** InstanceVariableWriteNode#value */
2980
+ struct pm_node *value;
2981
+
2982
+ /** InstanceVariableWriteNode#operator_loc */
2983
+ pm_location_t operator_loc;
2984
+ } pm_instance_variable_write_node_t;
2985
+
2986
+ /**
2987
+ * IntegerNode
2988
+ *
2989
+ * Type: PM_INTEGER_NODE
2990
+ * Flags:
2991
+ * PM_INTEGER_BASE_FLAGS_BINARY
2992
+ * PM_INTEGER_BASE_FLAGS_DECIMAL
2993
+ * PM_INTEGER_BASE_FLAGS_OCTAL
2994
+ * PM_INTEGER_BASE_FLAGS_HEXADECIMAL
2995
+ *
2996
+ * @extends pm_node_t
2997
+ */
2998
+ typedef struct pm_integer_node {
2999
+ /** The embedded base node. */
3000
+ pm_node_t base;
3001
+ } pm_integer_node_t;
3002
+
3003
+ /**
3004
+ * InterpolatedMatchLastLineNode
3005
+ *
3006
+ * Type: PM_INTERPOLATED_MATCH_LAST_LINE_NODE
3007
+ * Flags:
3008
+ * PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
3009
+ * PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
3010
+ * PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
3011
+ * PM_REGULAR_EXPRESSION_FLAGS_ONCE
3012
+ * PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
3013
+ * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
3014
+ * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
3015
+ * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3016
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3017
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3018
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
3019
+ *
3020
+ * @extends pm_node_t
3021
+ */
3022
+ typedef struct pm_interpolated_match_last_line_node {
3023
+ /** The embedded base node. */
3024
+ pm_node_t base;
3025
+
3026
+ /** InterpolatedMatchLastLineNode#opening_loc */
3027
+ pm_location_t opening_loc;
3028
+
3029
+ /** InterpolatedMatchLastLineNode#parts */
3030
+ struct pm_node_list parts;
3031
+
3032
+ /** InterpolatedMatchLastLineNode#closing_loc */
3033
+ pm_location_t closing_loc;
3034
+ } pm_interpolated_match_last_line_node_t;
3035
+
3036
+ /**
3037
+ * InterpolatedRegularExpressionNode
3038
+ *
3039
+ * Type: PM_INTERPOLATED_REGULAR_EXPRESSION_NODE
3040
+ * Flags:
3041
+ * PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
3042
+ * PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
3043
+ * PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
3044
+ * PM_REGULAR_EXPRESSION_FLAGS_ONCE
3045
+ * PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
3046
+ * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
3047
+ * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
3048
+ * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3049
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3050
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3051
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
3052
+ *
3053
+ * @extends pm_node_t
3054
+ */
3055
+ typedef struct pm_interpolated_regular_expression_node {
3056
+ /** The embedded base node. */
3057
+ pm_node_t base;
3058
+
3059
+ /** InterpolatedRegularExpressionNode#opening_loc */
3060
+ pm_location_t opening_loc;
3061
+
3062
+ /** InterpolatedRegularExpressionNode#parts */
3063
+ struct pm_node_list parts;
3064
+
3065
+ /** InterpolatedRegularExpressionNode#closing_loc */
3066
+ pm_location_t closing_loc;
3067
+ } pm_interpolated_regular_expression_node_t;
3068
+
3069
+ /**
3070
+ * InterpolatedStringNode
3071
+ *
3072
+ * Type: PM_INTERPOLATED_STRING_NODE
3073
+ *
3074
+ * @extends pm_node_t
3075
+ */
3076
+ typedef struct pm_interpolated_string_node {
3077
+ /** The embedded base node. */
3078
+ pm_node_t base;
3079
+
3080
+ /** InterpolatedStringNode#opening_loc */
3081
+ pm_location_t opening_loc;
3082
+
3083
+ /** InterpolatedStringNode#parts */
3084
+ struct pm_node_list parts;
3085
+
3086
+ /** InterpolatedStringNode#closing_loc */
3087
+ pm_location_t closing_loc;
3088
+ } pm_interpolated_string_node_t;
3089
+
3090
+ /**
3091
+ * InterpolatedSymbolNode
3092
+ *
3093
+ * Type: PM_INTERPOLATED_SYMBOL_NODE
3094
+ *
3095
+ * @extends pm_node_t
3096
+ */
3097
+ typedef struct pm_interpolated_symbol_node {
3098
+ /** The embedded base node. */
3099
+ pm_node_t base;
3100
+
3101
+ /** InterpolatedSymbolNode#opening_loc */
3102
+ pm_location_t opening_loc;
3103
+
3104
+ /** InterpolatedSymbolNode#parts */
3105
+ struct pm_node_list parts;
3106
+
3107
+ /** InterpolatedSymbolNode#closing_loc */
3108
+ pm_location_t closing_loc;
3109
+ } pm_interpolated_symbol_node_t;
3110
+
3111
+ /**
3112
+ * InterpolatedXStringNode
3113
+ *
3114
+ * Type: PM_INTERPOLATED_X_STRING_NODE
3115
+ *
3116
+ * @extends pm_node_t
3117
+ */
3118
+ typedef struct pm_interpolated_x_string_node {
3119
+ /** The embedded base node. */
3120
+ pm_node_t base;
3121
+
3122
+ /** InterpolatedXStringNode#opening_loc */
3123
+ pm_location_t opening_loc;
3124
+
3125
+ /** InterpolatedXStringNode#parts */
3126
+ struct pm_node_list parts;
3127
+
3128
+ /** InterpolatedXStringNode#closing_loc */
3129
+ pm_location_t closing_loc;
3130
+ } pm_interpolated_x_string_node_t;
3131
+
3132
+ /**
3133
+ * KeywordHashNode
3134
+ *
3135
+ * Type: PM_KEYWORD_HASH_NODE
3136
+ * Flags:
3137
+ * PM_KEYWORD_HASH_NODE_FLAGS_STATIC_KEYS
3138
+ *
3139
+ * @extends pm_node_t
3140
+ */
3141
+ typedef struct pm_keyword_hash_node {
3142
+ /** The embedded base node. */
3143
+ pm_node_t base;
3144
+
3145
+ /** KeywordHashNode#elements */
3146
+ struct pm_node_list elements;
3147
+ } pm_keyword_hash_node_t;
3148
+
3149
+ /**
3150
+ * KeywordRestParameterNode
3151
+ *
3152
+ * Type: PM_KEYWORD_REST_PARAMETER_NODE
3153
+ *
3154
+ * @extends pm_node_t
3155
+ */
3156
+ typedef struct pm_keyword_rest_parameter_node {
3157
+ /** The embedded base node. */
3158
+ pm_node_t base;
3159
+
3160
+ /** KeywordRestParameterNode#name */
3161
+ pm_constant_id_t name;
3162
+
3163
+ /** KeywordRestParameterNode#name_loc */
3164
+ pm_location_t name_loc;
3165
+
3166
+ /** KeywordRestParameterNode#operator_loc */
3167
+ pm_location_t operator_loc;
3168
+ } pm_keyword_rest_parameter_node_t;
3169
+
3170
+ /**
3171
+ * LambdaNode
3172
+ *
3173
+ * Type: PM_LAMBDA_NODE
3174
+ *
3175
+ * @extends pm_node_t
3176
+ */
3177
+ typedef struct pm_lambda_node {
3178
+ /** The embedded base node. */
3179
+ pm_node_t base;
3180
+
3181
+ /** LambdaNode#locals */
3182
+ pm_constant_id_list_t locals;
3183
+
3184
+ /** LambdaNode#locals_body_index */
3185
+ uint32_t locals_body_index;
3186
+
3187
+ /** LambdaNode#operator_loc */
3188
+ pm_location_t operator_loc;
3189
+
3190
+ /** LambdaNode#opening_loc */
3191
+ pm_location_t opening_loc;
3192
+
3193
+ /** LambdaNode#closing_loc */
3194
+ pm_location_t closing_loc;
3195
+
3196
+ /** LambdaNode#parameters */
3197
+ struct pm_node *parameters;
3198
+
3199
+ /** LambdaNode#body */
3200
+ struct pm_node *body;
3201
+ } pm_lambda_node_t;
3202
+
3203
+ /**
3204
+ * LocalVariableAndWriteNode
3205
+ *
3206
+ * Type: PM_LOCAL_VARIABLE_AND_WRITE_NODE
3207
+ *
3208
+ * @extends pm_node_t
3209
+ */
3210
+ typedef struct pm_local_variable_and_write_node {
3211
+ /** The embedded base node. */
3212
+ pm_node_t base;
3213
+
3214
+ /** LocalVariableAndWriteNode#name_loc */
3215
+ pm_location_t name_loc;
3216
+
3217
+ /** LocalVariableAndWriteNode#operator_loc */
3218
+ pm_location_t operator_loc;
3219
+
3220
+ /** LocalVariableAndWriteNode#value */
3221
+ struct pm_node *value;
3222
+
3223
+ /** LocalVariableAndWriteNode#name */
3224
+ pm_constant_id_t name;
3225
+
3226
+ /** LocalVariableAndWriteNode#depth */
3227
+ uint32_t depth;
3228
+ } pm_local_variable_and_write_node_t;
3229
+
3230
+ /**
3231
+ * LocalVariableOperatorWriteNode
3232
+ *
3233
+ * Type: PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE
3234
+ *
3235
+ * @extends pm_node_t
3236
+ */
3237
+ typedef struct pm_local_variable_operator_write_node {
3238
+ /** The embedded base node. */
3239
+ pm_node_t base;
3240
+
3241
+ /** LocalVariableOperatorWriteNode#name_loc */
3242
+ pm_location_t name_loc;
3243
+
3244
+ /** LocalVariableOperatorWriteNode#operator_loc */
3245
+ pm_location_t operator_loc;
3246
+
3247
+ /** LocalVariableOperatorWriteNode#value */
3248
+ struct pm_node *value;
3249
+
3250
+ /** LocalVariableOperatorWriteNode#name */
3251
+ pm_constant_id_t name;
3252
+
3253
+ /** LocalVariableOperatorWriteNode#operator */
3254
+ pm_constant_id_t operator;
3255
+
3256
+ /** LocalVariableOperatorWriteNode#depth */
3257
+ uint32_t depth;
3258
+ } pm_local_variable_operator_write_node_t;
3259
+
3260
+ /**
3261
+ * LocalVariableOrWriteNode
3262
+ *
3263
+ * Type: PM_LOCAL_VARIABLE_OR_WRITE_NODE
3264
+ *
3265
+ * @extends pm_node_t
3266
+ */
3267
+ typedef struct pm_local_variable_or_write_node {
3268
+ /** The embedded base node. */
3269
+ pm_node_t base;
3270
+
3271
+ /** LocalVariableOrWriteNode#name_loc */
3272
+ pm_location_t name_loc;
3273
+
3274
+ /** LocalVariableOrWriteNode#operator_loc */
3275
+ pm_location_t operator_loc;
3276
+
3277
+ /** LocalVariableOrWriteNode#value */
3278
+ struct pm_node *value;
3279
+
3280
+ /** LocalVariableOrWriteNode#name */
3281
+ pm_constant_id_t name;
3282
+
3283
+ /** LocalVariableOrWriteNode#depth */
3284
+ uint32_t depth;
3285
+ } pm_local_variable_or_write_node_t;
3286
+
3287
+ /**
3288
+ * LocalVariableReadNode
3289
+ *
3290
+ * Type: PM_LOCAL_VARIABLE_READ_NODE
3291
+ *
3292
+ * @extends pm_node_t
3293
+ */
3294
+ typedef struct pm_local_variable_read_node {
3295
+ /** The embedded base node. */
3296
+ pm_node_t base;
3297
+
3298
+ /** LocalVariableReadNode#name */
3299
+ pm_constant_id_t name;
3300
+
3301
+ /** LocalVariableReadNode#depth */
3302
+ uint32_t depth;
3303
+ } pm_local_variable_read_node_t;
3304
+
3305
+ /**
3306
+ * LocalVariableTargetNode
3307
+ *
3308
+ * Type: PM_LOCAL_VARIABLE_TARGET_NODE
3309
+ *
3310
+ * @extends pm_node_t
3311
+ */
3312
+ typedef struct pm_local_variable_target_node {
3313
+ /** The embedded base node. */
3314
+ pm_node_t base;
3315
+
3316
+ /** LocalVariableTargetNode#name */
3317
+ pm_constant_id_t name;
3318
+
3319
+ /** LocalVariableTargetNode#depth */
3320
+ uint32_t depth;
3321
+ } pm_local_variable_target_node_t;
3322
+
3323
+ /**
3324
+ * LocalVariableWriteNode
3325
+ *
3326
+ * Type: PM_LOCAL_VARIABLE_WRITE_NODE
3327
+ *
3328
+ * @extends pm_node_t
3329
+ */
3330
+ typedef struct pm_local_variable_write_node {
3331
+ /** The embedded base node. */
3332
+ pm_node_t base;
3333
+
3334
+ /** LocalVariableWriteNode#name */
3335
+ pm_constant_id_t name;
3336
+
3337
+ /** LocalVariableWriteNode#depth */
3338
+ uint32_t depth;
3339
+
3340
+ /** LocalVariableWriteNode#name_loc */
3341
+ pm_location_t name_loc;
3342
+
3343
+ /** LocalVariableWriteNode#value */
3344
+ struct pm_node *value;
3345
+
3346
+ /** LocalVariableWriteNode#operator_loc */
3347
+ pm_location_t operator_loc;
3348
+ } pm_local_variable_write_node_t;
3349
+
3350
+ /**
3351
+ * MatchLastLineNode
3352
+ *
3353
+ * Type: PM_MATCH_LAST_LINE_NODE
3354
+ * Flags:
3355
+ * PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
3356
+ * PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
3357
+ * PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
3358
+ * PM_REGULAR_EXPRESSION_FLAGS_ONCE
3359
+ * PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
3360
+ * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
3361
+ * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
3362
+ * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3363
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3364
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3365
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
3366
+ *
3367
+ * @extends pm_node_t
3368
+ */
3369
+ typedef struct pm_match_last_line_node {
3370
+ /** The embedded base node. */
3371
+ pm_node_t base;
3372
+
3373
+ /** MatchLastLineNode#opening_loc */
3374
+ pm_location_t opening_loc;
3375
+
3376
+ /** MatchLastLineNode#content_loc */
3377
+ pm_location_t content_loc;
3378
+
3379
+ /** MatchLastLineNode#closing_loc */
3380
+ pm_location_t closing_loc;
3381
+
3382
+ /** MatchLastLineNode#unescaped */
3383
+ pm_string_t unescaped;
3384
+ } pm_match_last_line_node_t;
3385
+
3386
+ /**
3387
+ * MatchPredicateNode
3388
+ *
3389
+ * Type: PM_MATCH_PREDICATE_NODE
3390
+ *
3391
+ * @extends pm_node_t
3392
+ */
3393
+ typedef struct pm_match_predicate_node {
3394
+ /** The embedded base node. */
3395
+ pm_node_t base;
3396
+
3397
+ /** MatchPredicateNode#value */
3398
+ struct pm_node *value;
3399
+
3400
+ /** MatchPredicateNode#pattern */
3401
+ struct pm_node *pattern;
3402
+
3403
+ /** MatchPredicateNode#operator_loc */
3404
+ pm_location_t operator_loc;
3405
+ } pm_match_predicate_node_t;
3406
+
3407
+ /**
3408
+ * MatchRequiredNode
3409
+ *
3410
+ * Type: PM_MATCH_REQUIRED_NODE
3411
+ *
3412
+ * @extends pm_node_t
3413
+ */
3414
+ typedef struct pm_match_required_node {
3415
+ /** The embedded base node. */
3416
+ pm_node_t base;
3417
+
3418
+ /** MatchRequiredNode#value */
3419
+ struct pm_node *value;
3420
+
3421
+ /** MatchRequiredNode#pattern */
3422
+ struct pm_node *pattern;
3423
+
3424
+ /** MatchRequiredNode#operator_loc */
3425
+ pm_location_t operator_loc;
3426
+ } pm_match_required_node_t;
3427
+
3428
+ /**
3429
+ * MatchWriteNode
3430
+ *
3431
+ * Type: PM_MATCH_WRITE_NODE
3432
+ *
3433
+ * @extends pm_node_t
3434
+ */
3435
+ typedef struct pm_match_write_node {
3436
+ /** The embedded base node. */
3437
+ pm_node_t base;
3438
+
3439
+ /** MatchWriteNode#call */
3440
+ struct pm_call_node *call;
3441
+
3442
+ /** MatchWriteNode#targets */
3443
+ struct pm_node_list targets;
3444
+ } pm_match_write_node_t;
3445
+
3446
+ /**
3447
+ * MissingNode
3448
+ *
3449
+ * Type: PM_MISSING_NODE
3450
+ *
3451
+ * @extends pm_node_t
3452
+ */
3453
+ typedef struct pm_missing_node {
3454
+ /** The embedded base node. */
3455
+ pm_node_t base;
3456
+ } pm_missing_node_t;
3457
+
3458
+ /**
3459
+ * ModuleNode
3460
+ *
3461
+ * Type: PM_MODULE_NODE
3462
+ *
3463
+ * @extends pm_node_t
3464
+ */
3465
+ typedef struct pm_module_node {
3466
+ /** The embedded base node. */
3467
+ pm_node_t base;
3468
+
3469
+ /** ModuleNode#locals */
3470
+ pm_constant_id_list_t locals;
3471
+
3472
+ /** ModuleNode#module_keyword_loc */
3473
+ pm_location_t module_keyword_loc;
3474
+
3475
+ /** ModuleNode#constant_path */
3476
+ struct pm_node *constant_path;
3477
+
3478
+ /** ModuleNode#body */
3479
+ struct pm_node *body;
3480
+
3481
+ /** ModuleNode#end_keyword_loc */
3482
+ pm_location_t end_keyword_loc;
3483
+
3484
+ /** ModuleNode#name */
3485
+ pm_constant_id_t name;
3486
+ } pm_module_node_t;
3487
+
3488
+ /**
3489
+ * MultiTargetNode
3490
+ *
3491
+ * Type: PM_MULTI_TARGET_NODE
3492
+ *
3493
+ * @extends pm_node_t
3494
+ */
3495
+ typedef struct pm_multi_target_node {
3496
+ /** The embedded base node. */
3497
+ pm_node_t base;
3498
+
3499
+ /** MultiTargetNode#lefts */
3500
+ struct pm_node_list lefts;
3501
+
3502
+ /** MultiTargetNode#rest */
3503
+ struct pm_node *rest;
3504
+
3505
+ /** MultiTargetNode#rights */
3506
+ struct pm_node_list rights;
3507
+
3508
+ /** MultiTargetNode#lparen_loc */
3509
+ pm_location_t lparen_loc;
3510
+
3511
+ /** MultiTargetNode#rparen_loc */
3512
+ pm_location_t rparen_loc;
3513
+ } pm_multi_target_node_t;
3514
+
3515
+ /**
3516
+ * MultiWriteNode
3517
+ *
3518
+ * Type: PM_MULTI_WRITE_NODE
3519
+ *
3520
+ * @extends pm_node_t
3521
+ */
3522
+ typedef struct pm_multi_write_node {
3523
+ /** The embedded base node. */
3524
+ pm_node_t base;
3525
+
3526
+ /** MultiWriteNode#lefts */
3527
+ struct pm_node_list lefts;
3528
+
3529
+ /** MultiWriteNode#rest */
3530
+ struct pm_node *rest;
3531
+
3532
+ /** MultiWriteNode#rights */
3533
+ struct pm_node_list rights;
3534
+
3535
+ /** MultiWriteNode#lparen_loc */
3536
+ pm_location_t lparen_loc;
3537
+
3538
+ /** MultiWriteNode#rparen_loc */
3539
+ pm_location_t rparen_loc;
3540
+
3541
+ /** MultiWriteNode#operator_loc */
3542
+ pm_location_t operator_loc;
3543
+
3544
+ /** MultiWriteNode#value */
3545
+ struct pm_node *value;
3546
+ } pm_multi_write_node_t;
3547
+
3548
+ /**
3549
+ * NextNode
3550
+ *
3551
+ * Type: PM_NEXT_NODE
3552
+ *
3553
+ * @extends pm_node_t
3554
+ */
3555
+ typedef struct pm_next_node {
3556
+ /** The embedded base node. */
3557
+ pm_node_t base;
3558
+
3559
+ /** NextNode#arguments */
3560
+ struct pm_arguments_node *arguments;
3561
+
3562
+ /** NextNode#keyword_loc */
3563
+ pm_location_t keyword_loc;
3564
+ } pm_next_node_t;
3565
+
3566
+ /**
3567
+ * NilNode
3568
+ *
3569
+ * Type: PM_NIL_NODE
3570
+ *
3571
+ * @extends pm_node_t
3572
+ */
3573
+ typedef struct pm_nil_node {
3574
+ /** The embedded base node. */
3575
+ pm_node_t base;
3576
+ } pm_nil_node_t;
3577
+
3578
+ /**
3579
+ * NoKeywordsParameterNode
3580
+ *
3581
+ * Type: PM_NO_KEYWORDS_PARAMETER_NODE
3582
+ *
3583
+ * @extends pm_node_t
3584
+ */
3585
+ typedef struct pm_no_keywords_parameter_node {
3586
+ /** The embedded base node. */
3587
+ pm_node_t base;
3588
+
3589
+ /** NoKeywordsParameterNode#operator_loc */
3590
+ pm_location_t operator_loc;
3591
+
3592
+ /** NoKeywordsParameterNode#keyword_loc */
3593
+ pm_location_t keyword_loc;
3594
+ } pm_no_keywords_parameter_node_t;
3595
+
3596
+ /**
3597
+ * NumberedParametersNode
3598
+ *
3599
+ * Type: PM_NUMBERED_PARAMETERS_NODE
3600
+ *
3601
+ * @extends pm_node_t
3602
+ */
3603
+ typedef struct pm_numbered_parameters_node {
3604
+ /** The embedded base node. */
3605
+ pm_node_t base;
3606
+
3607
+ /** NumberedParametersNode#maximum */
3608
+ uint8_t maximum;
3609
+ } pm_numbered_parameters_node_t;
3610
+
3611
+ /**
3612
+ * NumberedReferenceReadNode
3613
+ *
3614
+ * Type: PM_NUMBERED_REFERENCE_READ_NODE
3615
+ *
3616
+ * @extends pm_node_t
3617
+ */
3618
+ typedef struct pm_numbered_reference_read_node {
3619
+ /** The embedded base node. */
3620
+ pm_node_t base;
3621
+
3622
+ /** NumberedReferenceReadNode#number */
3623
+ uint32_t number;
3624
+ } pm_numbered_reference_read_node_t;
3625
+
3626
+ /**
3627
+ * OptionalKeywordParameterNode
3628
+ *
3629
+ * Type: PM_OPTIONAL_KEYWORD_PARAMETER_NODE
3630
+ *
3631
+ * @extends pm_node_t
3632
+ */
3633
+ typedef struct pm_optional_keyword_parameter_node {
3634
+ /** The embedded base node. */
3635
+ pm_node_t base;
3636
+
3637
+ /** OptionalKeywordParameterNode#name */
3638
+ pm_constant_id_t name;
3639
+
3640
+ /** OptionalKeywordParameterNode#name_loc */
3641
+ pm_location_t name_loc;
3642
+
3643
+ /** OptionalKeywordParameterNode#value */
3644
+ struct pm_node *value;
3645
+ } pm_optional_keyword_parameter_node_t;
3646
+
3647
+ /**
3648
+ * OptionalParameterNode
3649
+ *
3650
+ * Type: PM_OPTIONAL_PARAMETER_NODE
3651
+ *
3652
+ * @extends pm_node_t
3653
+ */
3654
+ typedef struct pm_optional_parameter_node {
3655
+ /** The embedded base node. */
3656
+ pm_node_t base;
3657
+
3658
+ /** OptionalParameterNode#name */
3659
+ pm_constant_id_t name;
3660
+
3661
+ /** OptionalParameterNode#name_loc */
3662
+ pm_location_t name_loc;
3663
+
3664
+ /** OptionalParameterNode#operator_loc */
3665
+ pm_location_t operator_loc;
3666
+
3667
+ /** OptionalParameterNode#value */
3668
+ struct pm_node *value;
3669
+ } pm_optional_parameter_node_t;
3670
+
3671
+ /**
3672
+ * OrNode
3673
+ *
3674
+ * Type: PM_OR_NODE
3675
+ *
3676
+ * @extends pm_node_t
3677
+ */
3678
+ typedef struct pm_or_node {
3679
+ /** The embedded base node. */
3680
+ pm_node_t base;
3681
+
3682
+ /** OrNode#left */
3683
+ struct pm_node *left;
3684
+
3685
+ /** OrNode#right */
3686
+ struct pm_node *right;
3687
+
3688
+ /** OrNode#operator_loc */
3689
+ pm_location_t operator_loc;
3690
+ } pm_or_node_t;
3691
+
3692
+ /**
3693
+ * ParametersNode
3694
+ *
3695
+ * Type: PM_PARAMETERS_NODE
3696
+ *
3697
+ * @extends pm_node_t
3698
+ */
3699
+ typedef struct pm_parameters_node {
3700
+ /** The embedded base node. */
3701
+ pm_node_t base;
3702
+
3703
+ /** ParametersNode#requireds */
3704
+ struct pm_node_list requireds;
3705
+
3706
+ /** ParametersNode#optionals */
3707
+ struct pm_node_list optionals;
3708
+
3709
+ /** ParametersNode#rest */
3710
+ struct pm_node *rest;
3711
+
3712
+ /** ParametersNode#posts */
3713
+ struct pm_node_list posts;
3714
+
3715
+ /** ParametersNode#keywords */
3716
+ struct pm_node_list keywords;
3717
+
3718
+ /** ParametersNode#keyword_rest */
3719
+ struct pm_node *keyword_rest;
3720
+
3721
+ /** ParametersNode#block */
3722
+ struct pm_block_parameter_node *block;
3723
+ } pm_parameters_node_t;
3724
+
3725
+ /**
3726
+ * ParenthesesNode
3727
+ *
3728
+ * Type: PM_PARENTHESES_NODE
3729
+ *
3730
+ * @extends pm_node_t
3731
+ */
3732
+ typedef struct pm_parentheses_node {
3733
+ /** The embedded base node. */
3734
+ pm_node_t base;
3735
+
3736
+ /** ParenthesesNode#body */
3737
+ struct pm_node *body;
3738
+
3739
+ /** ParenthesesNode#opening_loc */
3740
+ pm_location_t opening_loc;
3741
+
3742
+ /** ParenthesesNode#closing_loc */
3743
+ pm_location_t closing_loc;
3744
+ } pm_parentheses_node_t;
3745
+
3746
+ /**
3747
+ * PinnedExpressionNode
3748
+ *
3749
+ * Type: PM_PINNED_EXPRESSION_NODE
3750
+ *
3751
+ * @extends pm_node_t
3752
+ */
3753
+ typedef struct pm_pinned_expression_node {
3754
+ /** The embedded base node. */
3755
+ pm_node_t base;
3756
+
3757
+ /** PinnedExpressionNode#expression */
3758
+ struct pm_node *expression;
3759
+
3760
+ /** PinnedExpressionNode#operator_loc */
3761
+ pm_location_t operator_loc;
3762
+
3763
+ /** PinnedExpressionNode#lparen_loc */
3764
+ pm_location_t lparen_loc;
3765
+
3766
+ /** PinnedExpressionNode#rparen_loc */
3767
+ pm_location_t rparen_loc;
3768
+ } pm_pinned_expression_node_t;
3769
+
3770
+ /**
3771
+ * PinnedVariableNode
3772
+ *
3773
+ * Type: PM_PINNED_VARIABLE_NODE
3774
+ *
3775
+ * @extends pm_node_t
3776
+ */
3777
+ typedef struct pm_pinned_variable_node {
3778
+ /** The embedded base node. */
3779
+ pm_node_t base;
3780
+
3781
+ /** PinnedVariableNode#variable */
3782
+ struct pm_node *variable;
3783
+
3784
+ /** PinnedVariableNode#operator_loc */
3785
+ pm_location_t operator_loc;
3786
+ } pm_pinned_variable_node_t;
3787
+
3788
+ /**
3789
+ * PostExecutionNode
3790
+ *
3791
+ * Type: PM_POST_EXECUTION_NODE
3792
+ *
3793
+ * @extends pm_node_t
3794
+ */
3795
+ typedef struct pm_post_execution_node {
3796
+ /** The embedded base node. */
3797
+ pm_node_t base;
3798
+
3799
+ /** PostExecutionNode#statements */
3800
+ struct pm_statements_node *statements;
3801
+
3802
+ /** PostExecutionNode#keyword_loc */
3803
+ pm_location_t keyword_loc;
3804
+
3805
+ /** PostExecutionNode#opening_loc */
3806
+ pm_location_t opening_loc;
3807
+
3808
+ /** PostExecutionNode#closing_loc */
3809
+ pm_location_t closing_loc;
3810
+ } pm_post_execution_node_t;
3811
+
3812
+ /**
3813
+ * PreExecutionNode
3814
+ *
3815
+ * Type: PM_PRE_EXECUTION_NODE
3816
+ *
3817
+ * @extends pm_node_t
3818
+ */
3819
+ typedef struct pm_pre_execution_node {
3820
+ /** The embedded base node. */
3821
+ pm_node_t base;
3822
+
3823
+ /** PreExecutionNode#statements */
3824
+ struct pm_statements_node *statements;
3825
+
3826
+ /** PreExecutionNode#keyword_loc */
3827
+ pm_location_t keyword_loc;
3828
+
3829
+ /** PreExecutionNode#opening_loc */
3830
+ pm_location_t opening_loc;
3831
+
3832
+ /** PreExecutionNode#closing_loc */
3833
+ pm_location_t closing_loc;
3834
+ } pm_pre_execution_node_t;
3835
+
3836
+ /**
3837
+ * ProgramNode
3838
+ *
3839
+ * Type: PM_PROGRAM_NODE
3840
+ *
3841
+ * @extends pm_node_t
3842
+ */
3843
+ typedef struct pm_program_node {
3844
+ /** The embedded base node. */
3845
+ pm_node_t base;
3846
+
3847
+ /** ProgramNode#locals */
3848
+ pm_constant_id_list_t locals;
3849
+
3850
+ /** ProgramNode#statements */
3851
+ struct pm_statements_node *statements;
3852
+ } pm_program_node_t;
3853
+
3854
+ /**
3855
+ * RangeNode
3856
+ *
3857
+ * Type: PM_RANGE_NODE
3858
+ * Flags:
3859
+ * PM_RANGE_FLAGS_EXCLUDE_END
3860
+ *
3861
+ * @extends pm_node_t
3862
+ */
3863
+ typedef struct pm_range_node {
3864
+ /** The embedded base node. */
3865
+ pm_node_t base;
3866
+
3867
+ /** RangeNode#left */
3868
+ struct pm_node *left;
3869
+
3870
+ /** RangeNode#right */
3871
+ struct pm_node *right;
3872
+
3873
+ /** RangeNode#operator_loc */
3874
+ pm_location_t operator_loc;
3875
+ } pm_range_node_t;
3876
+
3877
+ /**
3878
+ * RationalNode
3879
+ *
3880
+ * Type: PM_RATIONAL_NODE
3881
+ *
3882
+ * @extends pm_node_t
3883
+ */
3884
+ typedef struct pm_rational_node {
3885
+ /** The embedded base node. */
3886
+ pm_node_t base;
3887
+
3888
+ /** RationalNode#numeric */
3889
+ struct pm_node *numeric;
3890
+ } pm_rational_node_t;
3891
+
3892
+ /**
3893
+ * RedoNode
3894
+ *
3895
+ * Type: PM_REDO_NODE
3896
+ *
3897
+ * @extends pm_node_t
3898
+ */
3899
+ typedef struct pm_redo_node {
3900
+ /** The embedded base node. */
3901
+ pm_node_t base;
3902
+ } pm_redo_node_t;
3903
+
3904
+ /**
3905
+ * RegularExpressionNode
3906
+ *
3907
+ * Type: PM_REGULAR_EXPRESSION_NODE
3908
+ * Flags:
3909
+ * PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
3910
+ * PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
3911
+ * PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
3912
+ * PM_REGULAR_EXPRESSION_FLAGS_ONCE
3913
+ * PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
3914
+ * PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
3915
+ * PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
3916
+ * PM_REGULAR_EXPRESSION_FLAGS_UTF_8
3917
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
3918
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
3919
+ * PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
3920
+ *
3921
+ * @extends pm_node_t
3922
+ */
3923
+ typedef struct pm_regular_expression_node {
3924
+ /** The embedded base node. */
3925
+ pm_node_t base;
3926
+
3927
+ /** RegularExpressionNode#opening_loc */
3928
+ pm_location_t opening_loc;
3929
+
3930
+ /** RegularExpressionNode#content_loc */
3931
+ pm_location_t content_loc;
3932
+
3933
+ /** RegularExpressionNode#closing_loc */
3934
+ pm_location_t closing_loc;
3935
+
3936
+ /** RegularExpressionNode#unescaped */
3937
+ pm_string_t unescaped;
3938
+ } pm_regular_expression_node_t;
3939
+
3940
+ /**
3941
+ * RequiredKeywordParameterNode
3942
+ *
3943
+ * Type: PM_REQUIRED_KEYWORD_PARAMETER_NODE
3944
+ *
3945
+ * @extends pm_node_t
3946
+ */
3947
+ typedef struct pm_required_keyword_parameter_node {
3948
+ /** The embedded base node. */
3949
+ pm_node_t base;
3950
+
3951
+ /** RequiredKeywordParameterNode#name */
3952
+ pm_constant_id_t name;
3953
+
3954
+ /** RequiredKeywordParameterNode#name_loc */
3955
+ pm_location_t name_loc;
3956
+ } pm_required_keyword_parameter_node_t;
3957
+
3958
+ /**
3959
+ * RequiredParameterNode
3960
+ *
3961
+ * Type: PM_REQUIRED_PARAMETER_NODE
3962
+ *
3963
+ * @extends pm_node_t
3964
+ */
3965
+ typedef struct pm_required_parameter_node {
3966
+ /** The embedded base node. */
3967
+ pm_node_t base;
3968
+
3969
+ /** RequiredParameterNode#name */
3970
+ pm_constant_id_t name;
3971
+ } pm_required_parameter_node_t;
3972
+
3973
+ /**
3974
+ * RescueModifierNode
3975
+ *
3976
+ * Type: PM_RESCUE_MODIFIER_NODE
3977
+ *
3978
+ * @extends pm_node_t
3979
+ */
3980
+ typedef struct pm_rescue_modifier_node {
3981
+ /** The embedded base node. */
3982
+ pm_node_t base;
3983
+
3984
+ /** RescueModifierNode#expression */
3985
+ struct pm_node *expression;
3986
+
3987
+ /** RescueModifierNode#keyword_loc */
3988
+ pm_location_t keyword_loc;
3989
+
3990
+ /** RescueModifierNode#rescue_expression */
3991
+ struct pm_node *rescue_expression;
3992
+ } pm_rescue_modifier_node_t;
3993
+
3994
+ /**
3995
+ * RescueNode
3996
+ *
3997
+ * Type: PM_RESCUE_NODE
3998
+ *
3999
+ * @extends pm_node_t
4000
+ */
4001
+ typedef struct pm_rescue_node {
4002
+ /** The embedded base node. */
4003
+ pm_node_t base;
4004
+
4005
+ /** RescueNode#keyword_loc */
4006
+ pm_location_t keyword_loc;
4007
+
4008
+ /** RescueNode#exceptions */
4009
+ struct pm_node_list exceptions;
4010
+
4011
+ /** RescueNode#operator_loc */
4012
+ pm_location_t operator_loc;
4013
+
4014
+ /** RescueNode#reference */
4015
+ struct pm_node *reference;
4016
+
4017
+ /** RescueNode#statements */
4018
+ struct pm_statements_node *statements;
4019
+
4020
+ /** RescueNode#consequent */
4021
+ struct pm_rescue_node *consequent;
4022
+ } pm_rescue_node_t;
4023
+
4024
+ /**
4025
+ * RestParameterNode
4026
+ *
4027
+ * Type: PM_REST_PARAMETER_NODE
4028
+ *
4029
+ * @extends pm_node_t
4030
+ */
4031
+ typedef struct pm_rest_parameter_node {
4032
+ /** The embedded base node. */
4033
+ pm_node_t base;
4034
+
4035
+ /** RestParameterNode#name */
4036
+ pm_constant_id_t name;
4037
+
4038
+ /** RestParameterNode#name_loc */
4039
+ pm_location_t name_loc;
4040
+
4041
+ /** RestParameterNode#operator_loc */
4042
+ pm_location_t operator_loc;
4043
+ } pm_rest_parameter_node_t;
4044
+
4045
+ /**
4046
+ * RetryNode
4047
+ *
4048
+ * Type: PM_RETRY_NODE
4049
+ *
4050
+ * @extends pm_node_t
4051
+ */
4052
+ typedef struct pm_retry_node {
4053
+ /** The embedded base node. */
4054
+ pm_node_t base;
4055
+ } pm_retry_node_t;
4056
+
4057
+ /**
4058
+ * ReturnNode
4059
+ *
4060
+ * Type: PM_RETURN_NODE
4061
+ *
4062
+ * @extends pm_node_t
4063
+ */
4064
+ typedef struct pm_return_node {
4065
+ /** The embedded base node. */
4066
+ pm_node_t base;
4067
+
4068
+ /** ReturnNode#keyword_loc */
4069
+ pm_location_t keyword_loc;
4070
+
4071
+ /** ReturnNode#arguments */
4072
+ struct pm_arguments_node *arguments;
4073
+ } pm_return_node_t;
4074
+
4075
+ /**
4076
+ * SelfNode
4077
+ *
4078
+ * Type: PM_SELF_NODE
4079
+ *
4080
+ * @extends pm_node_t
4081
+ */
4082
+ typedef struct pm_self_node {
4083
+ /** The embedded base node. */
4084
+ pm_node_t base;
4085
+ } pm_self_node_t;
4086
+
4087
+ /**
4088
+ * SingletonClassNode
4089
+ *
4090
+ * Type: PM_SINGLETON_CLASS_NODE
4091
+ *
4092
+ * @extends pm_node_t
4093
+ */
4094
+ typedef struct pm_singleton_class_node {
4095
+ /** The embedded base node. */
4096
+ pm_node_t base;
4097
+
4098
+ /** SingletonClassNode#locals */
4099
+ pm_constant_id_list_t locals;
4100
+
4101
+ /** SingletonClassNode#class_keyword_loc */
4102
+ pm_location_t class_keyword_loc;
4103
+
4104
+ /** SingletonClassNode#operator_loc */
4105
+ pm_location_t operator_loc;
4106
+
4107
+ /** SingletonClassNode#expression */
4108
+ struct pm_node *expression;
4109
+
4110
+ /** SingletonClassNode#body */
4111
+ struct pm_node *body;
4112
+
4113
+ /** SingletonClassNode#end_keyword_loc */
4114
+ pm_location_t end_keyword_loc;
4115
+ } pm_singleton_class_node_t;
4116
+
4117
+ /**
4118
+ * SourceEncodingNode
4119
+ *
4120
+ * Type: PM_SOURCE_ENCODING_NODE
4121
+ *
4122
+ * @extends pm_node_t
4123
+ */
4124
+ typedef struct pm_source_encoding_node {
4125
+ /** The embedded base node. */
4126
+ pm_node_t base;
4127
+ } pm_source_encoding_node_t;
4128
+
4129
+ /**
4130
+ * SourceFileNode
4131
+ *
4132
+ * Type: PM_SOURCE_FILE_NODE
4133
+ *
4134
+ * @extends pm_node_t
4135
+ */
4136
+ typedef struct pm_source_file_node {
4137
+ /** The embedded base node. */
4138
+ pm_node_t base;
4139
+
4140
+ /** SourceFileNode#filepath */
4141
+ pm_string_t filepath;
4142
+ } pm_source_file_node_t;
4143
+
4144
+ /**
4145
+ * SourceLineNode
4146
+ *
4147
+ * Type: PM_SOURCE_LINE_NODE
4148
+ *
4149
+ * @extends pm_node_t
4150
+ */
4151
+ typedef struct pm_source_line_node {
4152
+ /** The embedded base node. */
4153
+ pm_node_t base;
4154
+ } pm_source_line_node_t;
4155
+
4156
+ /**
4157
+ * SplatNode
4158
+ *
4159
+ * Type: PM_SPLAT_NODE
4160
+ *
4161
+ * @extends pm_node_t
4162
+ */
4163
+ typedef struct pm_splat_node {
4164
+ /** The embedded base node. */
4165
+ pm_node_t base;
4166
+
4167
+ /** SplatNode#operator_loc */
4168
+ pm_location_t operator_loc;
4169
+
4170
+ /** SplatNode#expression */
4171
+ struct pm_node *expression;
4172
+ } pm_splat_node_t;
4173
+
4174
+ /**
4175
+ * StatementsNode
4176
+ *
4177
+ * Type: PM_STATEMENTS_NODE
4178
+ *
4179
+ * @extends pm_node_t
4180
+ */
4181
+ typedef struct pm_statements_node {
4182
+ /** The embedded base node. */
4183
+ pm_node_t base;
4184
+
4185
+ /** StatementsNode#body */
4186
+ struct pm_node_list body;
4187
+ } pm_statements_node_t;
4188
+
4189
+ /**
4190
+ * StringNode
4191
+ *
4192
+ * Type: PM_STRING_NODE
4193
+ * Flags:
4194
+ * PM_STRING_FLAGS_FORCED_UTF8_ENCODING
4195
+ * PM_STRING_FLAGS_FORCED_BINARY_ENCODING
4196
+ * PM_STRING_FLAGS_FROZEN
4197
+ *
4198
+ * @extends pm_node_t
4199
+ */
4200
+ typedef struct pm_string_node {
4201
+ /** The embedded base node. */
4202
+ pm_node_t base;
4203
+
4204
+ /** StringNode#opening_loc */
4205
+ pm_location_t opening_loc;
4206
+
4207
+ /** StringNode#content_loc */
4208
+ pm_location_t content_loc;
4209
+
4210
+ /** StringNode#closing_loc */
4211
+ pm_location_t closing_loc;
4212
+
4213
+ /** StringNode#unescaped */
4214
+ pm_string_t unescaped;
4215
+ } pm_string_node_t;
4216
+
4217
+ /**
4218
+ * SuperNode
4219
+ *
4220
+ * Type: PM_SUPER_NODE
4221
+ *
4222
+ * @extends pm_node_t
4223
+ */
4224
+ typedef struct pm_super_node {
4225
+ /** The embedded base node. */
4226
+ pm_node_t base;
4227
+
4228
+ /** SuperNode#keyword_loc */
4229
+ pm_location_t keyword_loc;
4230
+
4231
+ /** SuperNode#lparen_loc */
4232
+ pm_location_t lparen_loc;
4233
+
4234
+ /** SuperNode#arguments */
4235
+ struct pm_arguments_node *arguments;
4236
+
4237
+ /** SuperNode#rparen_loc */
4238
+ pm_location_t rparen_loc;
4239
+
4240
+ /** SuperNode#block */
4241
+ struct pm_node *block;
4242
+ } pm_super_node_t;
4243
+
4244
+ /**
4245
+ * SymbolNode
4246
+ *
4247
+ * Type: PM_SYMBOL_NODE
4248
+ * Flags:
4249
+ * PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING
4250
+ * PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING
4251
+ * PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING
4252
+ *
4253
+ * @extends pm_node_t
4254
+ */
4255
+ typedef struct pm_symbol_node {
4256
+ /** The embedded base node. */
4257
+ pm_node_t base;
4258
+
4259
+ /** SymbolNode#opening_loc */
4260
+ pm_location_t opening_loc;
4261
+
4262
+ /** SymbolNode#value_loc */
4263
+ pm_location_t value_loc;
4264
+
4265
+ /** SymbolNode#closing_loc */
4266
+ pm_location_t closing_loc;
4267
+
4268
+ /** SymbolNode#unescaped */
4269
+ pm_string_t unescaped;
4270
+ } pm_symbol_node_t;
4271
+
4272
+ /**
4273
+ * TrueNode
4274
+ *
4275
+ * Type: PM_TRUE_NODE
4276
+ *
4277
+ * @extends pm_node_t
4278
+ */
4279
+ typedef struct pm_true_node {
4280
+ /** The embedded base node. */
4281
+ pm_node_t base;
4282
+ } pm_true_node_t;
4283
+
4284
+ /**
4285
+ * UndefNode
4286
+ *
4287
+ * Type: PM_UNDEF_NODE
4288
+ *
4289
+ * @extends pm_node_t
4290
+ */
4291
+ typedef struct pm_undef_node {
4292
+ /** The embedded base node. */
4293
+ pm_node_t base;
4294
+
4295
+ /** UndefNode#names */
4296
+ struct pm_node_list names;
4297
+
4298
+ /** UndefNode#keyword_loc */
4299
+ pm_location_t keyword_loc;
4300
+ } pm_undef_node_t;
4301
+
4302
+ /**
4303
+ * UnlessNode
4304
+ *
4305
+ * Type: PM_UNLESS_NODE
4306
+ *
4307
+ * @extends pm_node_t
4308
+ */
4309
+ typedef struct pm_unless_node {
4310
+ /** The embedded base node. */
4311
+ pm_node_t base;
4312
+
4313
+ /** UnlessNode#keyword_loc */
4314
+ pm_location_t keyword_loc;
4315
+
4316
+ /** UnlessNode#predicate */
4317
+ struct pm_node *predicate;
4318
+
4319
+ /** UnlessNode#then_keyword_loc */
4320
+ pm_location_t then_keyword_loc;
4321
+
4322
+ /** UnlessNode#statements */
4323
+ struct pm_statements_node *statements;
4324
+
4325
+ /** UnlessNode#consequent */
4326
+ struct pm_else_node *consequent;
4327
+
4328
+ /** UnlessNode#end_keyword_loc */
4329
+ pm_location_t end_keyword_loc;
4330
+ } pm_unless_node_t;
4331
+
4332
+ /**
4333
+ * UntilNode
4334
+ *
4335
+ * Type: PM_UNTIL_NODE
4336
+ * Flags:
4337
+ * PM_LOOP_FLAGS_BEGIN_MODIFIER
4338
+ *
4339
+ * @extends pm_node_t
4340
+ */
4341
+ typedef struct pm_until_node {
4342
+ /** The embedded base node. */
4343
+ pm_node_t base;
4344
+
4345
+ /** UntilNode#keyword_loc */
4346
+ pm_location_t keyword_loc;
4347
+
4348
+ /** UntilNode#closing_loc */
4349
+ pm_location_t closing_loc;
4350
+
4351
+ /** UntilNode#predicate */
4352
+ struct pm_node *predicate;
4353
+
4354
+ /** UntilNode#statements */
4355
+ struct pm_statements_node *statements;
4356
+ } pm_until_node_t;
4357
+
4358
+ /**
4359
+ * WhenNode
4360
+ *
4361
+ * Type: PM_WHEN_NODE
4362
+ *
4363
+ * @extends pm_node_t
4364
+ */
4365
+ typedef struct pm_when_node {
4366
+ /** The embedded base node. */
4367
+ pm_node_t base;
4368
+
4369
+ /** WhenNode#keyword_loc */
4370
+ pm_location_t keyword_loc;
4371
+
4372
+ /** WhenNode#conditions */
4373
+ struct pm_node_list conditions;
4374
+
4375
+ /** WhenNode#statements */
4376
+ struct pm_statements_node *statements;
4377
+ } pm_when_node_t;
4378
+
4379
+ /**
4380
+ * WhileNode
4381
+ *
4382
+ * Type: PM_WHILE_NODE
4383
+ * Flags:
4384
+ * PM_LOOP_FLAGS_BEGIN_MODIFIER
4385
+ *
4386
+ * @extends pm_node_t
4387
+ */
4388
+ typedef struct pm_while_node {
4389
+ /** The embedded base node. */
4390
+ pm_node_t base;
4391
+
4392
+ /** WhileNode#keyword_loc */
4393
+ pm_location_t keyword_loc;
4394
+
4395
+ /** WhileNode#closing_loc */
4396
+ pm_location_t closing_loc;
4397
+
4398
+ /** WhileNode#predicate */
4399
+ struct pm_node *predicate;
4400
+
4401
+ /** WhileNode#statements */
4402
+ struct pm_statements_node *statements;
4403
+ } pm_while_node_t;
4404
+
4405
+ /**
4406
+ * XStringNode
4407
+ *
4408
+ * Type: PM_X_STRING_NODE
4409
+ * Flags:
4410
+ * PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING
4411
+ * PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING
4412
+ *
4413
+ * @extends pm_node_t
4414
+ */
4415
+ typedef struct pm_x_string_node {
4416
+ /** The embedded base node. */
4417
+ pm_node_t base;
4418
+
4419
+ /** XStringNode#opening_loc */
4420
+ pm_location_t opening_loc;
4421
+
4422
+ /** XStringNode#content_loc */
4423
+ pm_location_t content_loc;
4424
+
4425
+ /** XStringNode#closing_loc */
4426
+ pm_location_t closing_loc;
4427
+
4428
+ /** XStringNode#unescaped */
4429
+ pm_string_t unescaped;
4430
+ } pm_x_string_node_t;
4431
+
4432
+ /**
4433
+ * YieldNode
4434
+ *
4435
+ * Type: PM_YIELD_NODE
4436
+ *
4437
+ * @extends pm_node_t
4438
+ */
4439
+ typedef struct pm_yield_node {
4440
+ /** The embedded base node. */
4441
+ pm_node_t base;
4442
+
4443
+ /** YieldNode#keyword_loc */
4444
+ pm_location_t keyword_loc;
4445
+
4446
+ /** YieldNode#lparen_loc */
4447
+ pm_location_t lparen_loc;
4448
+
4449
+ /** YieldNode#arguments */
4450
+ struct pm_arguments_node *arguments;
4451
+
4452
+ /** YieldNode#rparen_loc */
4453
+ pm_location_t rparen_loc;
4454
+ } pm_yield_node_t;
4455
+
4456
+ /**
4457
+ * Flags for arguments nodes.
4458
+ */
4459
+ typedef enum pm_arguments_node_flags {
4460
+ /** if arguments contain keyword splat */
4461
+ PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT = 1,
4462
+ } pm_arguments_node_flags_t;
4463
+
4464
+ /**
4465
+ * Flags for array nodes.
4466
+ */
4467
+ typedef enum pm_array_node_flags {
4468
+ /** if array contains splat nodes */
4469
+ PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT = 1,
4470
+ } pm_array_node_flags_t;
4471
+
4472
+ /**
4473
+ * Flags for call nodes.
4474
+ */
4475
+ typedef enum pm_call_node_flags {
4476
+ /** &. operator */
4477
+ PM_CALL_NODE_FLAGS_SAFE_NAVIGATION = 1,
4478
+
4479
+ /** a call that could have been a local variable */
4480
+ PM_CALL_NODE_FLAGS_VARIABLE_CALL = 2,
4481
+
4482
+ /** a call that is an attribute write, so the value being written should be returned */
4483
+ PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE = 4,
4484
+ } pm_call_node_flags_t;
4485
+
4486
+ /**
4487
+ * Flags for nodes that have unescaped content.
4488
+ */
4489
+ typedef enum pm_encoding_flags {
4490
+ /** internal bytes forced the encoding to UTF-8 */
4491
+ PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING = 1,
4492
+
4493
+ /** internal bytes forced the encoding to binary */
4494
+ PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING = 2,
4495
+ } pm_encoding_flags_t;
4496
+
4497
+ /**
4498
+ * Flags for integer nodes that correspond to the base of the integer.
4499
+ */
4500
+ typedef enum pm_integer_base_flags {
4501
+ /** 0b prefix */
4502
+ PM_INTEGER_BASE_FLAGS_BINARY = 1,
4503
+
4504
+ /** 0d or no prefix */
4505
+ PM_INTEGER_BASE_FLAGS_DECIMAL = 2,
4506
+
4507
+ /** 0o or 0 prefix */
4508
+ PM_INTEGER_BASE_FLAGS_OCTAL = 4,
4509
+
4510
+ /** 0x prefix */
4511
+ PM_INTEGER_BASE_FLAGS_HEXADECIMAL = 8,
4512
+ } pm_integer_base_flags_t;
4513
+
4514
+ /**
4515
+ * Flags for keyword hash nodes.
4516
+ */
4517
+ typedef enum pm_keyword_hash_node_flags {
4518
+ /** a keyword hash which only has `AssocNode` elements all with static literal keys, which means the elements can be treated as keyword arguments */
4519
+ PM_KEYWORD_HASH_NODE_FLAGS_STATIC_KEYS = 1,
4520
+ } pm_keyword_hash_node_flags_t;
4521
+
4522
+ /**
4523
+ * Flags for while and until loop nodes.
4524
+ */
4525
+ typedef enum pm_loop_flags {
4526
+ /** a loop after a begin statement, so the body is executed first before the condition */
4527
+ PM_LOOP_FLAGS_BEGIN_MODIFIER = 1,
4528
+ } pm_loop_flags_t;
4529
+
4530
+ /**
4531
+ * Flags for range and flip-flop nodes.
4532
+ */
4533
+ typedef enum pm_range_flags {
4534
+ /** ... operator */
4535
+ PM_RANGE_FLAGS_EXCLUDE_END = 1,
4536
+ } pm_range_flags_t;
4537
+
4538
+ /**
4539
+ * Flags for regular expression and match last line nodes.
4540
+ */
4541
+ typedef enum pm_regular_expression_flags {
4542
+ /** i - ignores the case of characters when matching */
4543
+ PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE = 1,
4544
+
4545
+ /** x - ignores whitespace and allows comments in regular expressions */
4546
+ PM_REGULAR_EXPRESSION_FLAGS_EXTENDED = 2,
4547
+
4548
+ /** m - allows $ to match the end of lines within strings */
4549
+ PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE = 4,
4550
+
4551
+ /** o - only interpolates values into the regular expression once */
4552
+ PM_REGULAR_EXPRESSION_FLAGS_ONCE = 8,
4553
+
4554
+ /** e - forces the EUC-JP encoding */
4555
+ PM_REGULAR_EXPRESSION_FLAGS_EUC_JP = 16,
4556
+
4557
+ /** n - forces the ASCII-8BIT encoding */
4558
+ PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT = 32,
4559
+
4560
+ /** s - forces the Windows-31J encoding */
4561
+ PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J = 64,
4562
+
4563
+ /** u - forces the UTF-8 encoding */
4564
+ PM_REGULAR_EXPRESSION_FLAGS_UTF_8 = 128,
4565
+
4566
+ /** internal bytes forced the encoding to UTF-8 */
4567
+ PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING = 256,
4568
+
4569
+ /** internal bytes forced the encoding to binary */
4570
+ PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING = 512,
4571
+
4572
+ /** internal bytes forced the encoding to US-ASCII */
4573
+ PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING = 1024,
4574
+ } pm_regular_expression_flags_t;
4575
+
4576
+ /**
4577
+ * Flags for string nodes.
4578
+ */
4579
+ typedef enum pm_string_flags {
4580
+ /** internal bytes forced the encoding to UTF-8 */
4581
+ PM_STRING_FLAGS_FORCED_UTF8_ENCODING = 1,
4582
+
4583
+ /** internal bytes forced the encoding to binary */
4584
+ PM_STRING_FLAGS_FORCED_BINARY_ENCODING = 2,
4585
+
4586
+ /** frozen by virtue of a `frozen_string_literal` comment */
4587
+ PM_STRING_FLAGS_FROZEN = 4,
4588
+ } pm_string_flags_t;
4589
+
4590
+ /**
4591
+ * Flags for symbol nodes.
4592
+ */
4593
+ typedef enum pm_symbol_flags {
4594
+ /** internal bytes forced the encoding to UTF-8 */
4595
+ PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING = 1,
4596
+
4597
+ /** internal bytes forced the encoding to binary */
4598
+ PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING = 2,
4599
+
4600
+ /** internal bytes forced the encoding to US-ASCII */
4601
+ PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING = 4,
4602
+ } pm_symbol_flags_t;
4603
+
4604
+ /**
4605
+ * When we're serializing to Java, we want to skip serializing the location
4606
+ * fields as they won't be used by JRuby or TruffleRuby. This boolean allows us
4607
+ * to specify that through the environment. It will never be true except for in
4608
+ * those build systems.
4609
+ */
4610
+ #define PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS false
4611
+
4612
+ #endif