Skip to main content

ruby_prism_sys/
bindings.rs

1/* Generated by `bundle exec rake cargo:bindings`. Do not edit by hand.
2 * prism 2.0.0, bindgen 0.73.2, layout_tests(false)
3 * so the file stays portable across pointer widths.
4 */
5/* automatically generated by rust-bindgen 0.73.2 */
6
7/** A constant id is a unique identifier for a constant in the constant pool.
8*/
9pub type pm_constant_id_t = u32;
10/** A list of nodes in the source, most often used for lists of children.
11*/
12pub type pm_node_list_t = pm_node_list;
13/** This is the type of node embedded in the node struct. We explicitly control
14 the size of it here to avoid having the variable-width enum.
15*/
16pub type pm_node_type_t = u16;
17/** These are the flags embedded in the node struct. We explicitly control the
18 size of it here to avoid having the variable-width enum.
19*/
20pub type pm_node_flags_t = u16;
21/** This is the base structure that represents a node in the syntax tree. It is
22 embedded into every node type.
23*/
24pub type pm_node_t = pm_node;
25/** AliasGlobalVariableNode
26
27 Represents the use of the `alias` keyword to alias a global variable.
28
29``` ruby
30 alias $foo $bar
31 ^^^^^^^^^^^^^^^
32```
33
34 Type: ::PM_ALIAS_GLOBAL_VARIABLE_NODE
35
36 @extends pm_node_t
37*/
38pub type pm_alias_global_variable_node_t = pm_alias_global_variable_node;
39/** AliasMethodNode
40
41 Represents the use of the `alias` keyword to alias a method.
42
43``` ruby
44 alias foo bar
45 ^^^^^^^^^^^^^
46```
47
48 Type: ::PM_ALIAS_METHOD_NODE
49
50 @extends pm_node_t
51*/
52pub type pm_alias_method_node_t = pm_alias_method_node;
53/** AlternationPatternNode
54
55 Represents an alternation pattern in pattern matching.
56
57``` ruby
58 foo => bar | baz
59        ^^^^^^^^^
60```
61
62 Type: ::PM_ALTERNATION_PATTERN_NODE
63
64 @extends pm_node_t
65*/
66pub type pm_alternation_pattern_node_t = pm_alternation_pattern_node;
67/** AndNode
68
69 Represents the use of the `&&` operator or the `and` keyword.
70
71``` ruby
72 left and right
73 ^^^^^^^^^^^^^^
74```
75
76 Type: ::PM_AND_NODE
77
78 @extends pm_node_t
79*/
80pub type pm_and_node_t = pm_and_node;
81/** ArgumentsNode
82
83 Represents a set of arguments to a method or a keyword.
84
85``` ruby
86 return foo, bar, baz
87        ^^^^^^^^^^^^^
88```
89
90 Type: ::PM_ARGUMENTS_NODE
91
92 Flags (#pm_arguments_node_flags):
93 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING
94 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS
95 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT
96 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT
97 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS
98
99 @extends pm_node_t
100*/
101pub type pm_arguments_node_t = pm_arguments_node;
102/** ArrayNode
103
104 Represents an array literal. This can be a regular array using brackets or a special array using % like %w or %i.
105
106``` ruby
107 [1, 2, 3]
108 ^^^^^^^^^
109```
110
111 Type: ::PM_ARRAY_NODE
112
113 Flags (#pm_array_node_flags):
114 * ::PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT
115
116 @extends pm_node_t
117*/
118pub type pm_array_node_t = pm_array_node;
119/** ArrayPatternNode
120
121 Represents an array pattern in pattern matching.
122
123``` ruby
124 foo in 1, 2
125        ^^^^
126```
127
128``` ruby
129 foo in [1, 2]
130        ^^^^^^
131```
132
133``` ruby
134 foo in *bar
135        ^^^^
136```
137
138``` ruby
139 foo in Bar[]
140        ^^^^^
141```
142
143``` ruby
144 foo in Bar[1, 2, 3]
145        ^^^^^^^^^^^^
146```
147
148 Type: ::PM_ARRAY_PATTERN_NODE
149
150 @extends pm_node_t
151*/
152pub type pm_array_pattern_node_t = pm_array_pattern_node;
153/** AssocNode
154
155 Represents a hash key/value pair.
156
157``` ruby
158 { a => b }
159   ^^^^^^
160```
161
162 Type: ::PM_ASSOC_NODE
163
164 @extends pm_node_t
165*/
166pub type pm_assoc_node_t = pm_assoc_node;
167/** AssocSplatNode
168
169 Represents a splat in a hash literal.
170
171``` ruby
172 { **foo }
173   ^^^^^
174```
175
176 Type: ::PM_ASSOC_SPLAT_NODE
177
178 @extends pm_node_t
179*/
180pub type pm_assoc_splat_node_t = pm_assoc_splat_node;
181/** BackReferenceReadNode
182
183 Represents reading a reference to a field in the previous match.
184
185``` ruby
186 $'
187 ^^
188```
189
190 Type: ::PM_BACK_REFERENCE_READ_NODE
191
192 @extends pm_node_t
193*/
194pub type pm_back_reference_read_node_t = pm_back_reference_read_node;
195/** BeginNode
196
197 Represents a begin statement.
198
199``` ruby
200 begin
201   foo
202 end
203 ^^^^^
204```
205
206 Type: ::PM_BEGIN_NODE
207
208 @extends pm_node_t
209*/
210pub type pm_begin_node_t = pm_begin_node;
211/** BlockArgumentNode
212
213 Represents a block argument using `&`.
214
215``` ruby
216 bar(&args)
217     ^^^^^
218```
219
220 Type: ::PM_BLOCK_ARGUMENT_NODE
221
222 @extends pm_node_t
223*/
224pub type pm_block_argument_node_t = pm_block_argument_node;
225/** BlockLocalVariableNode
226
227 Represents a block local variable.
228
229``` ruby
230 a { |; b| }
231        ^
232```
233
234 Type: ::PM_BLOCK_LOCAL_VARIABLE_NODE
235
236 Flags (#pm_parameter_flags):
237 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
238
239 @extends pm_node_t
240*/
241pub type pm_block_local_variable_node_t = pm_block_local_variable_node;
242/** BlockNode
243
244 Represents a block of ruby code.
245
246``` ruby
247 [1, 2, 3].each { |i| puts x }
248                ^^^^^^^^^^^^^^
249```
250
251 Type: ::PM_BLOCK_NODE
252
253 @extends pm_node_t
254*/
255pub type pm_block_node_t = pm_block_node;
256/** BlockParameterNode
257
258 Represents a block parameter of a method, block, or lambda definition.
259
260``` ruby
261 def a(&b)
262       ^^
263 end
264```
265
266 Type: ::PM_BLOCK_PARAMETER_NODE
267
268 Flags (#pm_parameter_flags):
269 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
270
271 @extends pm_node_t
272*/
273pub type pm_block_parameter_node_t = pm_block_parameter_node;
274/** BlockParametersNode
275
276 Represents a block's parameters declaration.
277
278``` ruby
279 -> (a, b = 1; local) { }
280    ^^^^^^^^^^^^^^^^^
281```
282
283``` ruby
284 foo do |a, b = 1; local|
285        ^^^^^^^^^^^^^^^^^
286 end
287```
288
289 Type: ::PM_BLOCK_PARAMETERS_NODE
290
291 @extends pm_node_t
292*/
293pub type pm_block_parameters_node_t = pm_block_parameters_node;
294/** BreakNode
295
296 Represents the use of the `break` keyword.
297
298``` ruby
299 break foo
300 ^^^^^^^^^
301```
302
303 Type: ::PM_BREAK_NODE
304
305 @extends pm_node_t
306*/
307pub type pm_break_node_t = pm_break_node;
308/** CallAndWriteNode
309
310 Represents the use of the `&&=` operator on a call.
311
312``` ruby
313 foo.bar &&= value
314 ^^^^^^^^^^^^^^^^^
315```
316
317 Type: ::PM_CALL_AND_WRITE_NODE
318
319 Flags (#pm_call_node_flags):
320 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
321 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
322 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
323 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
324
325 @extends pm_node_t
326*/
327pub type pm_call_and_write_node_t = pm_call_and_write_node;
328/** CallNode
329
330 Represents a method call, in all of the various forms that can take.
331
332``` ruby
333 foo
334 ^^^
335```
336
337``` ruby
338 foo()
339 ^^^^^
340```
341
342``` ruby
343 +foo
344 ^^^^
345```
346
347``` ruby
348 foo + bar
349 ^^^^^^^^^
350```
351
352``` ruby
353 foo.bar
354 ^^^^^^^
355```
356
357``` ruby
358 foo&.bar
359 ^^^^^^^^
360```
361
362 Type: ::PM_CALL_NODE
363
364 Flags (#pm_call_node_flags):
365 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
366 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
367 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
368 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
369
370 @extends pm_node_t
371*/
372pub type pm_call_node_t = pm_call_node;
373/** CallOperatorWriteNode
374
375 Represents the use of an assignment operator on a call.
376
377``` ruby
378 foo.bar += baz
379 ^^^^^^^^^^^^^^
380```
381
382 Type: ::PM_CALL_OPERATOR_WRITE_NODE
383
384 Flags (#pm_call_node_flags):
385 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
386 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
387 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
388 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
389
390 @extends pm_node_t
391*/
392pub type pm_call_operator_write_node_t = pm_call_operator_write_node;
393/** CallOrWriteNode
394
395 Represents the use of the `||=` operator on a call.
396
397``` ruby
398 foo.bar ||= value
399 ^^^^^^^^^^^^^^^^^
400```
401
402 Type: ::PM_CALL_OR_WRITE_NODE
403
404 Flags (#pm_call_node_flags):
405 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
406 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
407 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
408 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
409
410 @extends pm_node_t
411*/
412pub type pm_call_or_write_node_t = pm_call_or_write_node;
413/** CallTargetNode
414
415 Represents assigning to a method call.
416
417``` ruby
418 foo.bar, = 1
419 ^^^^^^^
420```
421
422``` ruby
423 begin
424 rescue => foo.bar
425           ^^^^^^^
426 end
427```
428
429``` ruby
430 for foo.bar in baz do end
431     ^^^^^^^
432```
433
434 Type: ::PM_CALL_TARGET_NODE
435
436 Flags (#pm_call_node_flags):
437 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
438 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
439 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
440 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
441
442 @extends pm_node_t
443*/
444pub type pm_call_target_node_t = pm_call_target_node;
445/** CapturePatternNode
446
447 Represents assigning to a local variable in pattern matching.
448
449``` ruby
450 foo => [bar => baz]
451         ^^^^^^^^^^
452```
453
454 Type: ::PM_CAPTURE_PATTERN_NODE
455
456 @extends pm_node_t
457*/
458pub type pm_capture_pattern_node_t = pm_capture_pattern_node;
459/** CaseMatchNode
460
461 Represents the use of a case statement for pattern matching.
462
463``` ruby
464 case true
465 in false
466 end
467 ^^^^^^^^^
468```
469
470 Type: ::PM_CASE_MATCH_NODE
471
472 @extends pm_node_t
473*/
474pub type pm_case_match_node_t = pm_case_match_node;
475/** CaseNode
476
477 Represents the use of a case statement.
478
479``` ruby
480 case true
481 when false
482 end
483 ^^^^^^^^^^
484```
485
486 Type: ::PM_CASE_NODE
487
488 @extends pm_node_t
489*/
490pub type pm_case_node_t = pm_case_node;
491/** ClassNode
492
493 Represents a class declaration involving the `class` keyword.
494
495``` ruby
496 class Foo end
497 ^^^^^^^^^^^^^
498```
499
500 Type: ::PM_CLASS_NODE
501
502 @extends pm_node_t
503*/
504pub type pm_class_node_t = pm_class_node;
505/** ClassVariableAndWriteNode
506
507 Represents the use of the `&&=` operator for assignment to a class variable.
508
509``` ruby
510 @@target &&= value
511 ^^^^^^^^^^^^^^^^^^
512```
513
514 Type: ::PM_CLASS_VARIABLE_AND_WRITE_NODE
515
516 @extends pm_node_t
517*/
518pub type pm_class_variable_and_write_node_t = pm_class_variable_and_write_node;
519/** ClassVariableOperatorWriteNode
520
521 Represents assigning to a class variable using an operator that isn't `=`.
522
523``` ruby
524 @@target += value
525 ^^^^^^^^^^^^^^^^^
526```
527
528 Type: ::PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE
529
530 @extends pm_node_t
531*/
532pub type pm_class_variable_operator_write_node_t = pm_class_variable_operator_write_node;
533/** ClassVariableOrWriteNode
534
535 Represents the use of the `||=` operator for assignment to a class variable.
536
537``` ruby
538 @@target ||= value
539 ^^^^^^^^^^^^^^^^^^
540```
541
542 Type: ::PM_CLASS_VARIABLE_OR_WRITE_NODE
543
544 @extends pm_node_t
545*/
546pub type pm_class_variable_or_write_node_t = pm_class_variable_or_write_node;
547/** ClassVariableReadNode
548
549 Represents referencing a class variable.
550
551``` ruby
552 @@foo
553 ^^^^^
554```
555
556 Type: ::PM_CLASS_VARIABLE_READ_NODE
557
558 @extends pm_node_t
559*/
560pub type pm_class_variable_read_node_t = pm_class_variable_read_node;
561/** ClassVariableTargetNode
562
563 Represents writing to a class variable in a context that doesn't have an explicit value.
564
565``` ruby
566 @@foo, @@bar = baz
567 ^^^^^  ^^^^^
568```
569
570 Type: ::PM_CLASS_VARIABLE_TARGET_NODE
571
572 @extends pm_node_t
573*/
574pub type pm_class_variable_target_node_t = pm_class_variable_target_node;
575/** ClassVariableWriteNode
576
577 Represents writing to a class variable.
578
579``` ruby
580 @@foo = 1
581 ^^^^^^^^^
582```
583
584 Type: ::PM_CLASS_VARIABLE_WRITE_NODE
585
586 @extends pm_node_t
587*/
588pub type pm_class_variable_write_node_t = pm_class_variable_write_node;
589/** ConstantAndWriteNode
590
591 Represents the use of the `&&=` operator for assignment to a constant.
592
593``` ruby
594 Target &&= value
595 ^^^^^^^^^^^^^^^^
596```
597
598 Type: ::PM_CONSTANT_AND_WRITE_NODE
599
600 @extends pm_node_t
601*/
602pub type pm_constant_and_write_node_t = pm_constant_and_write_node;
603/** ConstantOperatorWriteNode
604
605 Represents assigning to a constant using an operator that isn't `=`.
606
607``` ruby
608 Target += value
609 ^^^^^^^^^^^^^^^
610```
611
612 Type: ::PM_CONSTANT_OPERATOR_WRITE_NODE
613
614 @extends pm_node_t
615*/
616pub type pm_constant_operator_write_node_t = pm_constant_operator_write_node;
617/** ConstantOrWriteNode
618
619 Represents the use of the `||=` operator for assignment to a constant.
620
621``` ruby
622 Target ||= value
623 ^^^^^^^^^^^^^^^^
624```
625
626 Type: ::PM_CONSTANT_OR_WRITE_NODE
627
628 @extends pm_node_t
629*/
630pub type pm_constant_or_write_node_t = pm_constant_or_write_node;
631/** ConstantPathAndWriteNode
632
633 Represents the use of the `&&=` operator for assignment to a constant path.
634
635``` ruby
636 Parent::Child &&= value
637 ^^^^^^^^^^^^^^^^^^^^^^^
638```
639
640 Type: ::PM_CONSTANT_PATH_AND_WRITE_NODE
641
642 @extends pm_node_t
643*/
644pub type pm_constant_path_and_write_node_t = pm_constant_path_and_write_node;
645/** ConstantPathNode
646
647 Represents accessing a constant through a path of `::` operators.
648
649``` ruby
650 Foo::Bar
651 ^^^^^^^^
652```
653
654 Type: ::PM_CONSTANT_PATH_NODE
655
656 @extends pm_node_t
657*/
658pub type pm_constant_path_node_t = pm_constant_path_node;
659/** ConstantPathOperatorWriteNode
660
661 Represents assigning to a constant path using an operator that isn't `=`.
662
663``` ruby
664 Parent::Child += value
665 ^^^^^^^^^^^^^^^^^^^^^^
666```
667
668 Type: ::PM_CONSTANT_PATH_OPERATOR_WRITE_NODE
669
670 @extends pm_node_t
671*/
672pub type pm_constant_path_operator_write_node_t = pm_constant_path_operator_write_node;
673/** ConstantPathOrWriteNode
674
675 Represents the use of the `||=` operator for assignment to a constant path.
676
677``` ruby
678 Parent::Child ||= value
679 ^^^^^^^^^^^^^^^^^^^^^^^
680```
681
682 Type: ::PM_CONSTANT_PATH_OR_WRITE_NODE
683
684 @extends pm_node_t
685*/
686pub type pm_constant_path_or_write_node_t = pm_constant_path_or_write_node;
687/** ConstantPathTargetNode
688
689 Represents writing to a constant path in a context that doesn't have an explicit value.
690
691``` ruby
692 Foo::Foo, Bar::Bar = baz
693 ^^^^^^^^  ^^^^^^^^
694```
695
696 Type: ::PM_CONSTANT_PATH_TARGET_NODE
697
698 @extends pm_node_t
699*/
700pub type pm_constant_path_target_node_t = pm_constant_path_target_node;
701/** ConstantPathWriteNode
702
703 Represents writing to a constant path.
704
705``` ruby
706 ::Foo = 1
707 ^^^^^^^^^
708```
709
710``` ruby
711 Foo::Bar = 1
712 ^^^^^^^^^^^^
713```
714
715``` ruby
716 ::Foo::Bar = 1
717 ^^^^^^^^^^^^^^
718```
719
720 Type: ::PM_CONSTANT_PATH_WRITE_NODE
721
722 @extends pm_node_t
723*/
724pub type pm_constant_path_write_node_t = pm_constant_path_write_node;
725/** ConstantReadNode
726
727 Represents referencing a constant.
728
729``` ruby
730 Foo
731 ^^^
732```
733
734 Type: ::PM_CONSTANT_READ_NODE
735
736 @extends pm_node_t
737*/
738pub type pm_constant_read_node_t = pm_constant_read_node;
739/** ConstantTargetNode
740
741 Represents writing to a constant in a context that doesn't have an explicit value.
742
743``` ruby
744 Foo, Bar = baz
745 ^^^  ^^^
746```
747
748 Type: ::PM_CONSTANT_TARGET_NODE
749
750 @extends pm_node_t
751*/
752pub type pm_constant_target_node_t = pm_constant_target_node;
753/** ConstantWriteNode
754
755 Represents writing to a constant.
756
757``` ruby
758 Foo = 1
759 ^^^^^^^
760```
761
762 Type: ::PM_CONSTANT_WRITE_NODE
763
764 @extends pm_node_t
765*/
766pub type pm_constant_write_node_t = pm_constant_write_node;
767/** DefNode
768
769 Represents a method definition.
770
771``` ruby
772 def method
773 end
774 ^^^^^^^^^^
775```
776
777 Type: ::PM_DEF_NODE
778
779 @extends pm_node_t
780*/
781pub type pm_def_node_t = pm_def_node;
782/** DefinedNode
783
784 Represents the use of the `defined?` keyword.
785
786``` ruby
787 defined?(a)
788 ^^^^^^^^^^^
789```
790
791 Type: ::PM_DEFINED_NODE
792
793 @extends pm_node_t
794*/
795pub type pm_defined_node_t = pm_defined_node;
796/** ElseNode
797
798 Represents an `else` clause in a `case`, `if`, or `unless` statement.
799
800``` ruby
801 if a then b else c end
802             ^^^^^^^^^^
803```
804
805 Type: ::PM_ELSE_NODE
806
807 @extends pm_node_t
808*/
809pub type pm_else_node_t = pm_else_node;
810/** EmbeddedStatementsNode
811
812 Represents an interpolated set of statements.
813
814``` ruby
815 "foo #{bar}"
816      ^^^^^^
817```
818
819 Type: ::PM_EMBEDDED_STATEMENTS_NODE
820
821 @extends pm_node_t
822*/
823pub type pm_embedded_statements_node_t = pm_embedded_statements_node;
824/** EmbeddedVariableNode
825
826 Represents an interpolated variable.
827
828``` ruby
829 "foo #@bar"
830      ^^^^^
831```
832
833 Type: ::PM_EMBEDDED_VARIABLE_NODE
834
835 @extends pm_node_t
836*/
837pub type pm_embedded_variable_node_t = pm_embedded_variable_node;
838/** EnsureNode
839
840 Represents an `ensure` clause in a `begin` statement.
841
842``` ruby
843 begin
844   foo
845 ensure
846 ^^^^^^
847   bar
848 end
849```
850
851 Type: ::PM_ENSURE_NODE
852
853 @extends pm_node_t
854*/
855pub type pm_ensure_node_t = pm_ensure_node;
856/** ErrorRecoveryNode
857
858 Represents a node that is either missing or unexpected and results in a syntax error.
859
860 Type: ::PM_ERROR_RECOVERY_NODE
861
862 @extends pm_node_t
863*/
864pub type pm_error_recovery_node_t = pm_error_recovery_node;
865/** FalseNode
866
867 Represents the use of the literal `false` keyword.
868
869``` ruby
870 false
871 ^^^^^
872```
873
874 Type: ::PM_FALSE_NODE
875
876 @extends pm_node_t
877*/
878pub type pm_false_node_t = pm_false_node;
879/** FindPatternNode
880
881 Represents a find pattern in pattern matching.
882
883``` ruby
884 foo in *bar, baz, *qux
885        ^^^^^^^^^^^^^^^
886```
887
888``` ruby
889 foo in [*bar, baz, *qux]
890        ^^^^^^^^^^^^^^^^^
891```
892
893``` ruby
894 foo in Foo(*bar, baz, *qux)
895        ^^^^^^^^^^^^^^^^^^^^
896```
897
898``` ruby
899 foo => *bar, baz, *qux
900        ^^^^^^^^^^^^^^^
901```
902
903 Type: ::PM_FIND_PATTERN_NODE
904
905 @extends pm_node_t
906*/
907pub type pm_find_pattern_node_t = pm_find_pattern_node;
908/** FlipFlopNode
909
910 Represents the use of the `..` or `...` operators to create flip flops.
911
912``` ruby
913 baz if foo .. bar
914        ^^^^^^^^^^
915```
916
917 Type: ::PM_FLIP_FLOP_NODE
918
919 Flags (#pm_range_flags):
920 * ::PM_RANGE_FLAGS_EXCLUDE_END
921
922 @extends pm_node_t
923*/
924pub type pm_flip_flop_node_t = pm_flip_flop_node;
925/** FloatNode
926
927 Represents a floating point number literal.
928
929``` ruby
930 1.0
931 ^^^
932```
933
934 Type: ::PM_FLOAT_NODE
935
936 @extends pm_node_t
937*/
938pub type pm_float_node_t = pm_float_node;
939/** ForNode
940
941 Represents the use of the `for` keyword.
942
943``` ruby
944 for i in a end
945 ^^^^^^^^^^^^^^
946```
947
948 Type: ::PM_FOR_NODE
949
950 @extends pm_node_t
951*/
952pub type pm_for_node_t = pm_for_node;
953/** ForwardingArgumentsNode
954
955 Represents forwarding all arguments to this method to another method.
956
957``` ruby
958 def foo(...)
959   bar(...)
960       ^^^
961 end
962```
963
964 Type: ::PM_FORWARDING_ARGUMENTS_NODE
965
966 @extends pm_node_t
967*/
968pub type pm_forwarding_arguments_node_t = pm_forwarding_arguments_node;
969/** ForwardingParameterNode
970
971 Represents the use of the forwarding parameter in a method, block, or lambda declaration.
972
973``` ruby
974 def foo(...)
975         ^^^
976 end
977```
978
979 Type: ::PM_FORWARDING_PARAMETER_NODE
980
981 @extends pm_node_t
982*/
983pub type pm_forwarding_parameter_node_t = pm_forwarding_parameter_node;
984/** ForwardingSuperNode
985
986 Represents the use of the `super` keyword without parentheses or arguments, but which might have a block.
987
988``` ruby
989 super
990 ^^^^^
991```
992
993``` ruby
994 super { 123 }
995 ^^^^^^^^^^^^^
996```
997
998 If it has any other arguments, it would be a `SuperNode` instead.
999
1000 Type: ::PM_FORWARDING_SUPER_NODE
1001
1002 @extends pm_node_t
1003*/
1004pub type pm_forwarding_super_node_t = pm_forwarding_super_node;
1005/** GlobalVariableAndWriteNode
1006
1007 Represents the use of the `&&=` operator for assignment to a global variable.
1008
1009``` ruby
1010 $target &&= value
1011 ^^^^^^^^^^^^^^^^^
1012```
1013
1014 Type: ::PM_GLOBAL_VARIABLE_AND_WRITE_NODE
1015
1016 @extends pm_node_t
1017*/
1018pub type pm_global_variable_and_write_node_t = pm_global_variable_and_write_node;
1019/** GlobalVariableOperatorWriteNode
1020
1021 Represents assigning to a global variable using an operator that isn't `=`.
1022
1023``` ruby
1024 $target += value
1025 ^^^^^^^^^^^^^^^^
1026```
1027
1028 Type: ::PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE
1029
1030 @extends pm_node_t
1031*/
1032pub type pm_global_variable_operator_write_node_t = pm_global_variable_operator_write_node;
1033/** GlobalVariableOrWriteNode
1034
1035 Represents the use of the `||=` operator for assignment to a global variable.
1036
1037``` ruby
1038 $target ||= value
1039 ^^^^^^^^^^^^^^^^^
1040```
1041
1042 Type: ::PM_GLOBAL_VARIABLE_OR_WRITE_NODE
1043
1044 @extends pm_node_t
1045*/
1046pub type pm_global_variable_or_write_node_t = pm_global_variable_or_write_node;
1047/** GlobalVariableReadNode
1048
1049 Represents referencing a global variable.
1050
1051``` ruby
1052 $foo
1053 ^^^^
1054```
1055
1056 Type: ::PM_GLOBAL_VARIABLE_READ_NODE
1057
1058 @extends pm_node_t
1059*/
1060pub type pm_global_variable_read_node_t = pm_global_variable_read_node;
1061/** GlobalVariableTargetNode
1062
1063 Represents writing to a global variable in a context that doesn't have an explicit value.
1064
1065``` ruby
1066 $foo, $bar = baz
1067 ^^^^  ^^^^
1068```
1069
1070 Type: ::PM_GLOBAL_VARIABLE_TARGET_NODE
1071
1072 @extends pm_node_t
1073*/
1074pub type pm_global_variable_target_node_t = pm_global_variable_target_node;
1075/** GlobalVariableWriteNode
1076
1077 Represents writing to a global variable.
1078
1079``` ruby
1080 $foo = 1
1081 ^^^^^^^^
1082```
1083
1084 Type: ::PM_GLOBAL_VARIABLE_WRITE_NODE
1085
1086 @extends pm_node_t
1087*/
1088pub type pm_global_variable_write_node_t = pm_global_variable_write_node;
1089/** HashNode
1090
1091 Represents a hash literal.
1092
1093``` ruby
1094 { a => b }
1095 ^^^^^^^^^^
1096```
1097
1098 Type: ::PM_HASH_NODE
1099
1100 @extends pm_node_t
1101*/
1102pub type pm_hash_node_t = pm_hash_node;
1103/** HashPatternNode
1104
1105 Represents a hash pattern in pattern matching.
1106
1107``` ruby
1108 foo => { a: 1, b: 2 }
1109        ^^^^^^^^^^^^^^
1110```
1111
1112``` ruby
1113 foo => { a: 1, b: 2, **c }
1114        ^^^^^^^^^^^^^^^^^^^
1115```
1116
1117``` ruby
1118 foo => Bar[a: 1, b: 2]
1119        ^^^^^^^^^^^^^^^
1120```
1121
1122``` ruby
1123 foo in { a: 1, b: 2 }
1124        ^^^^^^^^^^^^^^
1125```
1126
1127 Type: ::PM_HASH_PATTERN_NODE
1128
1129 @extends pm_node_t
1130*/
1131pub type pm_hash_pattern_node_t = pm_hash_pattern_node;
1132/** IfNode
1133
1134 Represents the use of the `if` keyword, either in the block form or the modifier form, or a ternary expression.
1135
1136``` ruby
1137 bar if foo
1138 ^^^^^^^^^^
1139```
1140
1141``` ruby
1142 if foo then bar end
1143 ^^^^^^^^^^^^^^^^^^^
1144```
1145
1146``` ruby
1147 foo ? bar : baz
1148 ^^^^^^^^^^^^^^^
1149```
1150
1151 Type: ::PM_IF_NODE
1152
1153 @extends pm_node_t
1154*/
1155pub type pm_if_node_t = pm_if_node;
1156/** ImaginaryNode
1157
1158 Represents an imaginary number literal.
1159
1160``` ruby
1161 1.0i
1162 ^^^^
1163```
1164
1165 Type: ::PM_IMAGINARY_NODE
1166
1167 @extends pm_node_t
1168*/
1169pub type pm_imaginary_node_t = pm_imaginary_node;
1170/** ImplicitNode
1171
1172 Represents a node that is implicitly being added to the tree but doesn't correspond directly to a node in the source.
1173
1174``` ruby
1175 { foo: }
1176   ^^^^
1177```
1178
1179``` ruby
1180 { Foo: }
1181   ^^^^
1182```
1183
1184``` ruby
1185 foo in { bar: }
1186          ^^^^
1187```
1188
1189 Type: ::PM_IMPLICIT_NODE
1190
1191 @extends pm_node_t
1192*/
1193pub type pm_implicit_node_t = pm_implicit_node;
1194/** ImplicitRestNode
1195
1196 Represents using a trailing comma to indicate an implicit rest parameter.
1197
1198``` ruby
1199 foo { |bar,| }
1200           ^
1201```
1202
1203``` ruby
1204 foo in [bar,]
1205            ^
1206```
1207
1208``` ruby
1209 for foo, in bar do end
1210        ^
1211```
1212
1213``` ruby
1214 foo, = bar
1215    ^
1216```
1217
1218 Type: ::PM_IMPLICIT_REST_NODE
1219
1220 @extends pm_node_t
1221*/
1222pub type pm_implicit_rest_node_t = pm_implicit_rest_node;
1223/** InNode
1224
1225 Represents the use of the `in` keyword in a case statement.
1226
1227``` ruby
1228 case a; in b then c end
1229         ^^^^^^^^^^^
1230```
1231
1232 Type: ::PM_IN_NODE
1233
1234 @extends pm_node_t
1235*/
1236pub type pm_in_node_t = pm_in_node;
1237/** IndexAndWriteNode
1238
1239 Represents the use of the `&&=` operator on a call to the `[]` method.
1240
1241``` ruby
1242 foo.bar[baz] &&= value
1243 ^^^^^^^^^^^^^^^^^^^^^^
1244```
1245
1246 Type: ::PM_INDEX_AND_WRITE_NODE
1247
1248 Flags (#pm_call_node_flags):
1249 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1250 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
1251 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1252 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
1253
1254 @extends pm_node_t
1255*/
1256pub type pm_index_and_write_node_t = pm_index_and_write_node;
1257/** IndexOperatorWriteNode
1258
1259 Represents the use of an assignment operator on a call to `[]`.
1260
1261``` ruby
1262 foo.bar[baz] += value
1263 ^^^^^^^^^^^^^^^^^^^^^
1264```
1265
1266 Type: ::PM_INDEX_OPERATOR_WRITE_NODE
1267
1268 Flags (#pm_call_node_flags):
1269 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1270 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
1271 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1272 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
1273
1274 @extends pm_node_t
1275*/
1276pub type pm_index_operator_write_node_t = pm_index_operator_write_node;
1277/** IndexOrWriteNode
1278
1279 Represents the use of the `||=` operator on a call to `[]`.
1280
1281``` ruby
1282 foo.bar[baz] ||= value
1283 ^^^^^^^^^^^^^^^^^^^^^^
1284```
1285
1286 Type: ::PM_INDEX_OR_WRITE_NODE
1287
1288 Flags (#pm_call_node_flags):
1289 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1290 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
1291 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1292 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
1293
1294 @extends pm_node_t
1295*/
1296pub type pm_index_or_write_node_t = pm_index_or_write_node;
1297/** IndexTargetNode
1298
1299 Represents assigning to an index.
1300
1301``` ruby
1302 foo[bar], = 1
1303 ^^^^^^^^
1304```
1305
1306``` ruby
1307 begin
1308 rescue => foo[bar]
1309           ^^^^^^^^
1310 end
1311```
1312
1313``` ruby
1314 for foo[bar] in baz do end
1315     ^^^^^^^^
1316```
1317
1318 Type: ::PM_INDEX_TARGET_NODE
1319
1320 Flags (#pm_call_node_flags):
1321 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
1322 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
1323 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
1324 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
1325
1326 @extends pm_node_t
1327*/
1328pub type pm_index_target_node_t = pm_index_target_node;
1329/** InstanceVariableAndWriteNode
1330
1331 Represents the use of the `&&=` operator for assignment to an instance variable.
1332
1333``` ruby
1334 @target &&= value
1335 ^^^^^^^^^^^^^^^^^
1336```
1337
1338 Type: ::PM_INSTANCE_VARIABLE_AND_WRITE_NODE
1339
1340 @extends pm_node_t
1341*/
1342pub type pm_instance_variable_and_write_node_t = pm_instance_variable_and_write_node;
1343/** InstanceVariableOperatorWriteNode
1344
1345 Represents assigning to an instance variable using an operator that isn't `=`.
1346
1347``` ruby
1348 @target += value
1349 ^^^^^^^^^^^^^^^^
1350```
1351
1352 Type: ::PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE
1353
1354 @extends pm_node_t
1355*/
1356pub type pm_instance_variable_operator_write_node_t = pm_instance_variable_operator_write_node;
1357/** InstanceVariableOrWriteNode
1358
1359 Represents the use of the `||=` operator for assignment to an instance variable.
1360
1361``` ruby
1362 @target ||= value
1363 ^^^^^^^^^^^^^^^^^
1364```
1365
1366 Type: ::PM_INSTANCE_VARIABLE_OR_WRITE_NODE
1367
1368 @extends pm_node_t
1369*/
1370pub type pm_instance_variable_or_write_node_t = pm_instance_variable_or_write_node;
1371/** InstanceVariableReadNode
1372
1373 Represents referencing an instance variable.
1374
1375``` ruby
1376 @foo
1377 ^^^^
1378```
1379
1380 Type: ::PM_INSTANCE_VARIABLE_READ_NODE
1381
1382 @extends pm_node_t
1383*/
1384pub type pm_instance_variable_read_node_t = pm_instance_variable_read_node;
1385/** InstanceVariableTargetNode
1386
1387 Represents writing to an instance variable in a context that doesn't have an explicit value.
1388
1389``` ruby
1390 @foo, @bar = baz
1391 ^^^^  ^^^^
1392```
1393
1394 Type: ::PM_INSTANCE_VARIABLE_TARGET_NODE
1395
1396 @extends pm_node_t
1397*/
1398pub type pm_instance_variable_target_node_t = pm_instance_variable_target_node;
1399/** InstanceVariableWriteNode
1400
1401 Represents writing to an instance variable.
1402
1403``` ruby
1404 @foo = 1
1405 ^^^^^^^^
1406```
1407
1408 Type: ::PM_INSTANCE_VARIABLE_WRITE_NODE
1409
1410 @extends pm_node_t
1411*/
1412pub type pm_instance_variable_write_node_t = pm_instance_variable_write_node;
1413/** IntegerNode
1414
1415 Represents an integer number literal.
1416
1417``` ruby
1418 1
1419 ^
1420```
1421
1422 Type: ::PM_INTEGER_NODE
1423
1424 Flags (#pm_integer_base_flags):
1425 * ::PM_INTEGER_BASE_FLAGS_BINARY
1426 * ::PM_INTEGER_BASE_FLAGS_DECIMAL
1427 * ::PM_INTEGER_BASE_FLAGS_OCTAL
1428 * ::PM_INTEGER_BASE_FLAGS_HEXADECIMAL
1429
1430 @extends pm_node_t
1431*/
1432pub type pm_integer_node_t = pm_integer_node;
1433/** InterpolatedMatchLastLineNode
1434
1435 Represents a regular expression literal that contains interpolation that is being used in the predicate of a conditional to implicitly match against the last line read by an IO object.
1436
1437``` ruby
1438 if /foo #{bar} baz/ then end
1439    ^^^^^^^^^^^^^^^^
1440```
1441
1442 Type: ::PM_INTERPOLATED_MATCH_LAST_LINE_NODE
1443
1444 Flags (#pm_regular_expression_flags):
1445 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
1446 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
1447 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
1448 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
1449 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
1450 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
1451 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
1452 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
1453 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
1454 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
1455 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
1456
1457 @extends pm_node_t
1458*/
1459pub type pm_interpolated_match_last_line_node_t = pm_interpolated_match_last_line_node;
1460/** InterpolatedRegularExpressionNode
1461
1462 Represents a regular expression literal that contains interpolation.
1463
1464``` ruby
1465 /foo #{bar} baz/
1466 ^^^^^^^^^^^^^^^^
1467```
1468
1469 Type: ::PM_INTERPOLATED_REGULAR_EXPRESSION_NODE
1470
1471 Flags (#pm_regular_expression_flags):
1472 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
1473 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
1474 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
1475 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
1476 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
1477 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
1478 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
1479 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
1480 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
1481 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
1482 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
1483
1484 @extends pm_node_t
1485*/
1486pub type pm_interpolated_regular_expression_node_t = pm_interpolated_regular_expression_node;
1487/** InterpolatedStringNode
1488
1489 Represents a string literal that contains interpolation.
1490
1491``` ruby
1492 "foo #{bar} baz"
1493 ^^^^^^^^^^^^^^^^
1494```
1495
1496 Type: ::PM_INTERPOLATED_STRING_NODE
1497
1498 Flags (#pm_interpolated_string_node_flags):
1499 * ::PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN
1500 * ::PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE
1501
1502 @extends pm_node_t
1503*/
1504pub type pm_interpolated_string_node_t = pm_interpolated_string_node;
1505/** InterpolatedSymbolNode
1506
1507 Represents a symbol literal that contains interpolation.
1508
1509``` ruby
1510 :"foo #{bar} baz"
1511 ^^^^^^^^^^^^^^^^^
1512```
1513
1514 Type: ::PM_INTERPOLATED_SYMBOL_NODE
1515
1516 @extends pm_node_t
1517*/
1518pub type pm_interpolated_symbol_node_t = pm_interpolated_symbol_node;
1519/** InterpolatedXStringNode
1520
1521 Represents an xstring literal that contains interpolation.
1522
1523``` ruby
1524 `foo #{bar} baz`
1525 ^^^^^^^^^^^^^^^^
1526```
1527
1528 Type: ::PM_INTERPOLATED_X_STRING_NODE
1529
1530 @extends pm_node_t
1531*/
1532pub type pm_interpolated_x_string_node_t = pm_interpolated_x_string_node;
1533/** ItLocalVariableReadNode
1534
1535 Represents reading from the implicit `it` local variable.
1536
1537``` ruby
1538 -> { it }
1539      ^^
1540```
1541
1542 Type: ::PM_IT_LOCAL_VARIABLE_READ_NODE
1543
1544 @extends pm_node_t
1545*/
1546pub type pm_it_local_variable_read_node_t = pm_it_local_variable_read_node;
1547/** ItParametersNode
1548
1549 Represents an implicit set of parameters through the use of the `it` keyword within a block or lambda.
1550
1551``` ruby
1552 -> { it + it }
1553 ^^^^^^^^^^^^^^
1554```
1555
1556 Type: ::PM_IT_PARAMETERS_NODE
1557
1558 @extends pm_node_t
1559*/
1560pub type pm_it_parameters_node_t = pm_it_parameters_node;
1561/** KeywordHashNode
1562
1563 Represents a hash literal without opening and closing braces.
1564
1565``` ruby
1566 foo(a: b)
1567     ^^^^
1568```
1569
1570 Type: ::PM_KEYWORD_HASH_NODE
1571
1572 Flags (#pm_keyword_hash_node_flags):
1573 * ::PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS
1574
1575 @extends pm_node_t
1576*/
1577pub type pm_keyword_hash_node_t = pm_keyword_hash_node;
1578/** KeywordRestParameterNode
1579
1580 Represents a keyword rest parameter to a method, block, or lambda definition.
1581
1582``` ruby
1583 def a(**b)
1584       ^^^
1585 end
1586```
1587
1588 Type: ::PM_KEYWORD_REST_PARAMETER_NODE
1589
1590 Flags (#pm_parameter_flags):
1591 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
1592
1593 @extends pm_node_t
1594*/
1595pub type pm_keyword_rest_parameter_node_t = pm_keyword_rest_parameter_node;
1596/** LambdaNode
1597
1598 Represents using a lambda literal (not the lambda method call).
1599
1600``` ruby
1601 ->(value) { value * 2 }
1602 ^^^^^^^^^^^^^^^^^^^^^^^
1603```
1604
1605 Type: ::PM_LAMBDA_NODE
1606
1607 @extends pm_node_t
1608*/
1609pub type pm_lambda_node_t = pm_lambda_node;
1610/** LocalVariableAndWriteNode
1611
1612 Represents the use of the `&&=` operator for assignment to a local variable.
1613
1614``` ruby
1615 target &&= value
1616 ^^^^^^^^^^^^^^^^
1617```
1618
1619 Type: ::PM_LOCAL_VARIABLE_AND_WRITE_NODE
1620
1621 @extends pm_node_t
1622*/
1623pub type pm_local_variable_and_write_node_t = pm_local_variable_and_write_node;
1624/** LocalVariableOperatorWriteNode
1625
1626 Represents assigning to a local variable using an operator that isn't `=`.
1627
1628``` ruby
1629 target += value
1630 ^^^^^^^^^^^^^^^
1631```
1632
1633 Type: ::PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE
1634
1635 @extends pm_node_t
1636*/
1637pub type pm_local_variable_operator_write_node_t = pm_local_variable_operator_write_node;
1638/** LocalVariableOrWriteNode
1639
1640 Represents the use of the `||=` operator for assignment to a local variable.
1641
1642``` ruby
1643 target ||= value
1644 ^^^^^^^^^^^^^^^^
1645```
1646
1647 Type: ::PM_LOCAL_VARIABLE_OR_WRITE_NODE
1648
1649 @extends pm_node_t
1650*/
1651pub type pm_local_variable_or_write_node_t = pm_local_variable_or_write_node;
1652/** LocalVariableReadNode
1653
1654 Represents reading a local variable. Note that this requires that a local variable of the same name has already been written to in the same scope, otherwise it is parsed as a method call.
1655
1656``` ruby
1657 foo
1658 ^^^
1659```
1660
1661 Type: ::PM_LOCAL_VARIABLE_READ_NODE
1662
1663 @extends pm_node_t
1664*/
1665pub type pm_local_variable_read_node_t = pm_local_variable_read_node;
1666/** LocalVariableTargetNode
1667
1668 Represents writing to a local variable in a context that doesn't have an explicit value.
1669
1670``` ruby
1671 foo, bar = baz
1672 ^^^  ^^^
1673```
1674
1675``` ruby
1676 foo => baz
1677        ^^^
1678```
1679
1680 Type: ::PM_LOCAL_VARIABLE_TARGET_NODE
1681
1682 @extends pm_node_t
1683*/
1684pub type pm_local_variable_target_node_t = pm_local_variable_target_node;
1685/** LocalVariableWriteNode
1686
1687 Represents writing to a local variable.
1688
1689``` ruby
1690 foo = 1
1691 ^^^^^^^
1692```
1693
1694 Type: ::PM_LOCAL_VARIABLE_WRITE_NODE
1695
1696 @extends pm_node_t
1697*/
1698pub type pm_local_variable_write_node_t = pm_local_variable_write_node;
1699/** MatchLastLineNode
1700
1701 Represents a regular expression literal used in the predicate of a conditional to implicitly match against the last line read by an IO object.
1702
1703``` ruby
1704 if /foo/i then end
1705    ^^^^^^
1706```
1707
1708 Type: ::PM_MATCH_LAST_LINE_NODE
1709
1710 Flags (#pm_regular_expression_flags):
1711 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
1712 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
1713 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
1714 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
1715 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
1716 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
1717 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
1718 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
1719 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
1720 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
1721 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
1722
1723 @extends pm_node_t
1724*/
1725pub type pm_match_last_line_node_t = pm_match_last_line_node;
1726/** MatchPredicateNode
1727
1728 Represents the use of the modifier `in` operator.
1729
1730``` ruby
1731 foo in bar
1732 ^^^^^^^^^^
1733```
1734
1735 Type: ::PM_MATCH_PREDICATE_NODE
1736
1737 @extends pm_node_t
1738*/
1739pub type pm_match_predicate_node_t = pm_match_predicate_node;
1740/** MatchRequiredNode
1741
1742 Represents the use of the `=>` operator.
1743
1744``` ruby
1745 foo => bar
1746 ^^^^^^^^^^
1747```
1748
1749 Type: ::PM_MATCH_REQUIRED_NODE
1750
1751 @extends pm_node_t
1752*/
1753pub type pm_match_required_node_t = pm_match_required_node;
1754/** MatchWriteNode
1755
1756 Represents writing local variables using a regular expression match with named capture groups.
1757
1758``` ruby
1759 /(?<foo>bar)/ =~ baz
1760 ^^^^^^^^^^^^^^^^^^^^
1761```
1762
1763 Type: ::PM_MATCH_WRITE_NODE
1764
1765 @extends pm_node_t
1766*/
1767pub type pm_match_write_node_t = pm_match_write_node;
1768/** ModuleNode
1769
1770 Represents a module declaration involving the `module` keyword.
1771
1772``` ruby
1773 module Foo end
1774 ^^^^^^^^^^^^^^
1775```
1776
1777 Type: ::PM_MODULE_NODE
1778
1779 @extends pm_node_t
1780*/
1781pub type pm_module_node_t = pm_module_node;
1782/** MultiTargetNode
1783
1784 Represents a multi-target expression.
1785
1786``` ruby
1787 a, (b, c) = 1, 2, 3
1788    ^^^^^^
1789```
1790
1791 This can be a part of `MultiWriteNode` as above, or the target of a `for` loop
1792
1793``` ruby
1794 for a, b in [[1, 2], [3, 4]]
1795     ^^^^
1796```
1797
1798 Type: ::PM_MULTI_TARGET_NODE
1799
1800 @extends pm_node_t
1801*/
1802pub type pm_multi_target_node_t = pm_multi_target_node;
1803/** MultiWriteNode
1804
1805 Represents a write to a multi-target expression.
1806
1807``` ruby
1808 a, b, c = 1, 2, 3
1809 ^^^^^^^^^^^^^^^^^
1810```
1811
1812 Type: ::PM_MULTI_WRITE_NODE
1813
1814 @extends pm_node_t
1815*/
1816pub type pm_multi_write_node_t = pm_multi_write_node;
1817/** NextNode
1818
1819 Represents the use of the `next` keyword.
1820
1821``` ruby
1822 next 1
1823 ^^^^^^
1824```
1825
1826 Type: ::PM_NEXT_NODE
1827
1828 @extends pm_node_t
1829*/
1830pub type pm_next_node_t = pm_next_node;
1831/** NilNode
1832
1833 Represents the use of the `nil` keyword.
1834
1835``` ruby
1836 nil
1837 ^^^
1838```
1839
1840 Type: ::PM_NIL_NODE
1841
1842 @extends pm_node_t
1843*/
1844pub type pm_nil_node_t = pm_nil_node;
1845/** NoBlockParameterNode
1846
1847 Represents the use of `&nil` inside method arguments.
1848
1849``` ruby
1850 def a(&nil)
1851       ^^^^
1852 end
1853```
1854
1855 Type: ::PM_NO_BLOCK_PARAMETER_NODE
1856
1857 @extends pm_node_t
1858*/
1859pub type pm_no_block_parameter_node_t = pm_no_block_parameter_node;
1860/** NoKeywordsParameterNode
1861
1862 Represents the use of `**nil` inside method arguments.
1863
1864``` ruby
1865 def a(**nil)
1866       ^^^^^
1867 end
1868```
1869
1870 Type: ::PM_NO_KEYWORDS_PARAMETER_NODE
1871
1872 @extends pm_node_t
1873*/
1874pub type pm_no_keywords_parameter_node_t = pm_no_keywords_parameter_node;
1875/** NumberedParametersNode
1876
1877 Represents an implicit set of parameters through the use of numbered parameters within a block or lambda.
1878
1879``` ruby
1880 -> { _1 + _2 }
1881 ^^^^^^^^^^^^^^
1882```
1883
1884 Type: ::PM_NUMBERED_PARAMETERS_NODE
1885
1886 @extends pm_node_t
1887*/
1888pub type pm_numbered_parameters_node_t = pm_numbered_parameters_node;
1889/** NumberedReferenceReadNode
1890
1891 Represents reading a numbered reference to a capture in the previous match.
1892
1893``` ruby
1894 $1
1895 ^^
1896```
1897
1898 Type: ::PM_NUMBERED_REFERENCE_READ_NODE
1899
1900 @extends pm_node_t
1901*/
1902pub type pm_numbered_reference_read_node_t = pm_numbered_reference_read_node;
1903/** OptionalKeywordParameterNode
1904
1905 Represents an optional keyword parameter to a method, block, or lambda definition.
1906
1907``` ruby
1908 def a(b: 1)
1909       ^^^^
1910 end
1911```
1912
1913 Type: ::PM_OPTIONAL_KEYWORD_PARAMETER_NODE
1914
1915 Flags (#pm_parameter_flags):
1916 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
1917
1918 @extends pm_node_t
1919*/
1920pub type pm_optional_keyword_parameter_node_t = pm_optional_keyword_parameter_node;
1921/** OptionalParameterNode
1922
1923 Represents an optional parameter to a method, block, or lambda definition.
1924
1925``` ruby
1926 def a(b = 1)
1927       ^^^^^
1928 end
1929```
1930
1931 Type: ::PM_OPTIONAL_PARAMETER_NODE
1932
1933 Flags (#pm_parameter_flags):
1934 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
1935
1936 @extends pm_node_t
1937*/
1938pub type pm_optional_parameter_node_t = pm_optional_parameter_node;
1939/** OrNode
1940
1941 Represents the use of the `||` operator or the `or` keyword.
1942
1943``` ruby
1944 left or right
1945 ^^^^^^^^^^^^^
1946```
1947
1948 Type: ::PM_OR_NODE
1949
1950 @extends pm_node_t
1951*/
1952pub type pm_or_node_t = pm_or_node;
1953/** ParametersNode
1954
1955 Represents the list of parameters on a method, block, or lambda definition.
1956
1957``` ruby
1958 def a(b, c, d)
1959       ^^^^^^^
1960 end
1961```
1962
1963 Type: ::PM_PARAMETERS_NODE
1964
1965 @extends pm_node_t
1966*/
1967pub type pm_parameters_node_t = pm_parameters_node;
1968/** ParenthesesNode
1969
1970 Represents a parenthesized expression
1971
1972``` ruby
1973 (10 + 34)
1974 ^^^^^^^^^
1975```
1976
1977 Type: ::PM_PARENTHESES_NODE
1978
1979 Flags (#pm_parentheses_node_flags):
1980 * ::PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS
1981
1982 @extends pm_node_t
1983*/
1984pub type pm_parentheses_node_t = pm_parentheses_node;
1985/** PinnedExpressionNode
1986
1987 Represents the use of the `^` operator for pinning an expression in a pattern matching expression.
1988
1989``` ruby
1990 foo in ^(bar)
1991        ^^^^^^
1992```
1993
1994 Type: ::PM_PINNED_EXPRESSION_NODE
1995
1996 @extends pm_node_t
1997*/
1998pub type pm_pinned_expression_node_t = pm_pinned_expression_node;
1999/** PinnedVariableNode
2000
2001 Represents the use of the `^` operator for pinning a variable in a pattern matching expression.
2002
2003``` ruby
2004 foo in ^bar
2005        ^^^^
2006```
2007
2008 Type: ::PM_PINNED_VARIABLE_NODE
2009
2010 @extends pm_node_t
2011*/
2012pub type pm_pinned_variable_node_t = pm_pinned_variable_node;
2013/** PostExecutionNode
2014
2015 Represents the use of the `END` keyword.
2016
2017``` ruby
2018 END { foo }
2019 ^^^^^^^^^^^
2020```
2021
2022 Type: ::PM_POST_EXECUTION_NODE
2023
2024 @extends pm_node_t
2025*/
2026pub type pm_post_execution_node_t = pm_post_execution_node;
2027/** PreExecutionNode
2028
2029 Represents the use of the `BEGIN` keyword.
2030
2031``` ruby
2032 BEGIN { foo }
2033 ^^^^^^^^^^^^^
2034```
2035
2036 Type: ::PM_PRE_EXECUTION_NODE
2037
2038 @extends pm_node_t
2039*/
2040pub type pm_pre_execution_node_t = pm_pre_execution_node;
2041/** ProgramNode
2042
2043 The top level node of any parse tree.
2044
2045 Type: ::PM_PROGRAM_NODE
2046
2047 @extends pm_node_t
2048*/
2049pub type pm_program_node_t = pm_program_node;
2050/** RangeNode
2051
2052 Represents the use of the `..` or `...` operators.
2053
2054``` ruby
2055 1..2
2056 ^^^^
2057```
2058
2059``` ruby
2060 c if a =~ /left/ ... b =~ /right/
2061      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2062```
2063
2064 Type: ::PM_RANGE_NODE
2065
2066 Flags (#pm_range_flags):
2067 * ::PM_RANGE_FLAGS_EXCLUDE_END
2068
2069 @extends pm_node_t
2070*/
2071pub type pm_range_node_t = pm_range_node;
2072/** RationalNode
2073
2074 Represents a rational number literal.
2075
2076``` ruby
2077 1.0r
2078 ^^^^
2079```
2080
2081 Type: ::PM_RATIONAL_NODE
2082
2083 Flags (#pm_integer_base_flags):
2084 * ::PM_INTEGER_BASE_FLAGS_BINARY
2085 * ::PM_INTEGER_BASE_FLAGS_DECIMAL
2086 * ::PM_INTEGER_BASE_FLAGS_OCTAL
2087 * ::PM_INTEGER_BASE_FLAGS_HEXADECIMAL
2088
2089 @extends pm_node_t
2090*/
2091pub type pm_rational_node_t = pm_rational_node;
2092/** RedoNode
2093
2094 Represents the use of the `redo` keyword.
2095
2096``` ruby
2097 redo
2098 ^^^^
2099```
2100
2101 Type: ::PM_REDO_NODE
2102
2103 @extends pm_node_t
2104*/
2105pub type pm_redo_node_t = pm_redo_node;
2106/** RegularExpressionNode
2107
2108 Represents a regular expression literal with no interpolation.
2109
2110``` ruby
2111 /foo/i
2112 ^^^^^^
2113```
2114
2115 Type: ::PM_REGULAR_EXPRESSION_NODE
2116
2117 Flags (#pm_regular_expression_flags):
2118 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
2119 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
2120 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
2121 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
2122 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
2123 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
2124 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
2125 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
2126 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
2127 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
2128 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
2129
2130 @extends pm_node_t
2131*/
2132pub type pm_regular_expression_node_t = pm_regular_expression_node;
2133/** RequiredKeywordParameterNode
2134
2135 Represents a required keyword parameter to a method, block, or lambda definition.
2136
2137``` ruby
2138 def a(b: )
2139       ^^
2140 end
2141```
2142
2143 Type: ::PM_REQUIRED_KEYWORD_PARAMETER_NODE
2144
2145 Flags (#pm_parameter_flags):
2146 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
2147
2148 @extends pm_node_t
2149*/
2150pub type pm_required_keyword_parameter_node_t = pm_required_keyword_parameter_node;
2151/** RequiredParameterNode
2152
2153 Represents a required parameter to a method, block, or lambda definition.
2154
2155``` ruby
2156 def a(b)
2157       ^
2158 end
2159```
2160
2161 Type: ::PM_REQUIRED_PARAMETER_NODE
2162
2163 Flags (#pm_parameter_flags):
2164 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
2165
2166 @extends pm_node_t
2167*/
2168pub type pm_required_parameter_node_t = pm_required_parameter_node;
2169/** RescueModifierNode
2170
2171 Represents an expression modified with a rescue.
2172
2173``` ruby
2174 foo rescue nil
2175 ^^^^^^^^^^^^^^
2176```
2177
2178 Type: ::PM_RESCUE_MODIFIER_NODE
2179
2180 @extends pm_node_t
2181*/
2182pub type pm_rescue_modifier_node_t = pm_rescue_modifier_node;
2183/** RescueNode
2184
2185 Represents a rescue statement.
2186
2187``` ruby
2188 begin
2189 rescue Foo, *splat, Bar => ex
2190   foo
2191 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2192 end
2193```
2194
2195 `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
2196
2197 Type: ::PM_RESCUE_NODE
2198
2199 @extends pm_node_t
2200*/
2201pub type pm_rescue_node_t = pm_rescue_node;
2202/** RestParameterNode
2203
2204 Represents a rest parameter to a method, block, or lambda definition.
2205
2206``` ruby
2207 def a(*b)
2208       ^^
2209 end
2210```
2211
2212 Type: ::PM_REST_PARAMETER_NODE
2213
2214 Flags (#pm_parameter_flags):
2215 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
2216
2217 @extends pm_node_t
2218*/
2219pub type pm_rest_parameter_node_t = pm_rest_parameter_node;
2220/** RetryNode
2221
2222 Represents the use of the `retry` keyword.
2223
2224``` ruby
2225 retry
2226 ^^^^^
2227```
2228
2229 Type: ::PM_RETRY_NODE
2230
2231 @extends pm_node_t
2232*/
2233pub type pm_retry_node_t = pm_retry_node;
2234/** ReturnNode
2235
2236 Represents the use of the `return` keyword.
2237
2238``` ruby
2239 return 1
2240 ^^^^^^^^
2241```
2242
2243 Type: ::PM_RETURN_NODE
2244
2245 @extends pm_node_t
2246*/
2247pub type pm_return_node_t = pm_return_node;
2248/** SelfNode
2249
2250 Represents the `self` keyword.
2251
2252``` ruby
2253 self
2254 ^^^^
2255```
2256
2257 Type: ::PM_SELF_NODE
2258
2259 @extends pm_node_t
2260*/
2261pub type pm_self_node_t = pm_self_node;
2262/** ShareableConstantNode
2263
2264 This node wraps a constant write to indicate that when the value is written, it should have its shareability state modified.
2265
2266``` ruby
2267 # shareable_constant_value: literal
2268 C = { a: 1 }
2269 ^^^^^^^^^^^^
2270```
2271
2272 Type: ::PM_SHAREABLE_CONSTANT_NODE
2273
2274 Flags (#pm_shareable_constant_node_flags):
2275 * ::PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL
2276 * ::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING
2277 * ::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY
2278
2279 @extends pm_node_t
2280*/
2281pub type pm_shareable_constant_node_t = pm_shareable_constant_node;
2282/** SingletonClassNode
2283
2284 Represents a singleton class declaration involving the `class` keyword.
2285
2286``` ruby
2287 class << self end
2288 ^^^^^^^^^^^^^^^^^
2289```
2290
2291 Type: ::PM_SINGLETON_CLASS_NODE
2292
2293 @extends pm_node_t
2294*/
2295pub type pm_singleton_class_node_t = pm_singleton_class_node;
2296/** SourceEncodingNode
2297
2298 Represents the use of the `__ENCODING__` keyword.
2299
2300``` ruby
2301 __ENCODING__
2302 ^^^^^^^^^^^^
2303```
2304
2305 Type: ::PM_SOURCE_ENCODING_NODE
2306
2307 @extends pm_node_t
2308*/
2309pub type pm_source_encoding_node_t = pm_source_encoding_node;
2310/** SourceFileNode
2311
2312 Represents the use of the `__FILE__` keyword.
2313
2314``` ruby
2315 __FILE__
2316 ^^^^^^^^
2317```
2318
2319 Type: ::PM_SOURCE_FILE_NODE
2320
2321 Flags (#pm_string_flags):
2322 * ::PM_STRING_FLAGS_FORCED_UTF8_ENCODING
2323 * ::PM_STRING_FLAGS_FORCED_BINARY_ENCODING
2324 * ::PM_STRING_FLAGS_FROZEN
2325 * ::PM_STRING_FLAGS_MUTABLE
2326
2327 @extends pm_node_t
2328*/
2329pub type pm_source_file_node_t = pm_source_file_node;
2330/** SourceLineNode
2331
2332 Represents the use of the `__LINE__` keyword.
2333
2334``` ruby
2335 __LINE__
2336 ^^^^^^^^
2337```
2338
2339 Type: ::PM_SOURCE_LINE_NODE
2340
2341 @extends pm_node_t
2342*/
2343pub type pm_source_line_node_t = pm_source_line_node;
2344/** SplatNode
2345
2346 Represents the use of the splat operator.
2347
2348``` ruby
2349 [*a]
2350  ^^
2351```
2352
2353 Type: ::PM_SPLAT_NODE
2354
2355 @extends pm_node_t
2356*/
2357pub type pm_splat_node_t = pm_splat_node;
2358/** StatementsNode
2359
2360 Represents a set of statements contained within some scope.
2361
2362``` ruby
2363 foo; bar; baz
2364 ^^^^^^^^^^^^^
2365```
2366
2367 Type: ::PM_STATEMENTS_NODE
2368
2369 @extends pm_node_t
2370*/
2371pub type pm_statements_node_t = pm_statements_node;
2372/** StringNode
2373
2374 Represents a string literal, a string contained within a `%w` list, or plain string content within an interpolated string.
2375
2376``` ruby
2377 "foo"
2378 ^^^^^
2379```
2380
2381``` ruby
2382 %w[foo]
2383    ^^^
2384```
2385
2386``` ruby
2387 "foo #{bar} baz"
2388  ^^^^      ^^^^
2389```
2390
2391 Type: ::PM_STRING_NODE
2392
2393 Flags (#pm_string_flags):
2394 * ::PM_STRING_FLAGS_FORCED_UTF8_ENCODING
2395 * ::PM_STRING_FLAGS_FORCED_BINARY_ENCODING
2396 * ::PM_STRING_FLAGS_FROZEN
2397 * ::PM_STRING_FLAGS_MUTABLE
2398
2399 @extends pm_node_t
2400*/
2401pub type pm_string_node_t = pm_string_node;
2402/** SuperNode
2403
2404 Represents the use of the `super` keyword with parentheses or arguments.
2405
2406``` ruby
2407 super()
2408 ^^^^^^^
2409```
2410
2411``` ruby
2412 super foo, bar
2413 ^^^^^^^^^^^^^^
2414```
2415
2416 If no arguments are provided (except for a block), it would be a `ForwardingSuperNode` instead.
2417
2418 Type: ::PM_SUPER_NODE
2419
2420 @extends pm_node_t
2421*/
2422pub type pm_super_node_t = pm_super_node;
2423/** SymbolNode
2424
2425 Represents a symbol literal or a symbol contained within a `%i` list.
2426
2427``` ruby
2428 :foo
2429 ^^^^
2430```
2431
2432``` ruby
2433 %i[foo]
2434    ^^^
2435```
2436
2437 Type: ::PM_SYMBOL_NODE
2438
2439 Flags (#pm_symbol_flags):
2440 * ::PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING
2441 * ::PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING
2442 * ::PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING
2443
2444 @extends pm_node_t
2445*/
2446pub type pm_symbol_node_t = pm_symbol_node;
2447/** TrueNode
2448
2449 Represents the use of the literal `true` keyword.
2450
2451``` ruby
2452 true
2453 ^^^^
2454```
2455
2456 Type: ::PM_TRUE_NODE
2457
2458 @extends pm_node_t
2459*/
2460pub type pm_true_node_t = pm_true_node;
2461/** UndefNode
2462
2463 Represents the use of the `undef` keyword.
2464
2465``` ruby
2466 undef :foo, :bar, :baz
2467 ^^^^^^^^^^^^^^^^^^^^^^
2468```
2469
2470 Type: ::PM_UNDEF_NODE
2471
2472 @extends pm_node_t
2473*/
2474pub type pm_undef_node_t = pm_undef_node;
2475/** UnlessNode
2476
2477 Represents the use of the `unless` keyword, either in the block form or the modifier form.
2478
2479``` ruby
2480 bar unless foo
2481 ^^^^^^^^^^^^^^
2482```
2483
2484``` ruby
2485 unless foo then bar end
2486 ^^^^^^^^^^^^^^^^^^^^^^^
2487```
2488
2489 Type: ::PM_UNLESS_NODE
2490
2491 @extends pm_node_t
2492*/
2493pub type pm_unless_node_t = pm_unless_node;
2494/** UntilNode
2495
2496 Represents the use of the `until` keyword, either in the block form or the modifier form.
2497
2498``` ruby
2499 bar until foo
2500 ^^^^^^^^^^^^^
2501```
2502
2503``` ruby
2504 until foo do bar end
2505 ^^^^^^^^^^^^^^^^^^^^
2506```
2507
2508 Type: ::PM_UNTIL_NODE
2509
2510 Flags (#pm_loop_flags):
2511 * ::PM_LOOP_FLAGS_BEGIN_MODIFIER
2512
2513 @extends pm_node_t
2514*/
2515pub type pm_until_node_t = pm_until_node;
2516/** WhenNode
2517
2518 Represents the use of the `when` keyword within a case statement.
2519
2520``` ruby
2521 case true
2522 when true
2523 ^^^^^^^^^
2524 end
2525```
2526
2527 Type: ::PM_WHEN_NODE
2528
2529 @extends pm_node_t
2530*/
2531pub type pm_when_node_t = pm_when_node;
2532/** WhileNode
2533
2534 Represents the use of the `while` keyword, either in the block form or the modifier form.
2535
2536``` ruby
2537 bar while foo
2538 ^^^^^^^^^^^^^
2539```
2540
2541``` ruby
2542 while foo do bar end
2543 ^^^^^^^^^^^^^^^^^^^^
2544```
2545
2546 Type: ::PM_WHILE_NODE
2547
2548 Flags (#pm_loop_flags):
2549 * ::PM_LOOP_FLAGS_BEGIN_MODIFIER
2550
2551 @extends pm_node_t
2552*/
2553pub type pm_while_node_t = pm_while_node;
2554/** XStringNode
2555
2556 Represents an xstring literal with no interpolation.
2557
2558``` ruby
2559 `foo`
2560 ^^^^^
2561```
2562
2563 Type: ::PM_X_STRING_NODE
2564
2565 Flags (#pm_encoding_flags):
2566 * ::PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING
2567 * ::PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING
2568
2569 @extends pm_node_t
2570*/
2571pub type pm_x_string_node_t = pm_x_string_node;
2572/** YieldNode
2573
2574 Represents the use of the `yield` keyword.
2575
2576``` ruby
2577 yield 1
2578 ^^^^^^^
2579```
2580
2581 Type: ::PM_YIELD_NODE
2582
2583 @extends pm_node_t
2584*/
2585pub type pm_yield_node_t = pm_yield_node;
2586/** Represents the results of a slice query.
2587*/
2588pub type pm_string_query_t = ::std::os::raw::c_int;
2589/** An opaque pointer to an arena that is used for allocations.
2590*/
2591#[repr(C)]
2592#[derive(Debug)]
2593pub struct pm_arena_t {
2594    _unused: [u8; 0],
2595}
2596/** A list of constant IDs. Usually used to represent a set of locals.
2597*/
2598#[repr(C)]
2599#[derive(Debug, Copy, Clone)]
2600pub struct pm_constant_id_list_t {
2601    /** The number of constant ids in the list.
2602*/
2603    pub size: usize,
2604    /** The number of constant ids that have been allocated in the list.
2605*/
2606    pub capacity: usize,
2607    /** The constant ids in the list.
2608*/
2609    pub ids: *mut pm_constant_id_t,
2610}
2611/** A constant in the pool which effectively stores a string.
2612*/
2613#[repr(C)]
2614#[derive(Debug)]
2615pub struct pm_constant_t {
2616    _unused: [u8; 0],
2617}
2618/** A structure represents an arbitrary-sized integer.
2619*/
2620#[repr(C)]
2621#[derive(Debug, Copy, Clone)]
2622pub struct pm_integer_t {
2623    /** The number of allocated values. length is set to 0 if the integer fits
2624 into uint32_t.
2625*/
2626    pub length: usize,
2627    /** List of 32-bit integers. Set to NULL if the integer fits into uint32_t.
2628*/
2629    pub values: *mut u32,
2630    /** Embedded value for small integer. This value is set to 0 if the value
2631 does not fit into uint32_t.
2632*/
2633    pub value: u32,
2634    /** Whether or not the integer is negative. It is stored this way so that a
2635 zeroed pm_integer_t is always positive zero.
2636*/
2637    pub negative: bool,
2638}
2639/** A view of a sequence of bytes. The string does not own the bytes, so they
2640 must remain valid for as long as the string is in use.
2641*/
2642#[repr(C)]
2643#[derive(Debug, Copy, Clone)]
2644pub struct pm_string_t {
2645    /** A pointer to the start of the string.
2646*/
2647    pub source: *const u8,
2648    /** The length of the string in bytes of memory.
2649*/
2650    pub length: usize,
2651}
2652/** This struct represents a slice in the source code, defined by an offset and
2653 a length. Note that we have confirmation that we can represent all locations
2654 within Ruby source files using 32-bit integers per:
2655
2656``` ruby
2657 https://bugs.ruby-lang.org/issues/20488#note-1
2658```
2659*/
2660#[repr(C)]
2661#[derive(Debug, Default, Copy, Clone)]
2662pub struct pm_location_t {
2663    /** The offset of the location from the start of the source.
2664*/
2665    pub start: u32,
2666    /** The length of the location.
2667*/
2668    pub length: u32,
2669}
2670/** A list of nodes in the source, most often used for lists of children.
2671*/
2672#[repr(C)]
2673#[derive(Debug, Copy, Clone)]
2674pub struct pm_node_list {
2675    /** The number of nodes in the list.
2676*/
2677    pub size: usize,
2678    /** The capacity of the list that has been allocated.
2679*/
2680    pub capacity: usize,
2681    /** The nodes in the list.
2682*/
2683    pub nodes: *mut *mut pm_node,
2684}
2685/** This is the base structure that represents a node in the syntax tree. It is
2686 embedded into every node type.
2687*/
2688#[repr(C)]
2689#[derive(Debug, Default, Copy, Clone)]
2690pub struct pm_node {
2691    /** This represents the type of the node. It somewhat maps to the nodes that
2692 existed in the original grammar and ripper, but it is not a 1:1 mapping.
2693*/
2694    pub type_: pm_node_type_t,
2695    /** This represents any flags on the node. Some are common to all nodes, and
2696 some are specific to the type of node.
2697*/
2698    pub flags: pm_node_flags_t,
2699    /** The unique identifier for this node, which is deterministic based on the
2700 source. It is used to identify unique nodes across parses. Nodes created
2701 outside of parsing have no position in the source and can use 0, which
2702 no parsed node uses.
2703*/
2704    pub node_id: u32,
2705    /** This is the location of the node in the source. It is a range of bytes
2706 containing a start and an end.
2707*/
2708    pub location: pm_location_t,
2709}
2710/** AliasGlobalVariableNode
2711
2712 Represents the use of the `alias` keyword to alias a global variable.
2713
2714``` ruby
2715 alias $foo $bar
2716 ^^^^^^^^^^^^^^^
2717```
2718
2719 Type: ::PM_ALIAS_GLOBAL_VARIABLE_NODE
2720
2721 @extends pm_node_t
2722*/
2723#[repr(C)]
2724#[derive(Debug, Copy, Clone)]
2725pub struct pm_alias_global_variable_node {
2726    /** The embedded base node.
2727*/
2728    pub base: pm_node_t,
2729    /** AliasGlobalVariableNode#new_name
2730
2731 Represents the new name of the global variable that can be used after aliasing.
2732
2733``` ruby
2734 alias $foo $bar
2735       ^^^^
2736```
2737*/
2738    pub new_name: *mut pm_node,
2739    /** AliasGlobalVariableNode#old_name
2740
2741 Represents the old name of the global variable that can be used before aliasing.
2742
2743``` ruby
2744 alias $foo $bar
2745            ^^^^
2746```
2747*/
2748    pub old_name: *mut pm_node,
2749    /** AliasGlobalVariableNode#keyword_loc
2750
2751 The Location of the `alias` keyword.
2752
2753``` ruby
2754 alias $foo $bar
2755 ^^^^^
2756```
2757*/
2758    pub keyword_loc: pm_location_t,
2759}
2760/** AliasMethodNode
2761
2762 Represents the use of the `alias` keyword to alias a method.
2763
2764``` ruby
2765 alias foo bar
2766 ^^^^^^^^^^^^^
2767```
2768
2769 Type: ::PM_ALIAS_METHOD_NODE
2770
2771 @extends pm_node_t
2772*/
2773#[repr(C)]
2774#[derive(Debug, Copy, Clone)]
2775pub struct pm_alias_method_node {
2776    /** The embedded base node.
2777*/
2778    pub base: pm_node_t,
2779    /** AliasMethodNode#new_name
2780
2781 Represents the new name of the method that will be aliased.
2782
2783``` ruby
2784 alias foo bar
2785       ^^^
2786```
2787
2788``` ruby
2789 alias :foo :bar
2790       ^^^^
2791```
2792
2793``` ruby
2794 alias :"#{foo}" :"#{bar}"
2795       ^^^^^^^^^
2796```
2797*/
2798    pub new_name: *mut pm_node,
2799    /** AliasMethodNode#old_name
2800
2801 Represents the old name of the method that will be aliased.
2802
2803``` ruby
2804 alias foo bar
2805           ^^^
2806```
2807
2808``` ruby
2809 alias :foo :bar
2810            ^^^^
2811```
2812
2813``` ruby
2814 alias :"#{foo}" :"#{bar}"
2815                 ^^^^^^^^^
2816```
2817*/
2818    pub old_name: *mut pm_node,
2819    /** AliasMethodNode#keyword_loc
2820
2821 Represents the Location of the `alias` keyword.
2822
2823``` ruby
2824 alias foo bar
2825 ^^^^^
2826```
2827*/
2828    pub keyword_loc: pm_location_t,
2829}
2830/** AlternationPatternNode
2831
2832 Represents an alternation pattern in pattern matching.
2833
2834``` ruby
2835 foo => bar | baz
2836        ^^^^^^^^^
2837```
2838
2839 Type: ::PM_ALTERNATION_PATTERN_NODE
2840
2841 @extends pm_node_t
2842*/
2843#[repr(C)]
2844#[derive(Debug, Copy, Clone)]
2845pub struct pm_alternation_pattern_node {
2846    /** The embedded base node.
2847*/
2848    pub base: pm_node_t,
2849    /** AlternationPatternNode#left
2850
2851 Represents the left side of the expression.
2852
2853``` ruby
2854 foo => bar | baz
2855        ^^^
2856```
2857*/
2858    pub left: *mut pm_node,
2859    /** AlternationPatternNode#right
2860
2861 Represents the right side of the expression.
2862
2863``` ruby
2864 foo => bar | baz
2865              ^^^
2866```
2867*/
2868    pub right: *mut pm_node,
2869    /** AlternationPatternNode#operator_loc
2870
2871 Represents the alternation operator Location.
2872
2873``` ruby
2874 foo => bar | baz
2875            ^
2876```
2877*/
2878    pub operator_loc: pm_location_t,
2879}
2880/** AndNode
2881
2882 Represents the use of the `&&` operator or the `and` keyword.
2883
2884``` ruby
2885 left and right
2886 ^^^^^^^^^^^^^^
2887```
2888
2889 Type: ::PM_AND_NODE
2890
2891 @extends pm_node_t
2892*/
2893#[repr(C)]
2894#[derive(Debug, Copy, Clone)]
2895pub struct pm_and_node {
2896    /** The embedded base node.
2897*/
2898    pub base: pm_node_t,
2899    /** AndNode#left
2900
2901 Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
2902
2903``` ruby
2904 left and right
2905 ^^^^
2906```
2907
2908``` ruby
2909 1 && 2
2910 ^
2911```
2912*/
2913    pub left: *mut pm_node,
2914    /** AndNode#right
2915
2916 Represents the right side of the expression.
2917
2918``` ruby
2919 left && right
2920         ^^^^^
2921```
2922
2923``` ruby
2924 1 and 2
2925       ^
2926```
2927*/
2928    pub right: *mut pm_node,
2929    /** AndNode#operator_loc
2930
2931 The Location of the `and` keyword or the `&&` operator.
2932
2933``` ruby
2934 left and right
2935      ^^^
2936```
2937*/
2938    pub operator_loc: pm_location_t,
2939}
2940/** ArgumentsNode
2941
2942 Represents a set of arguments to a method or a keyword.
2943
2944``` ruby
2945 return foo, bar, baz
2946        ^^^^^^^^^^^^^
2947```
2948
2949 Type: ::PM_ARGUMENTS_NODE
2950
2951 Flags (#pm_arguments_node_flags):
2952 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING
2953 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS
2954 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT
2955 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT
2956 * ::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS
2957
2958 @extends pm_node_t
2959*/
2960#[repr(C)]
2961#[derive(Debug, Copy, Clone)]
2962pub struct pm_arguments_node {
2963    /** The embedded base node.
2964*/
2965    pub base: pm_node_t,
2966    /** ArgumentsNode#arguments
2967
2968 The list of arguments, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
2969
2970``` ruby
2971 foo(bar, baz)
2972     ^^^^^^^^
2973```
2974*/
2975    pub arguments: pm_node_list,
2976}
2977/** ArrayNode
2978
2979 Represents an array literal. This can be a regular array using brackets or a special array using % like %w or %i.
2980
2981``` ruby
2982 [1, 2, 3]
2983 ^^^^^^^^^
2984```
2985
2986 Type: ::PM_ARRAY_NODE
2987
2988 Flags (#pm_array_node_flags):
2989 * ::PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT
2990
2991 @extends pm_node_t
2992*/
2993#[repr(C)]
2994#[derive(Debug, Copy, Clone)]
2995pub struct pm_array_node {
2996    /** The embedded base node.
2997*/
2998    pub base: pm_node_t,
2999    /** ArrayNode#elements
3000
3001 Represent the list of zero or more [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression) within the array.
3002*/
3003    pub elements: pm_node_list,
3004    /** ArrayNode#opening_loc
3005
3006 Represents the optional source Location for the opening token.
3007
3008``` ruby
3009 [1,2,3]                 # "["
3010 %w[foo bar baz]         # "%w["
3011 %I(apple orange banana) # "%I("
3012 foo = 1, 2, 3           # nil
3013```
3014*/
3015    pub opening_loc: pm_location_t,
3016    /** ArrayNode#closing_loc
3017
3018 Represents the optional source Location for the closing token.
3019
3020``` ruby
3021 [1,2,3]                 # "]"
3022 %w[foo bar baz]         # "]"
3023 %I(apple orange banana) # ")"
3024 foo = 1, 2, 3           # nil
3025```
3026*/
3027    pub closing_loc: pm_location_t,
3028}
3029/** ArrayPatternNode
3030
3031 Represents an array pattern in pattern matching.
3032
3033``` ruby
3034 foo in 1, 2
3035        ^^^^
3036```
3037
3038``` ruby
3039 foo in [1, 2]
3040        ^^^^^^
3041```
3042
3043``` ruby
3044 foo in *bar
3045        ^^^^
3046```
3047
3048``` ruby
3049 foo in Bar[]
3050        ^^^^^
3051```
3052
3053``` ruby
3054 foo in Bar[1, 2, 3]
3055        ^^^^^^^^^^^^
3056```
3057
3058 Type: ::PM_ARRAY_PATTERN_NODE
3059
3060 @extends pm_node_t
3061*/
3062#[repr(C)]
3063#[derive(Debug, Copy, Clone)]
3064pub struct pm_array_pattern_node {
3065    /** The embedded base node.
3066*/
3067    pub base: pm_node_t,
3068    /** ArrayPatternNode#constant
3069
3070 Represents the optional constant preceding the Array
3071
3072``` ruby
3073 foo in Bar[]
3074        ^^^
3075```
3076
3077``` ruby
3078 foo in Bar[1, 2, 3]
3079        ^^^
3080```
3081
3082``` ruby
3083 foo in Bar::Baz[1, 2, 3]
3084        ^^^^^^^^
3085```
3086*/
3087    pub constant: *mut pm_node,
3088    /** ArrayPatternNode#requireds
3089
3090 Represents the required elements of the array pattern.
3091
3092``` ruby
3093 foo in [1, 2]
3094         ^  ^
3095```
3096*/
3097    pub requireds: pm_node_list,
3098    /** ArrayPatternNode#rest
3099
3100 Represents the rest element of the array pattern.
3101
3102``` ruby
3103 foo in *bar
3104        ^^^^
3105```
3106*/
3107    pub rest: *mut pm_node,
3108    /** ArrayPatternNode#posts
3109
3110 Represents the elements after the rest element of the array pattern.
3111
3112``` ruby
3113 foo in *bar, baz
3114              ^^^
3115```
3116*/
3117    pub posts: pm_node_list,
3118    /** ArrayPatternNode#opening_loc
3119
3120 Represents the opening Location of the array pattern.
3121
3122``` ruby
3123 foo in [1, 2]
3124        ^
3125```
3126*/
3127    pub opening_loc: pm_location_t,
3128    /** ArrayPatternNode#closing_loc
3129
3130 Represents the closing Location of the array pattern.
3131
3132``` ruby
3133 foo in [1, 2]
3134             ^
3135```
3136*/
3137    pub closing_loc: pm_location_t,
3138}
3139/** AssocNode
3140
3141 Represents a hash key/value pair.
3142
3143``` ruby
3144 { a => b }
3145   ^^^^^^
3146```
3147
3148 Type: ::PM_ASSOC_NODE
3149
3150 @extends pm_node_t
3151*/
3152#[repr(C)]
3153#[derive(Debug, Copy, Clone)]
3154pub struct pm_assoc_node {
3155    /** The embedded base node.
3156*/
3157    pub base: pm_node_t,
3158    /** AssocNode#key
3159
3160 The key of the association. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3161
3162``` ruby
3163 { a: b }
3164   ^
3165```
3166
3167``` ruby
3168 { foo => bar }
3169   ^^^
3170```
3171
3172``` ruby
3173 { def a; end => 1 }
3174   ^^^^^^^^^^
3175```
3176*/
3177    pub key: *mut pm_node,
3178    /** AssocNode#value
3179
3180 The value of the association, if present. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3181
3182``` ruby
3183 { foo => bar }
3184          ^^^
3185```
3186
3187``` ruby
3188 { x: 1 }
3189      ^
3190```
3191*/
3192    pub value: *mut pm_node,
3193    /** AssocNode#operator_loc
3194
3195 The Location of the `=>` operator, if present.
3196
3197``` ruby
3198 { foo => bar }
3199       ^^
3200```
3201*/
3202    pub operator_loc: pm_location_t,
3203}
3204/** AssocSplatNode
3205
3206 Represents a splat in a hash literal.
3207
3208``` ruby
3209 { **foo }
3210   ^^^^^
3211```
3212
3213 Type: ::PM_ASSOC_SPLAT_NODE
3214
3215 @extends pm_node_t
3216*/
3217#[repr(C)]
3218#[derive(Debug, Copy, Clone)]
3219pub struct pm_assoc_splat_node {
3220    /** The embedded base node.
3221*/
3222    pub base: pm_node_t,
3223    /** AssocSplatNode#value
3224
3225 The value to be splatted, if present. Will be missing when keyword rest argument forwarding is used.
3226
3227``` ruby
3228 { **foo }
3229     ^^^
3230```
3231*/
3232    pub value: *mut pm_node,
3233    /** AssocSplatNode#operator_loc
3234
3235 The Location of the `**` operator.
3236
3237``` ruby
3238 { **x }
3239   ^^
3240```
3241*/
3242    pub operator_loc: pm_location_t,
3243}
3244/** BackReferenceReadNode
3245
3246 Represents reading a reference to a field in the previous match.
3247
3248``` ruby
3249 $'
3250 ^^
3251```
3252
3253 Type: ::PM_BACK_REFERENCE_READ_NODE
3254
3255 @extends pm_node_t
3256*/
3257#[repr(C)]
3258#[derive(Debug, Default, Copy, Clone)]
3259pub struct pm_back_reference_read_node {
3260    /** The embedded base node.
3261*/
3262    pub base: pm_node_t,
3263    /** BackReferenceReadNode#name
3264
3265 The name of the back-reference variable, including the leading `$`.
3266
3267``` ruby
3268 $& # name `:$&`
3269```
3270
3271``` ruby
3272 $+ # name `:$+`
3273```
3274*/
3275    pub name: pm_constant_id_t,
3276}
3277/** BeginNode
3278
3279 Represents a begin statement.
3280
3281``` ruby
3282 begin
3283   foo
3284 end
3285 ^^^^^
3286```
3287
3288 Type: ::PM_BEGIN_NODE
3289
3290 @extends pm_node_t
3291*/
3292#[repr(C)]
3293#[derive(Debug, Copy, Clone)]
3294pub struct pm_begin_node {
3295    /** The embedded base node.
3296*/
3297    pub base: pm_node_t,
3298    /** BeginNode#begin_keyword_loc
3299
3300 Represents the Location of the `begin` keyword.
3301
3302``` ruby
3303 begin x end
3304 ^^^^^
3305```
3306*/
3307    pub begin_keyword_loc: pm_location_t,
3308    /** BeginNode#statements
3309
3310 Represents the statements within the begin block.
3311
3312``` ruby
3313 begin x end
3314       ^
3315```
3316*/
3317    pub statements: *mut pm_statements_node,
3318    /** BeginNode#rescue_clause
3319
3320 Represents the rescue clause within the begin block.
3321
3322``` ruby
3323 begin x; rescue y; end
3324          ^^^^^^^^
3325```
3326*/
3327    pub rescue_clause: *mut pm_rescue_node,
3328    /** BeginNode#else_clause
3329
3330 Represents the else clause within the begin block.
3331
3332``` ruby
3333 begin x; rescue y; else z; end
3334                    ^^^^^^^^^^^
3335```
3336*/
3337    pub else_clause: *mut pm_else_node,
3338    /** BeginNode#ensure_clause
3339
3340 Represents the ensure clause within the begin block.
3341
3342``` ruby
3343 begin x; ensure y; end
3344          ^^^^^^^^
3345```
3346*/
3347    pub ensure_clause: *mut pm_ensure_node,
3348    /** BeginNode#end_keyword_loc
3349
3350 Represents the Location of the `end` keyword.
3351
3352``` ruby
3353 begin x end
3354         ^^^
3355```
3356*/
3357    pub end_keyword_loc: pm_location_t,
3358}
3359/** BlockArgumentNode
3360
3361 Represents a block argument using `&`.
3362
3363``` ruby
3364 bar(&args)
3365     ^^^^^
3366```
3367
3368 Type: ::PM_BLOCK_ARGUMENT_NODE
3369
3370 @extends pm_node_t
3371*/
3372#[repr(C)]
3373#[derive(Debug, Copy, Clone)]
3374pub struct pm_block_argument_node {
3375    /** The embedded base node.
3376*/
3377    pub base: pm_node_t,
3378    /** BlockArgumentNode#expression
3379
3380 The expression that is being passed as a block argument. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3381
3382``` ruby
3383 foo(&args)
3384      ^^^^
3385```
3386*/
3387    pub expression: *mut pm_node,
3388    /** BlockArgumentNode#operator_loc
3389
3390 Represents the Location of the `&` operator.
3391
3392``` ruby
3393 foo(&args)
3394     ^
3395```
3396*/
3397    pub operator_loc: pm_location_t,
3398}
3399/** BlockLocalVariableNode
3400
3401 Represents a block local variable.
3402
3403``` ruby
3404 a { |; b| }
3405        ^
3406```
3407
3408 Type: ::PM_BLOCK_LOCAL_VARIABLE_NODE
3409
3410 Flags (#pm_parameter_flags):
3411 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
3412
3413 @extends pm_node_t
3414*/
3415#[repr(C)]
3416#[derive(Debug, Default, Copy, Clone)]
3417pub struct pm_block_local_variable_node {
3418    /** The embedded base node.
3419*/
3420    pub base: pm_node_t,
3421    /** BlockLocalVariableNode#name
3422
3423 The name of the block local variable.
3424
3425``` ruby
3426 a { |; b| } # name `:b`
3427        ^
3428```
3429*/
3430    pub name: pm_constant_id_t,
3431}
3432/** BlockNode
3433
3434 Represents a block of ruby code.
3435
3436``` ruby
3437 [1, 2, 3].each { |i| puts x }
3438                ^^^^^^^^^^^^^^
3439```
3440
3441 Type: ::PM_BLOCK_NODE
3442
3443 @extends pm_node_t
3444*/
3445#[repr(C)]
3446#[derive(Debug, Copy, Clone)]
3447pub struct pm_block_node {
3448    /** The embedded base node.
3449*/
3450    pub base: pm_node_t,
3451    /** BlockNode#locals
3452
3453 The local variables declared in the block.
3454
3455``` ruby
3456 [1, 2, 3].each { |i| puts x } # locals: [:i]
3457                   ^
3458```
3459*/
3460    pub locals: pm_constant_id_list_t,
3461    /** BlockNode#parameters
3462
3463 The parameters of the block.
3464
3465``` ruby
3466 [1, 2, 3].each { |i| puts x }
3467                  ^^^
3468 [1, 2, 3].each { puts _1 }
3469                ^^^^^^^^^^^
3470 [1, 2, 3].each { puts it }
3471                ^^^^^^^^^^^
3472```
3473*/
3474    pub parameters: *mut pm_node,
3475    /** BlockNode#body
3476
3477 The body of the block.
3478
3479``` ruby
3480 [1, 2, 3].each { |i| puts x }
3481                      ^^^^^^
3482```
3483*/
3484    pub body: *mut pm_node,
3485    /** BlockNode#opening_loc
3486
3487 Represents the Location of the opening `{` or `do`.
3488
3489``` ruby
3490 [1, 2, 3].each { |i| puts x }
3491                ^
3492```
3493*/
3494    pub opening_loc: pm_location_t,
3495    /** BlockNode#closing_loc
3496
3497 Represents the Location of the closing `}` or `end`.
3498
3499``` ruby
3500 [1, 2, 3].each { |i| puts x }
3501                             ^
3502```
3503*/
3504    pub closing_loc: pm_location_t,
3505}
3506/** BlockParameterNode
3507
3508 Represents a block parameter of a method, block, or lambda definition.
3509
3510``` ruby
3511 def a(&b)
3512       ^^
3513 end
3514```
3515
3516 Type: ::PM_BLOCK_PARAMETER_NODE
3517
3518 Flags (#pm_parameter_flags):
3519 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
3520
3521 @extends pm_node_t
3522*/
3523#[repr(C)]
3524#[derive(Debug, Default, Copy, Clone)]
3525pub struct pm_block_parameter_node {
3526    /** The embedded base node.
3527*/
3528    pub base: pm_node_t,
3529    /** BlockParameterNode#name
3530
3531 The name of the block parameter.
3532
3533``` ruby
3534 def a(&b) # name `:b`
3535        ^
3536 end
3537```
3538*/
3539    pub name: pm_constant_id_t,
3540    /** BlockParameterNode#name_loc
3541
3542 Represents the Location of the block parameter name.
3543
3544``` ruby
3545 def a(&b)
3546        ^
3547```
3548*/
3549    pub name_loc: pm_location_t,
3550    /** BlockParameterNode#operator_loc
3551
3552 Represents the Location of the `&` operator.
3553
3554``` ruby
3555 def a(&b)
3556       ^
3557 end
3558```
3559*/
3560    pub operator_loc: pm_location_t,
3561}
3562/** BlockParametersNode
3563
3564 Represents a block's parameters declaration.
3565
3566``` ruby
3567 -> (a, b = 1; local) { }
3568    ^^^^^^^^^^^^^^^^^
3569```
3570
3571``` ruby
3572 foo do |a, b = 1; local|
3573        ^^^^^^^^^^^^^^^^^
3574 end
3575```
3576
3577 Type: ::PM_BLOCK_PARAMETERS_NODE
3578
3579 @extends pm_node_t
3580*/
3581#[repr(C)]
3582#[derive(Debug, Copy, Clone)]
3583pub struct pm_block_parameters_node {
3584    /** The embedded base node.
3585*/
3586    pub base: pm_node_t,
3587    /** BlockParametersNode#parameters
3588
3589 Represents the parameters of the block.
3590
3591``` ruby
3592 -> (a, b = 1; local) { }
3593     ^^^^^^^^
3594```
3595
3596``` ruby
3597 foo do |a, b = 1; local|
3598         ^^^^^^^^
3599 end
3600```
3601*/
3602    pub parameters: *mut pm_parameters_node,
3603    /** BlockParametersNode#locals
3604
3605 Represents the local variables of the block.
3606
3607``` ruby
3608 -> (a, b = 1; local) { }
3609               ^^^^^
3610```
3611
3612``` ruby
3613 foo do |a, b = 1; local|
3614                   ^^^^^
3615 end
3616```
3617*/
3618    pub locals: pm_node_list,
3619    /** BlockParametersNode#opening_loc
3620
3621 Represents the opening Location of the block parameters.
3622
3623``` ruby
3624 -> (a, b = 1; local) { }
3625    ^
3626```
3627
3628``` ruby
3629 foo do |a, b = 1; local|
3630        ^
3631 end
3632```
3633*/
3634    pub opening_loc: pm_location_t,
3635    /** BlockParametersNode#closing_loc
3636
3637 Represents the closing Location of the block parameters.
3638
3639``` ruby
3640 -> (a, b = 1; local) { }
3641                    ^
3642```
3643
3644``` ruby
3645 foo do |a, b = 1; local|
3646                        ^
3647 end
3648```
3649*/
3650    pub closing_loc: pm_location_t,
3651}
3652/** BreakNode
3653
3654 Represents the use of the `break` keyword.
3655
3656``` ruby
3657 break foo
3658 ^^^^^^^^^
3659```
3660
3661 Type: ::PM_BREAK_NODE
3662
3663 @extends pm_node_t
3664*/
3665#[repr(C)]
3666#[derive(Debug, Copy, Clone)]
3667pub struct pm_break_node {
3668    /** The embedded base node.
3669*/
3670    pub base: pm_node_t,
3671    /** BreakNode#arguments
3672
3673 The arguments to the break statement, if present. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3674
3675``` ruby
3676 break foo
3677       ^^^
3678```
3679*/
3680    pub arguments: *mut pm_arguments_node,
3681    /** BreakNode#keyword_loc
3682
3683 The Location of the `break` keyword.
3684
3685``` ruby
3686 break foo
3687 ^^^^^
3688```
3689*/
3690    pub keyword_loc: pm_location_t,
3691}
3692/** CallAndWriteNode
3693
3694 Represents the use of the `&&=` operator on a call.
3695
3696``` ruby
3697 foo.bar &&= value
3698 ^^^^^^^^^^^^^^^^^
3699```
3700
3701 Type: ::PM_CALL_AND_WRITE_NODE
3702
3703 Flags (#pm_call_node_flags):
3704 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
3705 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
3706 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
3707 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
3708
3709 @extends pm_node_t
3710*/
3711#[repr(C)]
3712#[derive(Debug, Copy, Clone)]
3713pub struct pm_call_and_write_node {
3714    /** The embedded base node.
3715*/
3716    pub base: pm_node_t,
3717    /** CallAndWriteNode#receiver
3718
3719 The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3720
3721``` ruby
3722 foo.bar &&= value
3723 ^^^
3724```
3725*/
3726    pub receiver: *mut pm_node,
3727    /** CallAndWriteNode#call_operator_loc
3728
3729 Represents the Location of the call operator.
3730
3731``` ruby
3732 foo.bar &&= value
3733    ^
3734```
3735*/
3736    pub call_operator_loc: pm_location_t,
3737    /** CallAndWriteNode#message_loc
3738
3739 Represents the Location of the message.
3740
3741``` ruby
3742 foo.bar &&= value
3743     ^^^
3744```
3745*/
3746    pub message_loc: pm_location_t,
3747    /** CallAndWriteNode#read_name
3748
3749 Represents the name of the method being called.
3750
3751``` ruby
3752 foo.bar &&= value # read_name `:bar`
3753     ^^^
3754```
3755*/
3756    pub read_name: pm_constant_id_t,
3757    /** CallAndWriteNode#write_name
3758
3759 Represents the name of the method being written to.
3760
3761``` ruby
3762 foo.bar &&= value # write_name `:bar=`
3763     ^^^
3764```
3765*/
3766    pub write_name: pm_constant_id_t,
3767    /** CallAndWriteNode#operator_loc
3768
3769 Represents the Location of the operator.
3770
3771``` ruby
3772 foo.bar &&= value
3773         ^^^
3774```
3775*/
3776    pub operator_loc: pm_location_t,
3777    /** CallAndWriteNode#value
3778
3779 Represents the value being assigned.
3780
3781``` ruby
3782 foo.bar &&= value
3783             ^^^^^
3784```
3785*/
3786    pub value: *mut pm_node,
3787}
3788/** CallNode
3789
3790 Represents a method call, in all of the various forms that can take.
3791
3792``` ruby
3793 foo
3794 ^^^
3795```
3796
3797``` ruby
3798 foo()
3799 ^^^^^
3800```
3801
3802``` ruby
3803 +foo
3804 ^^^^
3805```
3806
3807``` ruby
3808 foo + bar
3809 ^^^^^^^^^
3810```
3811
3812``` ruby
3813 foo.bar
3814 ^^^^^^^
3815```
3816
3817``` ruby
3818 foo&.bar
3819 ^^^^^^^^
3820```
3821
3822 Type: ::PM_CALL_NODE
3823
3824 Flags (#pm_call_node_flags):
3825 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
3826 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
3827 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
3828 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
3829
3830 @extends pm_node_t
3831*/
3832#[repr(C)]
3833#[derive(Debug, Copy, Clone)]
3834pub struct pm_call_node {
3835    /** The embedded base node.
3836*/
3837    pub base: pm_node_t,
3838    /** CallNode#receiver
3839
3840 The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3841
3842``` ruby
3843 foo.bar
3844 ^^^
3845```
3846
3847``` ruby
3848 +foo
3849  ^^^
3850```
3851
3852``` ruby
3853 foo + bar
3854 ^^^
3855```
3856*/
3857    pub receiver: *mut pm_node,
3858    /** CallNode#call_operator_loc
3859
3860 Represents the Location of the call operator.
3861
3862``` ruby
3863 foo.bar
3864    ^
3865```
3866
3867``` ruby
3868 foo&.bar
3869    ^^
3870```
3871*/
3872    pub call_operator_loc: pm_location_t,
3873    /** CallNode#name
3874
3875 Represents the name of the method being called.
3876
3877``` ruby
3878 foo.bar # name `:foo`
3879 ^^^
3880```
3881*/
3882    pub name: pm_constant_id_t,
3883    /** CallNode#message_loc
3884
3885 Represents the Location of the message.
3886
3887``` ruby
3888 foo.bar
3889     ^^^
3890```
3891*/
3892    pub message_loc: pm_location_t,
3893    /** CallNode#opening_loc
3894
3895 Represents the Location of the left parenthesis.
3896
3897``` ruby
3898 foo(bar)
3899    ^
3900```
3901*/
3902    pub opening_loc: pm_location_t,
3903    /** CallNode#arguments
3904
3905 Represents the arguments to the method call. These can be any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3906
3907``` ruby
3908 foo(bar)
3909     ^^^
3910```
3911*/
3912    pub arguments: *mut pm_arguments_node,
3913    /** CallNode#closing_loc
3914
3915 Represents the Location of the right parenthesis.
3916
3917``` ruby
3918 foo(bar)
3919        ^
3920```
3921*/
3922    pub closing_loc: pm_location_t,
3923    /** CallNode#equal_loc
3924
3925 Represents the Location of the equal sign, in the case that this is an attribute write.
3926
3927``` ruby
3928 foo.bar = value
3929         ^
3930```
3931
3932``` ruby
3933 foo[bar] = value
3934          ^
3935```
3936*/
3937    pub equal_loc: pm_location_t,
3938    /** CallNode#block
3939
3940 Represents the block that is being passed to the method.
3941
3942``` ruby
3943 foo { |a| a }
3944     ^^^^^^^^^
3945```
3946*/
3947    pub block: *mut pm_node,
3948}
3949/** CallOperatorWriteNode
3950
3951 Represents the use of an assignment operator on a call.
3952
3953``` ruby
3954 foo.bar += baz
3955 ^^^^^^^^^^^^^^
3956```
3957
3958 Type: ::PM_CALL_OPERATOR_WRITE_NODE
3959
3960 Flags (#pm_call_node_flags):
3961 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
3962 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
3963 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
3964 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
3965
3966 @extends pm_node_t
3967*/
3968#[repr(C)]
3969#[derive(Debug, Copy, Clone)]
3970pub struct pm_call_operator_write_node {
3971    /** The embedded base node.
3972*/
3973    pub base: pm_node_t,
3974    /** CallOperatorWriteNode#receiver
3975
3976 The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
3977
3978``` ruby
3979 foo.bar += value
3980 ^^^
3981```
3982*/
3983    pub receiver: *mut pm_node,
3984    /** CallOperatorWriteNode#call_operator_loc
3985
3986 Represents the Location of the call operator.
3987
3988``` ruby
3989 foo.bar += value
3990    ^
3991```
3992*/
3993    pub call_operator_loc: pm_location_t,
3994    /** CallOperatorWriteNode#message_loc
3995
3996 Represents the Location of the message.
3997
3998``` ruby
3999 foo.bar += value
4000     ^^^
4001```
4002*/
4003    pub message_loc: pm_location_t,
4004    /** CallOperatorWriteNode#read_name
4005
4006 Represents the name of the method being called.
4007
4008``` ruby
4009 foo.bar += value # read_name `:bar`
4010     ^^^
4011```
4012*/
4013    pub read_name: pm_constant_id_t,
4014    /** CallOperatorWriteNode#write_name
4015
4016 Represents the name of the method being written to.
4017
4018``` ruby
4019 foo.bar += value # write_name `:bar=`
4020     ^^^
4021```
4022*/
4023    pub write_name: pm_constant_id_t,
4024    /** CallOperatorWriteNode#binary_operator
4025
4026 Represents the binary operator being used.
4027
4028``` ruby
4029 foo.bar += value # binary_operator `:+`
4030         ^
4031```
4032*/
4033    pub binary_operator: pm_constant_id_t,
4034    /** CallOperatorWriteNode#binary_operator_loc
4035
4036 Represents the Location of the binary operator.
4037
4038``` ruby
4039 foo.bar += value
4040         ^^
4041```
4042*/
4043    pub binary_operator_loc: pm_location_t,
4044    /** CallOperatorWriteNode#value
4045
4046 Represents the value being assigned.
4047
4048``` ruby
4049 foo.bar += value
4050            ^^^^^
4051```
4052*/
4053    pub value: *mut pm_node,
4054}
4055/** CallOrWriteNode
4056
4057 Represents the use of the `||=` operator on a call.
4058
4059``` ruby
4060 foo.bar ||= value
4061 ^^^^^^^^^^^^^^^^^
4062```
4063
4064 Type: ::PM_CALL_OR_WRITE_NODE
4065
4066 Flags (#pm_call_node_flags):
4067 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
4068 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
4069 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
4070 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
4071
4072 @extends pm_node_t
4073*/
4074#[repr(C)]
4075#[derive(Debug, Copy, Clone)]
4076pub struct pm_call_or_write_node {
4077    /** The embedded base node.
4078*/
4079    pub base: pm_node_t,
4080    /** CallOrWriteNode#receiver
4081
4082 The object that the method is being called on. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
4083
4084``` ruby
4085 foo.bar ||= value
4086 ^^^
4087```
4088*/
4089    pub receiver: *mut pm_node,
4090    /** CallOrWriteNode#call_operator_loc
4091
4092 Represents the Location of the call operator.
4093
4094``` ruby
4095 foo.bar ||= value
4096    ^
4097```
4098*/
4099    pub call_operator_loc: pm_location_t,
4100    /** CallOrWriteNode#message_loc
4101
4102 Represents the Location of the message.
4103
4104``` ruby
4105 foo.bar ||= value
4106     ^^^
4107```
4108*/
4109    pub message_loc: pm_location_t,
4110    /** CallOrWriteNode#read_name
4111
4112 Represents the name of the method being called.
4113
4114``` ruby
4115 foo.bar ||= value # read_name `:bar`
4116     ^^^
4117```
4118*/
4119    pub read_name: pm_constant_id_t,
4120    /** CallOrWriteNode#write_name
4121
4122 Represents the name of the method being written to.
4123
4124``` ruby
4125 foo.bar ||= value # write_name `:bar=`
4126     ^^^
4127```
4128*/
4129    pub write_name: pm_constant_id_t,
4130    /** CallOrWriteNode#operator_loc
4131
4132 Represents the Location of the operator.
4133
4134``` ruby
4135 foo.bar ||= value
4136         ^^^
4137```
4138*/
4139    pub operator_loc: pm_location_t,
4140    /** CallOrWriteNode#value
4141
4142 Represents the value being assigned.
4143
4144``` ruby
4145 foo.bar ||= value
4146             ^^^^^
4147```
4148*/
4149    pub value: *mut pm_node,
4150}
4151/** CallTargetNode
4152
4153 Represents assigning to a method call.
4154
4155``` ruby
4156 foo.bar, = 1
4157 ^^^^^^^
4158```
4159
4160``` ruby
4161 begin
4162 rescue => foo.bar
4163           ^^^^^^^
4164 end
4165```
4166
4167``` ruby
4168 for foo.bar in baz do end
4169     ^^^^^^^
4170```
4171
4172 Type: ::PM_CALL_TARGET_NODE
4173
4174 Flags (#pm_call_node_flags):
4175 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
4176 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
4177 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
4178 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
4179
4180 @extends pm_node_t
4181*/
4182#[repr(C)]
4183#[derive(Debug, Copy, Clone)]
4184pub struct pm_call_target_node {
4185    /** The embedded base node.
4186*/
4187    pub base: pm_node_t,
4188    /** CallTargetNode#receiver
4189
4190 The object that the method is being called on. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
4191
4192``` ruby
4193 foo.bar = 1
4194 ^^^
4195```
4196*/
4197    pub receiver: *mut pm_node,
4198    /** CallTargetNode#call_operator_loc
4199
4200 Represents the Location of the call operator.
4201
4202``` ruby
4203 foo.bar = 1
4204    ^
4205```
4206*/
4207    pub call_operator_loc: pm_location_t,
4208    /** CallTargetNode#name
4209
4210 Represents the name of the method being called.
4211
4212``` ruby
4213 foo.bar = 1 # name `:foo`
4214 ^^^
4215```
4216*/
4217    pub name: pm_constant_id_t,
4218    /** CallTargetNode#message_loc
4219
4220 Represents the Location of the message.
4221
4222``` ruby
4223 foo.bar = 1
4224     ^^^
4225```
4226*/
4227    pub message_loc: pm_location_t,
4228}
4229/** CapturePatternNode
4230
4231 Represents assigning to a local variable in pattern matching.
4232
4233``` ruby
4234 foo => [bar => baz]
4235         ^^^^^^^^^^
4236```
4237
4238 Type: ::PM_CAPTURE_PATTERN_NODE
4239
4240 @extends pm_node_t
4241*/
4242#[repr(C)]
4243#[derive(Debug, Copy, Clone)]
4244pub struct pm_capture_pattern_node {
4245    /** The embedded base node.
4246*/
4247    pub base: pm_node_t,
4248    /** CapturePatternNode#value
4249
4250 Represents the value to capture.
4251
4252``` ruby
4253 foo => bar
4254        ^^^
4255```
4256*/
4257    pub value: *mut pm_node,
4258    /** CapturePatternNode#target
4259
4260 Represents the target of the capture.
4261
4262``` ruby
4263 foo => bar
4264 ^^^
4265```
4266*/
4267    pub target: *mut pm_local_variable_target_node,
4268    /** CapturePatternNode#operator_loc
4269
4270 Represents the Location of the `=>` operator.
4271
4272``` ruby
4273 foo => bar
4274     ^^
4275```
4276*/
4277    pub operator_loc: pm_location_t,
4278}
4279/** CaseMatchNode
4280
4281 Represents the use of a case statement for pattern matching.
4282
4283``` ruby
4284 case true
4285 in false
4286 end
4287 ^^^^^^^^^
4288```
4289
4290 Type: ::PM_CASE_MATCH_NODE
4291
4292 @extends pm_node_t
4293*/
4294#[repr(C)]
4295#[derive(Debug, Copy, Clone)]
4296pub struct pm_case_match_node {
4297    /** The embedded base node.
4298*/
4299    pub base: pm_node_t,
4300    /** CaseMatchNode#predicate
4301
4302 Represents the predicate of the case match. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
4303
4304``` ruby
4305 case true; in false; end
4306      ^^^^
4307```
4308*/
4309    pub predicate: *mut pm_node,
4310    /** CaseMatchNode#conditions
4311
4312 Represents the conditions of the case match.
4313
4314``` ruby
4315 case true; in false; end
4316            ^^^^^^^^
4317```
4318*/
4319    pub conditions: pm_node_list,
4320    /** CaseMatchNode#else_clause
4321
4322 Represents the else clause of the case match.
4323
4324``` ruby
4325 case true; in false; else; end
4326                      ^^^^^^^^^
4327```
4328*/
4329    pub else_clause: *mut pm_else_node,
4330    /** CaseMatchNode#case_keyword_loc
4331
4332 Represents the Location of the `case` keyword.
4333
4334``` ruby
4335 case true; in false; end
4336 ^^^^
4337```
4338*/
4339    pub case_keyword_loc: pm_location_t,
4340    /** CaseMatchNode#end_keyword_loc
4341
4342 Represents the Location of the `end` keyword.
4343
4344``` ruby
4345 case true; in false; end
4346                      ^^^
4347```
4348*/
4349    pub end_keyword_loc: pm_location_t,
4350}
4351/** CaseNode
4352
4353 Represents the use of a case statement.
4354
4355``` ruby
4356 case true
4357 when false
4358 end
4359 ^^^^^^^^^^
4360```
4361
4362 Type: ::PM_CASE_NODE
4363
4364 @extends pm_node_t
4365*/
4366#[repr(C)]
4367#[derive(Debug, Copy, Clone)]
4368pub struct pm_case_node {
4369    /** The embedded base node.
4370*/
4371    pub base: pm_node_t,
4372    /** CaseNode#predicate
4373
4374 Represents the predicate of the case statement. This can be either `nil` or any [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
4375
4376``` ruby
4377 case true; when false; end
4378      ^^^^
4379```
4380*/
4381    pub predicate: *mut pm_node,
4382    /** CaseNode#conditions
4383
4384 Represents the conditions of the case statement.
4385
4386``` ruby
4387 case true; when false; end
4388            ^^^^^^^^^^
4389```
4390*/
4391    pub conditions: pm_node_list,
4392    /** CaseNode#else_clause
4393
4394 Represents the else clause of the case statement.
4395
4396``` ruby
4397 case true; when false; else; end
4398                        ^^^^^^^^^
4399```
4400*/
4401    pub else_clause: *mut pm_else_node,
4402    /** CaseNode#case_keyword_loc
4403
4404 Represents the Location of the `case` keyword.
4405
4406``` ruby
4407 case true; when false; end
4408 ^^^^
4409```
4410*/
4411    pub case_keyword_loc: pm_location_t,
4412    /** CaseNode#end_keyword_loc
4413
4414 Represents the Location of the `end` keyword.
4415
4416``` ruby
4417 case true; when false; end
4418                        ^^^
4419```
4420*/
4421    pub end_keyword_loc: pm_location_t,
4422}
4423/** ClassNode
4424
4425 Represents a class declaration involving the `class` keyword.
4426
4427``` ruby
4428 class Foo end
4429 ^^^^^^^^^^^^^
4430```
4431
4432 Type: ::PM_CLASS_NODE
4433
4434 @extends pm_node_t
4435*/
4436#[repr(C)]
4437#[derive(Debug, Copy, Clone)]
4438pub struct pm_class_node {
4439    /** The embedded base node.
4440*/
4441    pub base: pm_node_t,
4442    /** ClassNode#locals
4443*/
4444    pub locals: pm_constant_id_list_t,
4445    /** ClassNode#class_keyword_loc
4446
4447 Represents the Location of the `class` keyword.
4448
4449``` ruby
4450 class Foo end
4451 ^^^^^
4452```
4453*/
4454    pub class_keyword_loc: pm_location_t,
4455    /** ClassNode#constant_path
4456*/
4457    pub constant_path: *mut pm_node,
4458    /** ClassNode#inheritance_operator_loc
4459
4460 Represents the Location of the `<` operator.
4461
4462``` ruby
4463 class Foo < Bar
4464           ^
4465```
4466*/
4467    pub inheritance_operator_loc: pm_location_t,
4468    /** ClassNode#superclass
4469
4470 Represents the superclass of the class.
4471
4472``` ruby
4473 class Foo < Bar
4474             ^^^
4475```
4476*/
4477    pub superclass: *mut pm_node,
4478    /** ClassNode#body
4479
4480 Represents the body of the class.
4481
4482``` ruby
4483 class Foo; bar; end
4484            ^^^
4485```
4486*/
4487    pub body: *mut pm_node,
4488    /** ClassNode#end_keyword_loc
4489
4490 Represents the Location of the `end` keyword.
4491
4492``` ruby
4493 class Foo end
4494           ^^^
4495```
4496*/
4497    pub end_keyword_loc: pm_location_t,
4498    /** ClassNode#name
4499
4500 The name of the class.
4501
4502``` ruby
4503 class Foo end # name `:Foo`
4504```
4505*/
4506    pub name: pm_constant_id_t,
4507}
4508/** ClassVariableAndWriteNode
4509
4510 Represents the use of the `&&=` operator for assignment to a class variable.
4511
4512``` ruby
4513 @@target &&= value
4514 ^^^^^^^^^^^^^^^^^^
4515```
4516
4517 Type: ::PM_CLASS_VARIABLE_AND_WRITE_NODE
4518
4519 @extends pm_node_t
4520*/
4521#[repr(C)]
4522#[derive(Debug, Copy, Clone)]
4523pub struct pm_class_variable_and_write_node {
4524    /** The embedded base node.
4525*/
4526    pub base: pm_node_t,
4527    /** ClassVariableAndWriteNode#name
4528
4529 The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
4530
4531``` ruby
4532 @@target &&= value # name `:@@target`
4533 ^^^^^^^^
4534```
4535*/
4536    pub name: pm_constant_id_t,
4537    /** ClassVariableAndWriteNode#name_loc
4538
4539 Represents the Location of the variable name.
4540
4541``` ruby
4542 @@target &&= value
4543 ^^^^^^^^
4544```
4545*/
4546    pub name_loc: pm_location_t,
4547    /** ClassVariableAndWriteNode#operator_loc
4548
4549 Represents the Location of the `&&=` operator.
4550
4551``` ruby
4552 @@target &&= value
4553          ^^^
4554```
4555*/
4556    pub operator_loc: pm_location_t,
4557    /** ClassVariableAndWriteNode#value
4558
4559 Represents the value being assigned. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
4560
4561``` ruby
4562 @@target &&= value
4563              ^^^^^
4564```
4565*/
4566    pub value: *mut pm_node,
4567}
4568/** ClassVariableOperatorWriteNode
4569
4570 Represents assigning to a class variable using an operator that isn't `=`.
4571
4572``` ruby
4573 @@target += value
4574 ^^^^^^^^^^^^^^^^^
4575```
4576
4577 Type: ::PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE
4578
4579 @extends pm_node_t
4580*/
4581#[repr(C)]
4582#[derive(Debug, Copy, Clone)]
4583pub struct pm_class_variable_operator_write_node {
4584    /** The embedded base node.
4585*/
4586    pub base: pm_node_t,
4587    /** ClassVariableOperatorWriteNode#name
4588*/
4589    pub name: pm_constant_id_t,
4590    /** ClassVariableOperatorWriteNode#name_loc
4591*/
4592    pub name_loc: pm_location_t,
4593    /** ClassVariableOperatorWriteNode#binary_operator_loc
4594*/
4595    pub binary_operator_loc: pm_location_t,
4596    /** ClassVariableOperatorWriteNode#value
4597*/
4598    pub value: *mut pm_node,
4599    /** ClassVariableOperatorWriteNode#binary_operator
4600*/
4601    pub binary_operator: pm_constant_id_t,
4602}
4603/** ClassVariableOrWriteNode
4604
4605 Represents the use of the `||=` operator for assignment to a class variable.
4606
4607``` ruby
4608 @@target ||= value
4609 ^^^^^^^^^^^^^^^^^^
4610```
4611
4612 Type: ::PM_CLASS_VARIABLE_OR_WRITE_NODE
4613
4614 @extends pm_node_t
4615*/
4616#[repr(C)]
4617#[derive(Debug, Copy, Clone)]
4618pub struct pm_class_variable_or_write_node {
4619    /** The embedded base node.
4620*/
4621    pub base: pm_node_t,
4622    /** ClassVariableOrWriteNode#name
4623*/
4624    pub name: pm_constant_id_t,
4625    /** ClassVariableOrWriteNode#name_loc
4626*/
4627    pub name_loc: pm_location_t,
4628    /** ClassVariableOrWriteNode#operator_loc
4629*/
4630    pub operator_loc: pm_location_t,
4631    /** ClassVariableOrWriteNode#value
4632*/
4633    pub value: *mut pm_node,
4634}
4635/** ClassVariableReadNode
4636
4637 Represents referencing a class variable.
4638
4639``` ruby
4640 @@foo
4641 ^^^^^
4642```
4643
4644 Type: ::PM_CLASS_VARIABLE_READ_NODE
4645
4646 @extends pm_node_t
4647*/
4648#[repr(C)]
4649#[derive(Debug, Default, Copy, Clone)]
4650pub struct pm_class_variable_read_node {
4651    /** The embedded base node.
4652*/
4653    pub base: pm_node_t,
4654    /** ClassVariableReadNode#name
4655
4656 The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
4657
4658``` ruby
4659 @@abc   # name `:@@abc`
4660```
4661
4662``` ruby
4663 @@_test # name `:@@_test`
4664```
4665*/
4666    pub name: pm_constant_id_t,
4667}
4668/** ClassVariableTargetNode
4669
4670 Represents writing to a class variable in a context that doesn't have an explicit value.
4671
4672``` ruby
4673 @@foo, @@bar = baz
4674 ^^^^^  ^^^^^
4675```
4676
4677 Type: ::PM_CLASS_VARIABLE_TARGET_NODE
4678
4679 @extends pm_node_t
4680*/
4681#[repr(C)]
4682#[derive(Debug, Default, Copy, Clone)]
4683pub struct pm_class_variable_target_node {
4684    /** The embedded base node.
4685*/
4686    pub base: pm_node_t,
4687    /** ClassVariableTargetNode#name
4688*/
4689    pub name: pm_constant_id_t,
4690}
4691/** ClassVariableWriteNode
4692
4693 Represents writing to a class variable.
4694
4695``` ruby
4696 @@foo = 1
4697 ^^^^^^^^^
4698```
4699
4700 Type: ::PM_CLASS_VARIABLE_WRITE_NODE
4701
4702 @extends pm_node_t
4703*/
4704#[repr(C)]
4705#[derive(Debug, Copy, Clone)]
4706pub struct pm_class_variable_write_node {
4707    /** The embedded base node.
4708*/
4709    pub base: pm_node_t,
4710    /** ClassVariableWriteNode#name
4711
4712 The name of the class variable, which is a `@@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
4713
4714``` ruby
4715 @@abc = 123     # name `@@abc`
4716```
4717
4718``` ruby
4719 @@_test = :test # name `@@_test`
4720```
4721*/
4722    pub name: pm_constant_id_t,
4723    /** ClassVariableWriteNode#name_loc
4724
4725 The Location of the variable name.
4726
4727``` ruby
4728 @@foo = :bar
4729 ^^^^^
4730```
4731*/
4732    pub name_loc: pm_location_t,
4733    /** ClassVariableWriteNode#value
4734
4735 The value to write to the class variable. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
4736
4737``` ruby
4738 @@foo = :bar
4739         ^^^^
4740```
4741
4742``` ruby
4743 @@_xyz = 123
4744          ^^^
4745```
4746*/
4747    pub value: *mut pm_node,
4748    /** ClassVariableWriteNode#operator_loc
4749
4750 The Location of the `=` operator.
4751
4752``` ruby
4753 @@foo = :bar
4754       ^
4755```
4756*/
4757    pub operator_loc: pm_location_t,
4758}
4759/** ConstantAndWriteNode
4760
4761 Represents the use of the `&&=` operator for assignment to a constant.
4762
4763``` ruby
4764 Target &&= value
4765 ^^^^^^^^^^^^^^^^
4766```
4767
4768 Type: ::PM_CONSTANT_AND_WRITE_NODE
4769
4770 @extends pm_node_t
4771*/
4772#[repr(C)]
4773#[derive(Debug, Copy, Clone)]
4774pub struct pm_constant_and_write_node {
4775    /** The embedded base node.
4776*/
4777    pub base: pm_node_t,
4778    /** ConstantAndWriteNode#name
4779*/
4780    pub name: pm_constant_id_t,
4781    /** ConstantAndWriteNode#name_loc
4782*/
4783    pub name_loc: pm_location_t,
4784    /** ConstantAndWriteNode#operator_loc
4785*/
4786    pub operator_loc: pm_location_t,
4787    /** ConstantAndWriteNode#value
4788*/
4789    pub value: *mut pm_node,
4790}
4791/** ConstantOperatorWriteNode
4792
4793 Represents assigning to a constant using an operator that isn't `=`.
4794
4795``` ruby
4796 Target += value
4797 ^^^^^^^^^^^^^^^
4798```
4799
4800 Type: ::PM_CONSTANT_OPERATOR_WRITE_NODE
4801
4802 @extends pm_node_t
4803*/
4804#[repr(C)]
4805#[derive(Debug, Copy, Clone)]
4806pub struct pm_constant_operator_write_node {
4807    /** The embedded base node.
4808*/
4809    pub base: pm_node_t,
4810    /** ConstantOperatorWriteNode#name
4811*/
4812    pub name: pm_constant_id_t,
4813    /** ConstantOperatorWriteNode#name_loc
4814*/
4815    pub name_loc: pm_location_t,
4816    /** ConstantOperatorWriteNode#binary_operator_loc
4817*/
4818    pub binary_operator_loc: pm_location_t,
4819    /** ConstantOperatorWriteNode#value
4820*/
4821    pub value: *mut pm_node,
4822    /** ConstantOperatorWriteNode#binary_operator
4823*/
4824    pub binary_operator: pm_constant_id_t,
4825}
4826/** ConstantOrWriteNode
4827
4828 Represents the use of the `||=` operator for assignment to a constant.
4829
4830``` ruby
4831 Target ||= value
4832 ^^^^^^^^^^^^^^^^
4833```
4834
4835 Type: ::PM_CONSTANT_OR_WRITE_NODE
4836
4837 @extends pm_node_t
4838*/
4839#[repr(C)]
4840#[derive(Debug, Copy, Clone)]
4841pub struct pm_constant_or_write_node {
4842    /** The embedded base node.
4843*/
4844    pub base: pm_node_t,
4845    /** ConstantOrWriteNode#name
4846*/
4847    pub name: pm_constant_id_t,
4848    /** ConstantOrWriteNode#name_loc
4849*/
4850    pub name_loc: pm_location_t,
4851    /** ConstantOrWriteNode#operator_loc
4852*/
4853    pub operator_loc: pm_location_t,
4854    /** ConstantOrWriteNode#value
4855*/
4856    pub value: *mut pm_node,
4857}
4858/** ConstantPathAndWriteNode
4859
4860 Represents the use of the `&&=` operator for assignment to a constant path.
4861
4862``` ruby
4863 Parent::Child &&= value
4864 ^^^^^^^^^^^^^^^^^^^^^^^
4865```
4866
4867 Type: ::PM_CONSTANT_PATH_AND_WRITE_NODE
4868
4869 @extends pm_node_t
4870*/
4871#[repr(C)]
4872#[derive(Debug, Copy, Clone)]
4873pub struct pm_constant_path_and_write_node {
4874    /** The embedded base node.
4875*/
4876    pub base: pm_node_t,
4877    /** ConstantPathAndWriteNode#target
4878*/
4879    pub target: *mut pm_constant_path_node,
4880    /** ConstantPathAndWriteNode#operator_loc
4881*/
4882    pub operator_loc: pm_location_t,
4883    /** ConstantPathAndWriteNode#value
4884*/
4885    pub value: *mut pm_node,
4886}
4887/** ConstantPathNode
4888
4889 Represents accessing a constant through a path of `::` operators.
4890
4891``` ruby
4892 Foo::Bar
4893 ^^^^^^^^
4894```
4895
4896 Type: ::PM_CONSTANT_PATH_NODE
4897
4898 @extends pm_node_t
4899*/
4900#[repr(C)]
4901#[derive(Debug, Copy, Clone)]
4902pub struct pm_constant_path_node {
4903    /** The embedded base node.
4904*/
4905    pub base: pm_node_t,
4906    /** ConstantPathNode#parent
4907
4908 The left-hand node of the path, if present. It can be `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). It will be `nil` when the constant lookup is at the root of the module tree.
4909
4910``` ruby
4911 Foo::Bar
4912 ^^^
4913```
4914
4915``` ruby
4916 self::Test
4917 ^^^^
4918```
4919
4920``` ruby
4921 a.b::C
4922 ^^^
4923```
4924*/
4925    pub parent: *mut pm_node,
4926    /** ConstantPathNode#name
4927
4928 The name of the constant being accessed. This could be `nil` in the event of a syntax error.
4929*/
4930    pub name: pm_constant_id_t,
4931    /** ConstantPathNode#delimiter_loc
4932
4933 The Location of the `::` delimiter.
4934
4935``` ruby
4936 ::Foo
4937 ^^
4938```
4939
4940``` ruby
4941 One::Two
4942    ^^
4943```
4944*/
4945    pub delimiter_loc: pm_location_t,
4946    /** ConstantPathNode#name_loc
4947
4948 The Location of the name of the constant.
4949
4950``` ruby
4951 ::Foo
4952   ^^^
4953```
4954
4955``` ruby
4956 One::Two
4957      ^^^
4958```
4959*/
4960    pub name_loc: pm_location_t,
4961}
4962/** ConstantPathOperatorWriteNode
4963
4964 Represents assigning to a constant path using an operator that isn't `=`.
4965
4966``` ruby
4967 Parent::Child += value
4968 ^^^^^^^^^^^^^^^^^^^^^^
4969```
4970
4971 Type: ::PM_CONSTANT_PATH_OPERATOR_WRITE_NODE
4972
4973 @extends pm_node_t
4974*/
4975#[repr(C)]
4976#[derive(Debug, Copy, Clone)]
4977pub struct pm_constant_path_operator_write_node {
4978    /** The embedded base node.
4979*/
4980    pub base: pm_node_t,
4981    /** ConstantPathOperatorWriteNode#target
4982*/
4983    pub target: *mut pm_constant_path_node,
4984    /** ConstantPathOperatorWriteNode#binary_operator_loc
4985*/
4986    pub binary_operator_loc: pm_location_t,
4987    /** ConstantPathOperatorWriteNode#value
4988*/
4989    pub value: *mut pm_node,
4990    /** ConstantPathOperatorWriteNode#binary_operator
4991*/
4992    pub binary_operator: pm_constant_id_t,
4993}
4994/** ConstantPathOrWriteNode
4995
4996 Represents the use of the `||=` operator for assignment to a constant path.
4997
4998``` ruby
4999 Parent::Child ||= value
5000 ^^^^^^^^^^^^^^^^^^^^^^^
5001```
5002
5003 Type: ::PM_CONSTANT_PATH_OR_WRITE_NODE
5004
5005 @extends pm_node_t
5006*/
5007#[repr(C)]
5008#[derive(Debug, Copy, Clone)]
5009pub struct pm_constant_path_or_write_node {
5010    /** The embedded base node.
5011*/
5012    pub base: pm_node_t,
5013    /** ConstantPathOrWriteNode#target
5014*/
5015    pub target: *mut pm_constant_path_node,
5016    /** ConstantPathOrWriteNode#operator_loc
5017*/
5018    pub operator_loc: pm_location_t,
5019    /** ConstantPathOrWriteNode#value
5020*/
5021    pub value: *mut pm_node,
5022}
5023/** ConstantPathTargetNode
5024
5025 Represents writing to a constant path in a context that doesn't have an explicit value.
5026
5027``` ruby
5028 Foo::Foo, Bar::Bar = baz
5029 ^^^^^^^^  ^^^^^^^^
5030```
5031
5032 Type: ::PM_CONSTANT_PATH_TARGET_NODE
5033
5034 @extends pm_node_t
5035*/
5036#[repr(C)]
5037#[derive(Debug, Copy, Clone)]
5038pub struct pm_constant_path_target_node {
5039    /** The embedded base node.
5040*/
5041    pub base: pm_node_t,
5042    /** ConstantPathTargetNode#parent
5043*/
5044    pub parent: *mut pm_node,
5045    /** ConstantPathTargetNode#name
5046*/
5047    pub name: pm_constant_id_t,
5048    /** ConstantPathTargetNode#delimiter_loc
5049*/
5050    pub delimiter_loc: pm_location_t,
5051    /** ConstantPathTargetNode#name_loc
5052*/
5053    pub name_loc: pm_location_t,
5054}
5055/** ConstantPathWriteNode
5056
5057 Represents writing to a constant path.
5058
5059``` ruby
5060 ::Foo = 1
5061 ^^^^^^^^^
5062```
5063
5064``` ruby
5065 Foo::Bar = 1
5066 ^^^^^^^^^^^^
5067```
5068
5069``` ruby
5070 ::Foo::Bar = 1
5071 ^^^^^^^^^^^^^^
5072```
5073
5074 Type: ::PM_CONSTANT_PATH_WRITE_NODE
5075
5076 @extends pm_node_t
5077*/
5078#[repr(C)]
5079#[derive(Debug, Copy, Clone)]
5080pub struct pm_constant_path_write_node {
5081    /** The embedded base node.
5082*/
5083    pub base: pm_node_t,
5084    /** ConstantPathWriteNode#target
5085
5086 A node representing the constant path being written to.
5087
5088``` ruby
5089 Foo::Bar = 1
5090 ^^^^^^^^
5091```
5092
5093``` ruby
5094 ::Foo = :abc
5095 ^^^^^
5096```
5097*/
5098    pub target: *mut pm_constant_path_node,
5099    /** ConstantPathWriteNode#operator_loc
5100
5101 The Location of the `=` operator.
5102
5103``` ruby
5104 ::ABC = 123
5105       ^
5106```
5107*/
5108    pub operator_loc: pm_location_t,
5109    /** ConstantPathWriteNode#value
5110
5111 The value to write to the constant path. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
5112
5113``` ruby
5114 FOO::BAR = :abc
5115            ^^^^
5116```
5117*/
5118    pub value: *mut pm_node,
5119}
5120/** ConstantReadNode
5121
5122 Represents referencing a constant.
5123
5124``` ruby
5125 Foo
5126 ^^^
5127```
5128
5129 Type: ::PM_CONSTANT_READ_NODE
5130
5131 @extends pm_node_t
5132*/
5133#[repr(C)]
5134#[derive(Debug, Default, Copy, Clone)]
5135pub struct pm_constant_read_node {
5136    /** The embedded base node.
5137*/
5138    pub base: pm_node_t,
5139    /** ConstantReadNode#name
5140
5141 The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants).
5142
5143``` ruby
5144 X              # name `:X`
5145```
5146
5147``` ruby
5148 SOME_CONSTANT  # name `:SOME_CONSTANT`
5149```
5150*/
5151    pub name: pm_constant_id_t,
5152}
5153/** ConstantTargetNode
5154
5155 Represents writing to a constant in a context that doesn't have an explicit value.
5156
5157``` ruby
5158 Foo, Bar = baz
5159 ^^^  ^^^
5160```
5161
5162 Type: ::PM_CONSTANT_TARGET_NODE
5163
5164 @extends pm_node_t
5165*/
5166#[repr(C)]
5167#[derive(Debug, Default, Copy, Clone)]
5168pub struct pm_constant_target_node {
5169    /** The embedded base node.
5170*/
5171    pub base: pm_node_t,
5172    /** ConstantTargetNode#name
5173*/
5174    pub name: pm_constant_id_t,
5175}
5176/** ConstantWriteNode
5177
5178 Represents writing to a constant.
5179
5180``` ruby
5181 Foo = 1
5182 ^^^^^^^
5183```
5184
5185 Type: ::PM_CONSTANT_WRITE_NODE
5186
5187 @extends pm_node_t
5188*/
5189#[repr(C)]
5190#[derive(Debug, Copy, Clone)]
5191pub struct pm_constant_write_node {
5192    /** The embedded base node.
5193*/
5194    pub base: pm_node_t,
5195    /** ConstantWriteNode#name
5196
5197 The name of the [constant](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#constants).
5198
5199``` ruby
5200 Foo = :bar # name `:Foo`
5201```
5202
5203``` ruby
5204 XYZ = 1    # name `:XYZ`
5205```
5206*/
5207    pub name: pm_constant_id_t,
5208    /** ConstantWriteNode#name_loc
5209
5210 The Location of the constant name.
5211
5212``` ruby
5213 FOO = 1
5214 ^^^
5215```
5216*/
5217    pub name_loc: pm_location_t,
5218    /** ConstantWriteNode#value
5219
5220 The value to write to the constant. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
5221
5222``` ruby
5223 FOO = :bar
5224       ^^^^
5225```
5226
5227``` ruby
5228 MyClass = Class.new
5229           ^^^^^^^^^
5230```
5231*/
5232    pub value: *mut pm_node,
5233    /** ConstantWriteNode#operator_loc
5234
5235 The Location of the `=` operator.
5236
5237``` ruby
5238 FOO = :bar
5239     ^
5240```
5241*/
5242    pub operator_loc: pm_location_t,
5243}
5244/** DefNode
5245
5246 Represents a method definition.
5247
5248``` ruby
5249 def method
5250 end
5251 ^^^^^^^^^^
5252```
5253
5254 Type: ::PM_DEF_NODE
5255
5256 @extends pm_node_t
5257*/
5258#[repr(C)]
5259#[derive(Debug, Copy, Clone)]
5260pub struct pm_def_node {
5261    /** The embedded base node.
5262*/
5263    pub base: pm_node_t,
5264    /** DefNode#name
5265*/
5266    pub name: pm_constant_id_t,
5267    /** DefNode#name_loc
5268*/
5269    pub name_loc: pm_location_t,
5270    /** DefNode#receiver
5271*/
5272    pub receiver: *mut pm_node,
5273    /** DefNode#parameters
5274*/
5275    pub parameters: *mut pm_parameters_node,
5276    /** DefNode#body
5277*/
5278    pub body: *mut pm_node,
5279    /** DefNode#locals
5280*/
5281    pub locals: pm_constant_id_list_t,
5282    /** DefNode#def_keyword_loc
5283*/
5284    pub def_keyword_loc: pm_location_t,
5285    /** DefNode#operator_loc
5286*/
5287    pub operator_loc: pm_location_t,
5288    /** DefNode#lparen_loc
5289*/
5290    pub lparen_loc: pm_location_t,
5291    /** DefNode#rparen_loc
5292*/
5293    pub rparen_loc: pm_location_t,
5294    /** DefNode#equal_loc
5295*/
5296    pub equal_loc: pm_location_t,
5297    /** DefNode#end_keyword_loc
5298*/
5299    pub end_keyword_loc: pm_location_t,
5300}
5301/** DefinedNode
5302
5303 Represents the use of the `defined?` keyword.
5304
5305``` ruby
5306 defined?(a)
5307 ^^^^^^^^^^^
5308```
5309
5310 Type: ::PM_DEFINED_NODE
5311
5312 @extends pm_node_t
5313*/
5314#[repr(C)]
5315#[derive(Debug, Copy, Clone)]
5316pub struct pm_defined_node {
5317    /** The embedded base node.
5318*/
5319    pub base: pm_node_t,
5320    /** DefinedNode#lparen_loc
5321*/
5322    pub lparen_loc: pm_location_t,
5323    /** DefinedNode#value
5324*/
5325    pub value: *mut pm_node,
5326    /** DefinedNode#rparen_loc
5327*/
5328    pub rparen_loc: pm_location_t,
5329    /** DefinedNode#keyword_loc
5330*/
5331    pub keyword_loc: pm_location_t,
5332}
5333/** ElseNode
5334
5335 Represents an `else` clause in a `case`, `if`, or `unless` statement.
5336
5337``` ruby
5338 if a then b else c end
5339             ^^^^^^^^^^
5340```
5341
5342 Type: ::PM_ELSE_NODE
5343
5344 @extends pm_node_t
5345*/
5346#[repr(C)]
5347#[derive(Debug, Copy, Clone)]
5348pub struct pm_else_node {
5349    /** The embedded base node.
5350*/
5351    pub base: pm_node_t,
5352    /** ElseNode#else_keyword_loc
5353*/
5354    pub else_keyword_loc: pm_location_t,
5355    /** ElseNode#statements
5356*/
5357    pub statements: *mut pm_statements_node,
5358    /** ElseNode#end_keyword_loc
5359*/
5360    pub end_keyword_loc: pm_location_t,
5361}
5362/** EmbeddedStatementsNode
5363
5364 Represents an interpolated set of statements.
5365
5366``` ruby
5367 "foo #{bar}"
5368      ^^^^^^
5369```
5370
5371 Type: ::PM_EMBEDDED_STATEMENTS_NODE
5372
5373 @extends pm_node_t
5374*/
5375#[repr(C)]
5376#[derive(Debug, Copy, Clone)]
5377pub struct pm_embedded_statements_node {
5378    /** The embedded base node.
5379*/
5380    pub base: pm_node_t,
5381    /** EmbeddedStatementsNode#opening_loc
5382*/
5383    pub opening_loc: pm_location_t,
5384    /** EmbeddedStatementsNode#statements
5385*/
5386    pub statements: *mut pm_statements_node,
5387    /** EmbeddedStatementsNode#closing_loc
5388*/
5389    pub closing_loc: pm_location_t,
5390}
5391/** EmbeddedVariableNode
5392
5393 Represents an interpolated variable.
5394
5395``` ruby
5396 "foo #@bar"
5397      ^^^^^
5398```
5399
5400 Type: ::PM_EMBEDDED_VARIABLE_NODE
5401
5402 @extends pm_node_t
5403*/
5404#[repr(C)]
5405#[derive(Debug, Copy, Clone)]
5406pub struct pm_embedded_variable_node {
5407    /** The embedded base node.
5408*/
5409    pub base: pm_node_t,
5410    /** EmbeddedVariableNode#operator_loc
5411*/
5412    pub operator_loc: pm_location_t,
5413    /** EmbeddedVariableNode#variable
5414*/
5415    pub variable: *mut pm_node,
5416}
5417/** EnsureNode
5418
5419 Represents an `ensure` clause in a `begin` statement.
5420
5421``` ruby
5422 begin
5423   foo
5424 ensure
5425 ^^^^^^
5426   bar
5427 end
5428```
5429
5430 Type: ::PM_ENSURE_NODE
5431
5432 @extends pm_node_t
5433*/
5434#[repr(C)]
5435#[derive(Debug, Copy, Clone)]
5436pub struct pm_ensure_node {
5437    /** The embedded base node.
5438*/
5439    pub base: pm_node_t,
5440    /** EnsureNode#ensure_keyword_loc
5441*/
5442    pub ensure_keyword_loc: pm_location_t,
5443    /** EnsureNode#statements
5444*/
5445    pub statements: *mut pm_statements_node,
5446    /** EnsureNode#end_keyword_loc
5447*/
5448    pub end_keyword_loc: pm_location_t,
5449}
5450/** ErrorRecoveryNode
5451
5452 Represents a node that is either missing or unexpected and results in a syntax error.
5453
5454 Type: ::PM_ERROR_RECOVERY_NODE
5455
5456 @extends pm_node_t
5457*/
5458#[repr(C)]
5459#[derive(Debug, Copy, Clone)]
5460pub struct pm_error_recovery_node {
5461    /** The embedded base node.
5462*/
5463    pub base: pm_node_t,
5464    /** ErrorRecoveryNode#unexpected
5465
5466 The unexpected node that was found in the tree, if there was one.
5467*/
5468    pub unexpected: *mut pm_node,
5469}
5470/** FalseNode
5471
5472 Represents the use of the literal `false` keyword.
5473
5474``` ruby
5475 false
5476 ^^^^^
5477```
5478
5479 Type: ::PM_FALSE_NODE
5480
5481 @extends pm_node_t
5482*/
5483#[repr(C)]
5484#[derive(Debug, Default, Copy, Clone)]
5485pub struct pm_false_node {
5486    /** The embedded base node.
5487*/
5488    pub base: pm_node_t,
5489}
5490/** FindPatternNode
5491
5492 Represents a find pattern in pattern matching.
5493
5494``` ruby
5495 foo in *bar, baz, *qux
5496        ^^^^^^^^^^^^^^^
5497```
5498
5499``` ruby
5500 foo in [*bar, baz, *qux]
5501        ^^^^^^^^^^^^^^^^^
5502```
5503
5504``` ruby
5505 foo in Foo(*bar, baz, *qux)
5506        ^^^^^^^^^^^^^^^^^^^^
5507```
5508
5509``` ruby
5510 foo => *bar, baz, *qux
5511        ^^^^^^^^^^^^^^^
5512```
5513
5514 Type: ::PM_FIND_PATTERN_NODE
5515
5516 @extends pm_node_t
5517*/
5518#[repr(C)]
5519#[derive(Debug, Copy, Clone)]
5520pub struct pm_find_pattern_node {
5521    /** The embedded base node.
5522*/
5523    pub base: pm_node_t,
5524    /** FindPatternNode#constant
5525
5526 Represents the optional constant preceding the pattern
5527
5528``` ruby
5529 foo in Foo(*bar, baz, *qux)
5530        ^^^
5531```
5532*/
5533    pub constant: *mut pm_node,
5534    /** FindPatternNode#left
5535
5536 Represents the first wildcard node in the pattern.
5537
5538``` ruby
5539 foo in *bar, baz, *qux
5540        ^^^^
5541```
5542
5543``` ruby
5544 foo in Foo(*bar, baz, *qux)
5545            ^^^^
5546```
5547*/
5548    pub left: *mut pm_splat_node,
5549    /** FindPatternNode#requireds
5550
5551 Represents the nodes in between the wildcards.
5552
5553``` ruby
5554 foo in *bar, baz, *qux
5555              ^^^
5556```
5557
5558``` ruby
5559 foo in Foo(*bar, baz, 1, *qux)
5560                  ^^^^^^
5561```
5562*/
5563    pub requireds: pm_node_list,
5564    /** FindPatternNode#right
5565
5566 Represents the second wildcard node in the pattern.
5567
5568``` ruby
5569 foo in *bar, baz, *qux
5570                   ^^^^
5571```
5572
5573``` ruby
5574 foo in Foo(*bar, baz, *qux)
5575                       ^^^^
5576```
5577*/
5578    pub right: *mut pm_splat_node,
5579    /** FindPatternNode#opening_loc
5580
5581 The Location of the opening brace.
5582
5583``` ruby
5584 foo in [*bar, baz, *qux]
5585        ^
5586```
5587
5588``` ruby
5589 foo in Foo(*bar, baz, *qux)
5590           ^
5591```
5592*/
5593    pub opening_loc: pm_location_t,
5594    /** FindPatternNode#closing_loc
5595
5596 The Location of the closing brace.
5597
5598``` ruby
5599 foo in [*bar, baz, *qux]
5600                        ^
5601```
5602
5603``` ruby
5604 foo in Foo(*bar, baz, *qux)
5605                           ^
5606```
5607*/
5608    pub closing_loc: pm_location_t,
5609}
5610/** FlipFlopNode
5611
5612 Represents the use of the `..` or `...` operators to create flip flops.
5613
5614``` ruby
5615 baz if foo .. bar
5616        ^^^^^^^^^^
5617```
5618
5619 Type: ::PM_FLIP_FLOP_NODE
5620
5621 Flags (#pm_range_flags):
5622 * ::PM_RANGE_FLAGS_EXCLUDE_END
5623
5624 @extends pm_node_t
5625*/
5626#[repr(C)]
5627#[derive(Debug, Copy, Clone)]
5628pub struct pm_flip_flop_node {
5629    /** The embedded base node.
5630*/
5631    pub base: pm_node_t,
5632    /** FlipFlopNode#left
5633*/
5634    pub left: *mut pm_node,
5635    /** FlipFlopNode#right
5636*/
5637    pub right: *mut pm_node,
5638    /** FlipFlopNode#operator_loc
5639*/
5640    pub operator_loc: pm_location_t,
5641}
5642/** FloatNode
5643
5644 Represents a floating point number literal.
5645
5646``` ruby
5647 1.0
5648 ^^^
5649```
5650
5651 Type: ::PM_FLOAT_NODE
5652
5653 @extends pm_node_t
5654*/
5655#[repr(C)]
5656#[derive(Debug, Default, Copy, Clone)]
5657pub struct pm_float_node {
5658    /** The embedded base node.
5659*/
5660    pub base: pm_node_t,
5661    /** FloatNode#value
5662
5663 The value of the floating point number as a Float.
5664*/
5665    pub value: f64,
5666}
5667/** ForNode
5668
5669 Represents the use of the `for` keyword.
5670
5671``` ruby
5672 for i in a end
5673 ^^^^^^^^^^^^^^
5674```
5675
5676 Type: ::PM_FOR_NODE
5677
5678 @extends pm_node_t
5679*/
5680#[repr(C)]
5681#[derive(Debug, Copy, Clone)]
5682pub struct pm_for_node {
5683    /** The embedded base node.
5684*/
5685    pub base: pm_node_t,
5686    /** ForNode#index
5687
5688 The index expression for `for` loops.
5689
5690``` ruby
5691 for i in a end
5692     ^
5693```
5694*/
5695    pub index: *mut pm_node,
5696    /** ForNode#collection
5697
5698 The collection to iterate over.
5699
5700``` ruby
5701 for i in a end
5702          ^
5703```
5704*/
5705    pub collection: *mut pm_node,
5706    /** ForNode#statements
5707
5708 Represents the body of statements to execute for each iteration of the loop.
5709
5710``` ruby
5711 for i in a
5712   foo(i)
5713   ^^^^^^
5714 end
5715```
5716*/
5717    pub statements: *mut pm_statements_node,
5718    /** ForNode#for_keyword_loc
5719
5720 The Location of the `for` keyword.
5721
5722``` ruby
5723 for i in a end
5724 ^^^
5725```
5726*/
5727    pub for_keyword_loc: pm_location_t,
5728    /** ForNode#in_keyword_loc
5729
5730 The Location of the `in` keyword.
5731
5732``` ruby
5733 for i in a end
5734       ^^
5735```
5736*/
5737    pub in_keyword_loc: pm_location_t,
5738    /** ForNode#do_keyword_loc
5739
5740 The Location of the `do` keyword, if present.
5741
5742``` ruby
5743 for i in a do end
5744            ^^
5745```
5746*/
5747    pub do_keyword_loc: pm_location_t,
5748    /** ForNode#end_keyword_loc
5749
5750 The Location of the `end` keyword.
5751
5752``` ruby
5753 for i in a end
5754            ^^^
5755```
5756*/
5757    pub end_keyword_loc: pm_location_t,
5758}
5759/** ForwardingArgumentsNode
5760
5761 Represents forwarding all arguments to this method to another method.
5762
5763``` ruby
5764 def foo(...)
5765   bar(...)
5766       ^^^
5767 end
5768```
5769
5770 Type: ::PM_FORWARDING_ARGUMENTS_NODE
5771
5772 @extends pm_node_t
5773*/
5774#[repr(C)]
5775#[derive(Debug, Default, Copy, Clone)]
5776pub struct pm_forwarding_arguments_node {
5777    /** The embedded base node.
5778*/
5779    pub base: pm_node_t,
5780}
5781/** ForwardingParameterNode
5782
5783 Represents the use of the forwarding parameter in a method, block, or lambda declaration.
5784
5785``` ruby
5786 def foo(...)
5787         ^^^
5788 end
5789```
5790
5791 Type: ::PM_FORWARDING_PARAMETER_NODE
5792
5793 @extends pm_node_t
5794*/
5795#[repr(C)]
5796#[derive(Debug, Default, Copy, Clone)]
5797pub struct pm_forwarding_parameter_node {
5798    /** The embedded base node.
5799*/
5800    pub base: pm_node_t,
5801}
5802/** ForwardingSuperNode
5803
5804 Represents the use of the `super` keyword without parentheses or arguments, but which might have a block.
5805
5806``` ruby
5807 super
5808 ^^^^^
5809```
5810
5811``` ruby
5812 super { 123 }
5813 ^^^^^^^^^^^^^
5814```
5815
5816 If it has any other arguments, it would be a `SuperNode` instead.
5817
5818 Type: ::PM_FORWARDING_SUPER_NODE
5819
5820 @extends pm_node_t
5821*/
5822#[repr(C)]
5823#[derive(Debug, Copy, Clone)]
5824pub struct pm_forwarding_super_node {
5825    /** The embedded base node.
5826*/
5827    pub base: pm_node_t,
5828    /** ForwardingSuperNode#keyword_loc
5829
5830 super
5831 ^^^^^
5832
5833 super { 123 }
5834 ^^^^^
5835*/
5836    pub keyword_loc: pm_location_t,
5837    /** ForwardingSuperNode#block
5838
5839 All other arguments are forwarded as normal, except the original block is replaced with the new block.
5840*/
5841    pub block: *mut pm_block_node,
5842}
5843/** GlobalVariableAndWriteNode
5844
5845 Represents the use of the `&&=` operator for assignment to a global variable.
5846
5847``` ruby
5848 $target &&= value
5849 ^^^^^^^^^^^^^^^^^
5850```
5851
5852 Type: ::PM_GLOBAL_VARIABLE_AND_WRITE_NODE
5853
5854 @extends pm_node_t
5855*/
5856#[repr(C)]
5857#[derive(Debug, Copy, Clone)]
5858pub struct pm_global_variable_and_write_node {
5859    /** The embedded base node.
5860*/
5861    pub base: pm_node_t,
5862    /** GlobalVariableAndWriteNode#name
5863*/
5864    pub name: pm_constant_id_t,
5865    /** GlobalVariableAndWriteNode#name_loc
5866*/
5867    pub name_loc: pm_location_t,
5868    /** GlobalVariableAndWriteNode#operator_loc
5869*/
5870    pub operator_loc: pm_location_t,
5871    /** GlobalVariableAndWriteNode#value
5872*/
5873    pub value: *mut pm_node,
5874}
5875/** GlobalVariableOperatorWriteNode
5876
5877 Represents assigning to a global variable using an operator that isn't `=`.
5878
5879``` ruby
5880 $target += value
5881 ^^^^^^^^^^^^^^^^
5882```
5883
5884 Type: ::PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE
5885
5886 @extends pm_node_t
5887*/
5888#[repr(C)]
5889#[derive(Debug, Copy, Clone)]
5890pub struct pm_global_variable_operator_write_node {
5891    /** The embedded base node.
5892*/
5893    pub base: pm_node_t,
5894    /** GlobalVariableOperatorWriteNode#name
5895*/
5896    pub name: pm_constant_id_t,
5897    /** GlobalVariableOperatorWriteNode#name_loc
5898*/
5899    pub name_loc: pm_location_t,
5900    /** GlobalVariableOperatorWriteNode#binary_operator_loc
5901*/
5902    pub binary_operator_loc: pm_location_t,
5903    /** GlobalVariableOperatorWriteNode#value
5904*/
5905    pub value: *mut pm_node,
5906    /** GlobalVariableOperatorWriteNode#binary_operator
5907*/
5908    pub binary_operator: pm_constant_id_t,
5909}
5910/** GlobalVariableOrWriteNode
5911
5912 Represents the use of the `||=` operator for assignment to a global variable.
5913
5914``` ruby
5915 $target ||= value
5916 ^^^^^^^^^^^^^^^^^
5917```
5918
5919 Type: ::PM_GLOBAL_VARIABLE_OR_WRITE_NODE
5920
5921 @extends pm_node_t
5922*/
5923#[repr(C)]
5924#[derive(Debug, Copy, Clone)]
5925pub struct pm_global_variable_or_write_node {
5926    /** The embedded base node.
5927*/
5928    pub base: pm_node_t,
5929    /** GlobalVariableOrWriteNode#name
5930*/
5931    pub name: pm_constant_id_t,
5932    /** GlobalVariableOrWriteNode#name_loc
5933*/
5934    pub name_loc: pm_location_t,
5935    /** GlobalVariableOrWriteNode#operator_loc
5936*/
5937    pub operator_loc: pm_location_t,
5938    /** GlobalVariableOrWriteNode#value
5939*/
5940    pub value: *mut pm_node,
5941}
5942/** GlobalVariableReadNode
5943
5944 Represents referencing a global variable.
5945
5946``` ruby
5947 $foo
5948 ^^^^
5949```
5950
5951 Type: ::PM_GLOBAL_VARIABLE_READ_NODE
5952
5953 @extends pm_node_t
5954*/
5955#[repr(C)]
5956#[derive(Debug, Default, Copy, Clone)]
5957pub struct pm_global_variable_read_node {
5958    /** The embedded base node.
5959*/
5960    pub base: pm_node_t,
5961    /** GlobalVariableReadNode#name
5962
5963 The name of the global variable, which is a `$` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifier). Alternatively, it can be one of the special global variables designated by a symbol.
5964
5965``` ruby
5966 $foo   # name `:$foo`
5967```
5968
5969``` ruby
5970 $_Test # name `:$_Test`
5971```
5972*/
5973    pub name: pm_constant_id_t,
5974}
5975/** GlobalVariableTargetNode
5976
5977 Represents writing to a global variable in a context that doesn't have an explicit value.
5978
5979``` ruby
5980 $foo, $bar = baz
5981 ^^^^  ^^^^
5982```
5983
5984 Type: ::PM_GLOBAL_VARIABLE_TARGET_NODE
5985
5986 @extends pm_node_t
5987*/
5988#[repr(C)]
5989#[derive(Debug, Default, Copy, Clone)]
5990pub struct pm_global_variable_target_node {
5991    /** The embedded base node.
5992*/
5993    pub base: pm_node_t,
5994    /** GlobalVariableTargetNode#name
5995*/
5996    pub name: pm_constant_id_t,
5997}
5998/** GlobalVariableWriteNode
5999
6000 Represents writing to a global variable.
6001
6002``` ruby
6003 $foo = 1
6004 ^^^^^^^^
6005```
6006
6007 Type: ::PM_GLOBAL_VARIABLE_WRITE_NODE
6008
6009 @extends pm_node_t
6010*/
6011#[repr(C)]
6012#[derive(Debug, Copy, Clone)]
6013pub struct pm_global_variable_write_node {
6014    /** The embedded base node.
6015*/
6016    pub base: pm_node_t,
6017    /** GlobalVariableWriteNode#name
6018
6019 The name of the global variable, which is a `$` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifier). Alternatively, it can be one of the special global variables designated by a symbol.
6020
6021``` ruby
6022 $foo = :bar  # name `:$foo`
6023```
6024
6025``` ruby
6026 $_Test = 123 # name `:$_Test`
6027```
6028*/
6029    pub name: pm_constant_id_t,
6030    /** GlobalVariableWriteNode#name_loc
6031
6032 The Location of the global variable's name.
6033
6034``` ruby
6035 $foo = :bar
6036 ^^^^
6037```
6038*/
6039    pub name_loc: pm_location_t,
6040    /** GlobalVariableWriteNode#value
6041
6042 The value to write to the global variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
6043
6044``` ruby
6045 $foo = :bar
6046        ^^^^
6047```
6048
6049``` ruby
6050 $-xyz = 123
6051         ^^^
6052```
6053*/
6054    pub value: *mut pm_node,
6055    /** GlobalVariableWriteNode#operator_loc
6056
6057 The Location of the `=` operator.
6058
6059``` ruby
6060 $foo = :bar
6061      ^
6062```
6063*/
6064    pub operator_loc: pm_location_t,
6065}
6066/** HashNode
6067
6068 Represents a hash literal.
6069
6070``` ruby
6071 { a => b }
6072 ^^^^^^^^^^
6073```
6074
6075 Type: ::PM_HASH_NODE
6076
6077 @extends pm_node_t
6078*/
6079#[repr(C)]
6080#[derive(Debug, Copy, Clone)]
6081pub struct pm_hash_node {
6082    /** The embedded base node.
6083*/
6084    pub base: pm_node_t,
6085    /** HashNode#opening_loc
6086
6087 The Location of the opening brace.
6088
6089``` ruby
6090 { a => b }
6091 ^
6092```
6093*/
6094    pub opening_loc: pm_location_t,
6095    /** HashNode#elements
6096
6097 The elements of the hash. These can be either `AssocNode`s or `AssocSplatNode`s.
6098
6099``` ruby
6100 { a: b }
6101   ^^^^
6102```
6103
6104``` ruby
6105 { **foo }
6106   ^^^^^
6107```
6108*/
6109    pub elements: pm_node_list,
6110    /** HashNode#closing_loc
6111
6112 The Location of the closing brace.
6113
6114``` ruby
6115 { a => b }
6116          ^
6117```
6118*/
6119    pub closing_loc: pm_location_t,
6120}
6121/** HashPatternNode
6122
6123 Represents a hash pattern in pattern matching.
6124
6125``` ruby
6126 foo => { a: 1, b: 2 }
6127        ^^^^^^^^^^^^^^
6128```
6129
6130``` ruby
6131 foo => { a: 1, b: 2, **c }
6132        ^^^^^^^^^^^^^^^^^^^
6133```
6134
6135``` ruby
6136 foo => Bar[a: 1, b: 2]
6137        ^^^^^^^^^^^^^^^
6138```
6139
6140``` ruby
6141 foo in { a: 1, b: 2 }
6142        ^^^^^^^^^^^^^^
6143```
6144
6145 Type: ::PM_HASH_PATTERN_NODE
6146
6147 @extends pm_node_t
6148*/
6149#[repr(C)]
6150#[derive(Debug, Copy, Clone)]
6151pub struct pm_hash_pattern_node {
6152    /** The embedded base node.
6153*/
6154    pub base: pm_node_t,
6155    /** HashPatternNode#constant
6156
6157 Represents the optional constant preceding the Hash.
6158
6159``` ruby
6160 foo => Bar[a: 1, b: 2]
6161      ^^^
6162```
6163
6164``` ruby
6165 foo => Bar::Baz[a: 1, b: 2]
6166      ^^^^^^^^
6167```
6168*/
6169    pub constant: *mut pm_node,
6170    /** HashPatternNode#elements
6171
6172 Represents the explicit named hash keys and values.
6173
6174``` ruby
6175 foo => { a: 1, b:, ** }
6176          ^^^^^^^^
6177```
6178*/
6179    pub elements: pm_node_list,
6180    /** HashPatternNode#rest
6181
6182 Represents the rest of the Hash keys and values. This can be named, unnamed, or explicitly forbidden via `**nil`, this last one results in a `NoKeywordsParameterNode`.
6183
6184``` ruby
6185 foo => { a: 1, b:, **c }
6186                    ^^^
6187```
6188
6189``` ruby
6190 foo => { a: 1, b:, ** }
6191                    ^^
6192```
6193
6194``` ruby
6195 foo => { a: 1, b:, **nil }
6196                    ^^^^^
6197```
6198*/
6199    pub rest: *mut pm_node,
6200    /** HashPatternNode#opening_loc
6201
6202 The Location of the opening brace.
6203
6204``` ruby
6205 foo => { a: 1 }
6206        ^
6207```
6208
6209``` ruby
6210 foo => Bar[a: 1]
6211           ^
6212```
6213*/
6214    pub opening_loc: pm_location_t,
6215    /** HashPatternNode#closing_loc
6216
6217 The Location of the closing brace.
6218
6219``` ruby
6220 foo => { a: 1 }
6221               ^
6222```
6223
6224``` ruby
6225 foo => Bar[a: 1]
6226                ^
6227```
6228*/
6229    pub closing_loc: pm_location_t,
6230}
6231/** IfNode
6232
6233 Represents the use of the `if` keyword, either in the block form or the modifier form, or a ternary expression.
6234
6235``` ruby
6236 bar if foo
6237 ^^^^^^^^^^
6238```
6239
6240``` ruby
6241 if foo then bar end
6242 ^^^^^^^^^^^^^^^^^^^
6243```
6244
6245``` ruby
6246 foo ? bar : baz
6247 ^^^^^^^^^^^^^^^
6248```
6249
6250 Type: ::PM_IF_NODE
6251
6252 @extends pm_node_t
6253*/
6254#[repr(C)]
6255#[derive(Debug, Copy, Clone)]
6256pub struct pm_if_node {
6257    /** The embedded base node.
6258*/
6259    pub base: pm_node_t,
6260    /** IfNode#if_keyword_loc
6261
6262 The Location of the `if` keyword if present.
6263
6264``` ruby
6265 bar if foo
6266     ^^
6267```
6268
6269 The `if_keyword_loc` field will be `nil` when the `IfNode` represents a ternary expression.
6270*/
6271    pub if_keyword_loc: pm_location_t,
6272    /** IfNode#predicate
6273
6274 The node for the condition the `IfNode` is testing.
6275
6276``` ruby
6277 if foo
6278    ^^^
6279   bar
6280 end
6281```
6282
6283``` ruby
6284 bar if foo
6285        ^^^
6286```
6287
6288``` ruby
6289 foo ? bar : baz
6290 ^^^
6291```
6292*/
6293    pub predicate: *mut pm_node,
6294    /** IfNode#then_keyword_loc
6295
6296 The Location of the `then` keyword (if present) or the `?` in a ternary expression, `nil` otherwise.
6297
6298``` ruby
6299 if foo then bar end
6300        ^^^^
6301```
6302
6303``` ruby
6304 a ? b : c
6305   ^
6306```
6307*/
6308    pub then_keyword_loc: pm_location_t,
6309    /** IfNode#statements
6310
6311 Represents the body of statements that will be executed when the predicate is evaluated as truthy. Will be `nil` when no body is provided.
6312
6313``` ruby
6314 if foo
6315   bar
6316   ^^^
6317   baz
6318   ^^^
6319 end
6320```
6321*/
6322    pub statements: *mut pm_statements_node,
6323    /** IfNode#subsequent
6324
6325 Represents an `ElseNode` or an `IfNode` when there is an `else` or an `elsif` in the `if` statement.
6326
6327``` ruby
6328 if foo
6329   bar
6330 elsif baz
6331 ^^^^^^^^^
6332   qux
6333   ^^^
6334 end
6335 ^^^
6336```
6337
6338``` ruby
6339 if foo then bar else baz end
6340                 ^^^^^^^^^^^^
6341```
6342*/
6343    pub subsequent: *mut pm_node,
6344    /** IfNode#end_keyword_loc
6345
6346 The Location of the `end` keyword if present, `nil` otherwise.
6347
6348``` ruby
6349 if foo
6350   bar
6351 end
6352 ^^^
6353```
6354*/
6355    pub end_keyword_loc: pm_location_t,
6356}
6357/** ImaginaryNode
6358
6359 Represents an imaginary number literal.
6360
6361``` ruby
6362 1.0i
6363 ^^^^
6364```
6365
6366 Type: ::PM_IMAGINARY_NODE
6367
6368 @extends pm_node_t
6369*/
6370#[repr(C)]
6371#[derive(Debug, Copy, Clone)]
6372pub struct pm_imaginary_node {
6373    /** The embedded base node.
6374*/
6375    pub base: pm_node_t,
6376    /** ImaginaryNode#numeric
6377*/
6378    pub numeric: *mut pm_node,
6379}
6380/** ImplicitNode
6381
6382 Represents a node that is implicitly being added to the tree but doesn't correspond directly to a node in the source.
6383
6384``` ruby
6385 { foo: }
6386   ^^^^
6387```
6388
6389``` ruby
6390 { Foo: }
6391   ^^^^
6392```
6393
6394``` ruby
6395 foo in { bar: }
6396          ^^^^
6397```
6398
6399 Type: ::PM_IMPLICIT_NODE
6400
6401 @extends pm_node_t
6402*/
6403#[repr(C)]
6404#[derive(Debug, Copy, Clone)]
6405pub struct pm_implicit_node {
6406    /** The embedded base node.
6407*/
6408    pub base: pm_node_t,
6409    /** ImplicitNode#value
6410*/
6411    pub value: *mut pm_node,
6412}
6413/** ImplicitRestNode
6414
6415 Represents using a trailing comma to indicate an implicit rest parameter.
6416
6417``` ruby
6418 foo { |bar,| }
6419           ^
6420```
6421
6422``` ruby
6423 foo in [bar,]
6424            ^
6425```
6426
6427``` ruby
6428 for foo, in bar do end
6429        ^
6430```
6431
6432``` ruby
6433 foo, = bar
6434    ^
6435```
6436
6437 Type: ::PM_IMPLICIT_REST_NODE
6438
6439 @extends pm_node_t
6440*/
6441#[repr(C)]
6442#[derive(Debug, Default, Copy, Clone)]
6443pub struct pm_implicit_rest_node {
6444    /** The embedded base node.
6445*/
6446    pub base: pm_node_t,
6447}
6448/** InNode
6449
6450 Represents the use of the `in` keyword in a case statement.
6451
6452``` ruby
6453 case a; in b then c end
6454         ^^^^^^^^^^^
6455```
6456
6457 Type: ::PM_IN_NODE
6458
6459 @extends pm_node_t
6460*/
6461#[repr(C)]
6462#[derive(Debug, Copy, Clone)]
6463pub struct pm_in_node {
6464    /** The embedded base node.
6465*/
6466    pub base: pm_node_t,
6467    /** InNode#pattern
6468*/
6469    pub pattern: *mut pm_node,
6470    /** InNode#statements
6471*/
6472    pub statements: *mut pm_statements_node,
6473    /** InNode#in_keyword_loc
6474*/
6475    pub in_keyword_loc: pm_location_t,
6476    /** InNode#then_keyword_loc
6477*/
6478    pub then_keyword_loc: pm_location_t,
6479}
6480/** IndexAndWriteNode
6481
6482 Represents the use of the `&&=` operator on a call to the `[]` method.
6483
6484``` ruby
6485 foo.bar[baz] &&= value
6486 ^^^^^^^^^^^^^^^^^^^^^^
6487```
6488
6489 Type: ::PM_INDEX_AND_WRITE_NODE
6490
6491 Flags (#pm_call_node_flags):
6492 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
6493 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
6494 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
6495 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
6496
6497 @extends pm_node_t
6498*/
6499#[repr(C)]
6500#[derive(Debug, Copy, Clone)]
6501pub struct pm_index_and_write_node {
6502    /** The embedded base node.
6503*/
6504    pub base: pm_node_t,
6505    /** IndexAndWriteNode#receiver
6506*/
6507    pub receiver: *mut pm_node,
6508    /** IndexAndWriteNode#call_operator_loc
6509*/
6510    pub call_operator_loc: pm_location_t,
6511    /** IndexAndWriteNode#opening_loc
6512*/
6513    pub opening_loc: pm_location_t,
6514    /** IndexAndWriteNode#arguments
6515*/
6516    pub arguments: *mut pm_arguments_node,
6517    /** IndexAndWriteNode#closing_loc
6518*/
6519    pub closing_loc: pm_location_t,
6520    /** IndexAndWriteNode#block
6521*/
6522    pub block: *mut pm_block_argument_node,
6523    /** IndexAndWriteNode#operator_loc
6524*/
6525    pub operator_loc: pm_location_t,
6526    /** IndexAndWriteNode#value
6527*/
6528    pub value: *mut pm_node,
6529}
6530/** IndexOperatorWriteNode
6531
6532 Represents the use of an assignment operator on a call to `[]`.
6533
6534``` ruby
6535 foo.bar[baz] += value
6536 ^^^^^^^^^^^^^^^^^^^^^
6537```
6538
6539 Type: ::PM_INDEX_OPERATOR_WRITE_NODE
6540
6541 Flags (#pm_call_node_flags):
6542 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
6543 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
6544 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
6545 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
6546
6547 @extends pm_node_t
6548*/
6549#[repr(C)]
6550#[derive(Debug, Copy, Clone)]
6551pub struct pm_index_operator_write_node {
6552    /** The embedded base node.
6553*/
6554    pub base: pm_node_t,
6555    /** IndexOperatorWriteNode#receiver
6556*/
6557    pub receiver: *mut pm_node,
6558    /** IndexOperatorWriteNode#call_operator_loc
6559*/
6560    pub call_operator_loc: pm_location_t,
6561    /** IndexOperatorWriteNode#opening_loc
6562*/
6563    pub opening_loc: pm_location_t,
6564    /** IndexOperatorWriteNode#arguments
6565*/
6566    pub arguments: *mut pm_arguments_node,
6567    /** IndexOperatorWriteNode#closing_loc
6568*/
6569    pub closing_loc: pm_location_t,
6570    /** IndexOperatorWriteNode#block
6571*/
6572    pub block: *mut pm_block_argument_node,
6573    /** IndexOperatorWriteNode#binary_operator
6574*/
6575    pub binary_operator: pm_constant_id_t,
6576    /** IndexOperatorWriteNode#binary_operator_loc
6577*/
6578    pub binary_operator_loc: pm_location_t,
6579    /** IndexOperatorWriteNode#value
6580*/
6581    pub value: *mut pm_node,
6582}
6583/** IndexOrWriteNode
6584
6585 Represents the use of the `||=` operator on a call to `[]`.
6586
6587``` ruby
6588 foo.bar[baz] ||= value
6589 ^^^^^^^^^^^^^^^^^^^^^^
6590```
6591
6592 Type: ::PM_INDEX_OR_WRITE_NODE
6593
6594 Flags (#pm_call_node_flags):
6595 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
6596 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
6597 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
6598 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
6599
6600 @extends pm_node_t
6601*/
6602#[repr(C)]
6603#[derive(Debug, Copy, Clone)]
6604pub struct pm_index_or_write_node {
6605    /** The embedded base node.
6606*/
6607    pub base: pm_node_t,
6608    /** IndexOrWriteNode#receiver
6609*/
6610    pub receiver: *mut pm_node,
6611    /** IndexOrWriteNode#call_operator_loc
6612*/
6613    pub call_operator_loc: pm_location_t,
6614    /** IndexOrWriteNode#opening_loc
6615*/
6616    pub opening_loc: pm_location_t,
6617    /** IndexOrWriteNode#arguments
6618*/
6619    pub arguments: *mut pm_arguments_node,
6620    /** IndexOrWriteNode#closing_loc
6621*/
6622    pub closing_loc: pm_location_t,
6623    /** IndexOrWriteNode#block
6624*/
6625    pub block: *mut pm_block_argument_node,
6626    /** IndexOrWriteNode#operator_loc
6627*/
6628    pub operator_loc: pm_location_t,
6629    /** IndexOrWriteNode#value
6630*/
6631    pub value: *mut pm_node,
6632}
6633/** IndexTargetNode
6634
6635 Represents assigning to an index.
6636
6637``` ruby
6638 foo[bar], = 1
6639 ^^^^^^^^
6640```
6641
6642``` ruby
6643 begin
6644 rescue => foo[bar]
6645           ^^^^^^^^
6646 end
6647```
6648
6649``` ruby
6650 for foo[bar] in baz do end
6651     ^^^^^^^^
6652```
6653
6654 Type: ::PM_INDEX_TARGET_NODE
6655
6656 Flags (#pm_call_node_flags):
6657 * ::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION
6658 * ::PM_CALL_NODE_FLAGS_VARIABLE_CALL
6659 * ::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE
6660 * ::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY
6661
6662 @extends pm_node_t
6663*/
6664#[repr(C)]
6665#[derive(Debug, Copy, Clone)]
6666pub struct pm_index_target_node {
6667    /** The embedded base node.
6668*/
6669    pub base: pm_node_t,
6670    /** IndexTargetNode#receiver
6671*/
6672    pub receiver: *mut pm_node,
6673    /** IndexTargetNode#opening_loc
6674*/
6675    pub opening_loc: pm_location_t,
6676    /** IndexTargetNode#arguments
6677*/
6678    pub arguments: *mut pm_arguments_node,
6679    /** IndexTargetNode#closing_loc
6680*/
6681    pub closing_loc: pm_location_t,
6682    /** IndexTargetNode#block
6683*/
6684    pub block: *mut pm_block_argument_node,
6685}
6686/** InstanceVariableAndWriteNode
6687
6688 Represents the use of the `&&=` operator for assignment to an instance variable.
6689
6690``` ruby
6691 @target &&= value
6692 ^^^^^^^^^^^^^^^^^
6693```
6694
6695 Type: ::PM_INSTANCE_VARIABLE_AND_WRITE_NODE
6696
6697 @extends pm_node_t
6698*/
6699#[repr(C)]
6700#[derive(Debug, Copy, Clone)]
6701pub struct pm_instance_variable_and_write_node {
6702    /** The embedded base node.
6703*/
6704    pub base: pm_node_t,
6705    /** InstanceVariableAndWriteNode#name
6706*/
6707    pub name: pm_constant_id_t,
6708    /** InstanceVariableAndWriteNode#name_loc
6709*/
6710    pub name_loc: pm_location_t,
6711    /** InstanceVariableAndWriteNode#operator_loc
6712*/
6713    pub operator_loc: pm_location_t,
6714    /** InstanceVariableAndWriteNode#value
6715*/
6716    pub value: *mut pm_node,
6717}
6718/** InstanceVariableOperatorWriteNode
6719
6720 Represents assigning to an instance variable using an operator that isn't `=`.
6721
6722``` ruby
6723 @target += value
6724 ^^^^^^^^^^^^^^^^
6725```
6726
6727 Type: ::PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE
6728
6729 @extends pm_node_t
6730*/
6731#[repr(C)]
6732#[derive(Debug, Copy, Clone)]
6733pub struct pm_instance_variable_operator_write_node {
6734    /** The embedded base node.
6735*/
6736    pub base: pm_node_t,
6737    /** InstanceVariableOperatorWriteNode#name
6738*/
6739    pub name: pm_constant_id_t,
6740    /** InstanceVariableOperatorWriteNode#name_loc
6741*/
6742    pub name_loc: pm_location_t,
6743    /** InstanceVariableOperatorWriteNode#binary_operator_loc
6744*/
6745    pub binary_operator_loc: pm_location_t,
6746    /** InstanceVariableOperatorWriteNode#value
6747*/
6748    pub value: *mut pm_node,
6749    /** InstanceVariableOperatorWriteNode#binary_operator
6750*/
6751    pub binary_operator: pm_constant_id_t,
6752}
6753/** InstanceVariableOrWriteNode
6754
6755 Represents the use of the `||=` operator for assignment to an instance variable.
6756
6757``` ruby
6758 @target ||= value
6759 ^^^^^^^^^^^^^^^^^
6760```
6761
6762 Type: ::PM_INSTANCE_VARIABLE_OR_WRITE_NODE
6763
6764 @extends pm_node_t
6765*/
6766#[repr(C)]
6767#[derive(Debug, Copy, Clone)]
6768pub struct pm_instance_variable_or_write_node {
6769    /** The embedded base node.
6770*/
6771    pub base: pm_node_t,
6772    /** InstanceVariableOrWriteNode#name
6773*/
6774    pub name: pm_constant_id_t,
6775    /** InstanceVariableOrWriteNode#name_loc
6776*/
6777    pub name_loc: pm_location_t,
6778    /** InstanceVariableOrWriteNode#operator_loc
6779*/
6780    pub operator_loc: pm_location_t,
6781    /** InstanceVariableOrWriteNode#value
6782*/
6783    pub value: *mut pm_node,
6784}
6785/** InstanceVariableReadNode
6786
6787 Represents referencing an instance variable.
6788
6789``` ruby
6790 @foo
6791 ^^^^
6792```
6793
6794 Type: ::PM_INSTANCE_VARIABLE_READ_NODE
6795
6796 @extends pm_node_t
6797*/
6798#[repr(C)]
6799#[derive(Debug, Default, Copy, Clone)]
6800pub struct pm_instance_variable_read_node {
6801    /** The embedded base node.
6802*/
6803    pub base: pm_node_t,
6804    /** InstanceVariableReadNode#name
6805
6806 The name of the instance variable, which is a `@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
6807
6808``` ruby
6809 @x     # name `:@x`
6810```
6811
6812``` ruby
6813 @_test # name `:@_test`
6814```
6815*/
6816    pub name: pm_constant_id_t,
6817}
6818/** InstanceVariableTargetNode
6819
6820 Represents writing to an instance variable in a context that doesn't have an explicit value.
6821
6822``` ruby
6823 @foo, @bar = baz
6824 ^^^^  ^^^^
6825```
6826
6827 Type: ::PM_INSTANCE_VARIABLE_TARGET_NODE
6828
6829 @extends pm_node_t
6830*/
6831#[repr(C)]
6832#[derive(Debug, Default, Copy, Clone)]
6833pub struct pm_instance_variable_target_node {
6834    /** The embedded base node.
6835*/
6836    pub base: pm_node_t,
6837    /** InstanceVariableTargetNode#name
6838*/
6839    pub name: pm_constant_id_t,
6840}
6841/** InstanceVariableWriteNode
6842
6843 Represents writing to an instance variable.
6844
6845``` ruby
6846 @foo = 1
6847 ^^^^^^^^
6848```
6849
6850 Type: ::PM_INSTANCE_VARIABLE_WRITE_NODE
6851
6852 @extends pm_node_t
6853*/
6854#[repr(C)]
6855#[derive(Debug, Copy, Clone)]
6856pub struct pm_instance_variable_write_node {
6857    /** The embedded base node.
6858*/
6859    pub base: pm_node_t,
6860    /** InstanceVariableWriteNode#name
6861
6862 The name of the instance variable, which is a `@` followed by an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
6863
6864``` ruby
6865 @x = :y       # name `:@x`
6866```
6867
6868``` ruby
6869 @_foo = "bar" # name `@_foo`
6870```
6871*/
6872    pub name: pm_constant_id_t,
6873    /** InstanceVariableWriteNode#name_loc
6874
6875 The Location of the variable name.
6876
6877``` ruby
6878 @_x = 1
6879 ^^^
6880```
6881*/
6882    pub name_loc: pm_location_t,
6883    /** InstanceVariableWriteNode#value
6884
6885 The value to write to the instance variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
6886
6887``` ruby
6888 @foo = :bar
6889        ^^^^
6890```
6891
6892``` ruby
6893 @_x = 1234
6894       ^^^^
6895```
6896*/
6897    pub value: *mut pm_node,
6898    /** InstanceVariableWriteNode#operator_loc
6899
6900 The Location of the `=` operator.
6901
6902``` ruby
6903 @x = y
6904    ^
6905```
6906*/
6907    pub operator_loc: pm_location_t,
6908}
6909/** IntegerNode
6910
6911 Represents an integer number literal.
6912
6913``` ruby
6914 1
6915 ^
6916```
6917
6918 Type: ::PM_INTEGER_NODE
6919
6920 Flags (#pm_integer_base_flags):
6921 * ::PM_INTEGER_BASE_FLAGS_BINARY
6922 * ::PM_INTEGER_BASE_FLAGS_DECIMAL
6923 * ::PM_INTEGER_BASE_FLAGS_OCTAL
6924 * ::PM_INTEGER_BASE_FLAGS_HEXADECIMAL
6925
6926 @extends pm_node_t
6927*/
6928#[repr(C)]
6929#[derive(Debug, Copy, Clone)]
6930pub struct pm_integer_node {
6931    /** The embedded base node.
6932*/
6933    pub base: pm_node_t,
6934    /** IntegerNode#value
6935
6936 The value of the integer literal as a number.
6937*/
6938    pub value: pm_integer_t,
6939}
6940/** InterpolatedMatchLastLineNode
6941
6942 Represents a regular expression literal that contains interpolation that is being used in the predicate of a conditional to implicitly match against the last line read by an IO object.
6943
6944``` ruby
6945 if /foo #{bar} baz/ then end
6946    ^^^^^^^^^^^^^^^^
6947```
6948
6949 Type: ::PM_INTERPOLATED_MATCH_LAST_LINE_NODE
6950
6951 Flags (#pm_regular_expression_flags):
6952 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
6953 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
6954 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
6955 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
6956 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
6957 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
6958 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
6959 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
6960 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
6961 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
6962 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
6963
6964 @extends pm_node_t
6965*/
6966#[repr(C)]
6967#[derive(Debug, Copy, Clone)]
6968pub struct pm_interpolated_match_last_line_node {
6969    /** The embedded base node.
6970*/
6971    pub base: pm_node_t,
6972    /** InterpolatedMatchLastLineNode#opening_loc
6973*/
6974    pub opening_loc: pm_location_t,
6975    /** InterpolatedMatchLastLineNode#parts
6976*/
6977    pub parts: pm_node_list,
6978    /** InterpolatedMatchLastLineNode#closing_loc
6979*/
6980    pub closing_loc: pm_location_t,
6981}
6982/** InterpolatedRegularExpressionNode
6983
6984 Represents a regular expression literal that contains interpolation.
6985
6986``` ruby
6987 /foo #{bar} baz/
6988 ^^^^^^^^^^^^^^^^
6989```
6990
6991 Type: ::PM_INTERPOLATED_REGULAR_EXPRESSION_NODE
6992
6993 Flags (#pm_regular_expression_flags):
6994 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
6995 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
6996 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
6997 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
6998 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
6999 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
7000 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
7001 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
7002 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
7003 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
7004 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
7005
7006 @extends pm_node_t
7007*/
7008#[repr(C)]
7009#[derive(Debug, Copy, Clone)]
7010pub struct pm_interpolated_regular_expression_node {
7011    /** The embedded base node.
7012*/
7013    pub base: pm_node_t,
7014    /** InterpolatedRegularExpressionNode#opening_loc
7015*/
7016    pub opening_loc: pm_location_t,
7017    /** InterpolatedRegularExpressionNode#parts
7018*/
7019    pub parts: pm_node_list,
7020    /** InterpolatedRegularExpressionNode#closing_loc
7021*/
7022    pub closing_loc: pm_location_t,
7023}
7024/** InterpolatedStringNode
7025
7026 Represents a string literal that contains interpolation.
7027
7028``` ruby
7029 "foo #{bar} baz"
7030 ^^^^^^^^^^^^^^^^
7031```
7032
7033 Type: ::PM_INTERPOLATED_STRING_NODE
7034
7035 Flags (#pm_interpolated_string_node_flags):
7036 * ::PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN
7037 * ::PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE
7038
7039 @extends pm_node_t
7040*/
7041#[repr(C)]
7042#[derive(Debug, Copy, Clone)]
7043pub struct pm_interpolated_string_node {
7044    /** The embedded base node.
7045*/
7046    pub base: pm_node_t,
7047    /** InterpolatedStringNode#opening_loc
7048*/
7049    pub opening_loc: pm_location_t,
7050    /** InterpolatedStringNode#parts
7051*/
7052    pub parts: pm_node_list,
7053    /** InterpolatedStringNode#closing_loc
7054*/
7055    pub closing_loc: pm_location_t,
7056}
7057/** InterpolatedSymbolNode
7058
7059 Represents a symbol literal that contains interpolation.
7060
7061``` ruby
7062 :"foo #{bar} baz"
7063 ^^^^^^^^^^^^^^^^^
7064```
7065
7066 Type: ::PM_INTERPOLATED_SYMBOL_NODE
7067
7068 @extends pm_node_t
7069*/
7070#[repr(C)]
7071#[derive(Debug, Copy, Clone)]
7072pub struct pm_interpolated_symbol_node {
7073    /** The embedded base node.
7074*/
7075    pub base: pm_node_t,
7076    /** InterpolatedSymbolNode#opening_loc
7077*/
7078    pub opening_loc: pm_location_t,
7079    /** InterpolatedSymbolNode#parts
7080*/
7081    pub parts: pm_node_list,
7082    /** InterpolatedSymbolNode#closing_loc
7083*/
7084    pub closing_loc: pm_location_t,
7085}
7086/** InterpolatedXStringNode
7087
7088 Represents an xstring literal that contains interpolation.
7089
7090``` ruby
7091 `foo #{bar} baz`
7092 ^^^^^^^^^^^^^^^^
7093```
7094
7095 Type: ::PM_INTERPOLATED_X_STRING_NODE
7096
7097 @extends pm_node_t
7098*/
7099#[repr(C)]
7100#[derive(Debug, Copy, Clone)]
7101pub struct pm_interpolated_x_string_node {
7102    /** The embedded base node.
7103*/
7104    pub base: pm_node_t,
7105    /** InterpolatedXStringNode#opening_loc
7106*/
7107    pub opening_loc: pm_location_t,
7108    /** InterpolatedXStringNode#parts
7109*/
7110    pub parts: pm_node_list,
7111    /** InterpolatedXStringNode#closing_loc
7112*/
7113    pub closing_loc: pm_location_t,
7114}
7115/** ItLocalVariableReadNode
7116
7117 Represents reading from the implicit `it` local variable.
7118
7119``` ruby
7120 -> { it }
7121      ^^
7122```
7123
7124 Type: ::PM_IT_LOCAL_VARIABLE_READ_NODE
7125
7126 @extends pm_node_t
7127*/
7128#[repr(C)]
7129#[derive(Debug, Default, Copy, Clone)]
7130pub struct pm_it_local_variable_read_node {
7131    /** The embedded base node.
7132*/
7133    pub base: pm_node_t,
7134}
7135/** ItParametersNode
7136
7137 Represents an implicit set of parameters through the use of the `it` keyword within a block or lambda.
7138
7139``` ruby
7140 -> { it + it }
7141 ^^^^^^^^^^^^^^
7142```
7143
7144 Type: ::PM_IT_PARAMETERS_NODE
7145
7146 @extends pm_node_t
7147*/
7148#[repr(C)]
7149#[derive(Debug, Default, Copy, Clone)]
7150pub struct pm_it_parameters_node {
7151    /** The embedded base node.
7152*/
7153    pub base: pm_node_t,
7154}
7155/** KeywordHashNode
7156
7157 Represents a hash literal without opening and closing braces.
7158
7159``` ruby
7160 foo(a: b)
7161     ^^^^
7162```
7163
7164 Type: ::PM_KEYWORD_HASH_NODE
7165
7166 Flags (#pm_keyword_hash_node_flags):
7167 * ::PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS
7168
7169 @extends pm_node_t
7170*/
7171#[repr(C)]
7172#[derive(Debug, Copy, Clone)]
7173pub struct pm_keyword_hash_node {
7174    /** The embedded base node.
7175*/
7176    pub base: pm_node_t,
7177    /** KeywordHashNode#elements
7178*/
7179    pub elements: pm_node_list,
7180}
7181/** KeywordRestParameterNode
7182
7183 Represents a keyword rest parameter to a method, block, or lambda definition.
7184
7185``` ruby
7186 def a(**b)
7187       ^^^
7188 end
7189```
7190
7191 Type: ::PM_KEYWORD_REST_PARAMETER_NODE
7192
7193 Flags (#pm_parameter_flags):
7194 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
7195
7196 @extends pm_node_t
7197*/
7198#[repr(C)]
7199#[derive(Debug, Default, Copy, Clone)]
7200pub struct pm_keyword_rest_parameter_node {
7201    /** The embedded base node.
7202*/
7203    pub base: pm_node_t,
7204    /** KeywordRestParameterNode#name
7205*/
7206    pub name: pm_constant_id_t,
7207    /** KeywordRestParameterNode#name_loc
7208*/
7209    pub name_loc: pm_location_t,
7210    /** KeywordRestParameterNode#operator_loc
7211*/
7212    pub operator_loc: pm_location_t,
7213}
7214/** LambdaNode
7215
7216 Represents using a lambda literal (not the lambda method call).
7217
7218``` ruby
7219 ->(value) { value * 2 }
7220 ^^^^^^^^^^^^^^^^^^^^^^^
7221```
7222
7223 Type: ::PM_LAMBDA_NODE
7224
7225 @extends pm_node_t
7226*/
7227#[repr(C)]
7228#[derive(Debug, Copy, Clone)]
7229pub struct pm_lambda_node {
7230    /** The embedded base node.
7231*/
7232    pub base: pm_node_t,
7233    /** LambdaNode#locals
7234*/
7235    pub locals: pm_constant_id_list_t,
7236    /** LambdaNode#operator_loc
7237*/
7238    pub operator_loc: pm_location_t,
7239    /** LambdaNode#opening_loc
7240*/
7241    pub opening_loc: pm_location_t,
7242    /** LambdaNode#closing_loc
7243*/
7244    pub closing_loc: pm_location_t,
7245    /** LambdaNode#parameters
7246*/
7247    pub parameters: *mut pm_node,
7248    /** LambdaNode#body
7249*/
7250    pub body: *mut pm_node,
7251}
7252/** LocalVariableAndWriteNode
7253
7254 Represents the use of the `&&=` operator for assignment to a local variable.
7255
7256``` ruby
7257 target &&= value
7258 ^^^^^^^^^^^^^^^^
7259```
7260
7261 Type: ::PM_LOCAL_VARIABLE_AND_WRITE_NODE
7262
7263 @extends pm_node_t
7264*/
7265#[repr(C)]
7266#[derive(Debug, Copy, Clone)]
7267pub struct pm_local_variable_and_write_node {
7268    /** The embedded base node.
7269*/
7270    pub base: pm_node_t,
7271    /** LocalVariableAndWriteNode#name_loc
7272*/
7273    pub name_loc: pm_location_t,
7274    /** LocalVariableAndWriteNode#operator_loc
7275*/
7276    pub operator_loc: pm_location_t,
7277    /** LocalVariableAndWriteNode#value
7278*/
7279    pub value: *mut pm_node,
7280    /** LocalVariableAndWriteNode#name
7281*/
7282    pub name: pm_constant_id_t,
7283    /** LocalVariableAndWriteNode#depth
7284*/
7285    pub depth: u32,
7286}
7287/** LocalVariableOperatorWriteNode
7288
7289 Represents assigning to a local variable using an operator that isn't `=`.
7290
7291``` ruby
7292 target += value
7293 ^^^^^^^^^^^^^^^
7294```
7295
7296 Type: ::PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE
7297
7298 @extends pm_node_t
7299*/
7300#[repr(C)]
7301#[derive(Debug, Copy, Clone)]
7302pub struct pm_local_variable_operator_write_node {
7303    /** The embedded base node.
7304*/
7305    pub base: pm_node_t,
7306    /** LocalVariableOperatorWriteNode#name_loc
7307*/
7308    pub name_loc: pm_location_t,
7309    /** LocalVariableOperatorWriteNode#binary_operator_loc
7310*/
7311    pub binary_operator_loc: pm_location_t,
7312    /** LocalVariableOperatorWriteNode#value
7313*/
7314    pub value: *mut pm_node,
7315    /** LocalVariableOperatorWriteNode#name
7316*/
7317    pub name: pm_constant_id_t,
7318    /** LocalVariableOperatorWriteNode#binary_operator
7319*/
7320    pub binary_operator: pm_constant_id_t,
7321    /** LocalVariableOperatorWriteNode#depth
7322*/
7323    pub depth: u32,
7324}
7325/** LocalVariableOrWriteNode
7326
7327 Represents the use of the `||=` operator for assignment to a local variable.
7328
7329``` ruby
7330 target ||= value
7331 ^^^^^^^^^^^^^^^^
7332```
7333
7334 Type: ::PM_LOCAL_VARIABLE_OR_WRITE_NODE
7335
7336 @extends pm_node_t
7337*/
7338#[repr(C)]
7339#[derive(Debug, Copy, Clone)]
7340pub struct pm_local_variable_or_write_node {
7341    /** The embedded base node.
7342*/
7343    pub base: pm_node_t,
7344    /** LocalVariableOrWriteNode#name_loc
7345*/
7346    pub name_loc: pm_location_t,
7347    /** LocalVariableOrWriteNode#operator_loc
7348*/
7349    pub operator_loc: pm_location_t,
7350    /** LocalVariableOrWriteNode#value
7351*/
7352    pub value: *mut pm_node,
7353    /** LocalVariableOrWriteNode#name
7354*/
7355    pub name: pm_constant_id_t,
7356    /** LocalVariableOrWriteNode#depth
7357*/
7358    pub depth: u32,
7359}
7360/** LocalVariableReadNode
7361
7362 Represents reading a local variable. Note that this requires that a local variable of the same name has already been written to in the same scope, otherwise it is parsed as a method call.
7363
7364``` ruby
7365 foo
7366 ^^^
7367```
7368
7369 Type: ::PM_LOCAL_VARIABLE_READ_NODE
7370
7371 @extends pm_node_t
7372*/
7373#[repr(C)]
7374#[derive(Debug, Default, Copy, Clone)]
7375pub struct pm_local_variable_read_node {
7376    /** The embedded base node.
7377*/
7378    pub base: pm_node_t,
7379    /** LocalVariableReadNode#name
7380
7381 The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
7382
7383``` ruby
7384 x      # name `:x`
7385```
7386
7387``` ruby
7388 _Test  # name `:_Test`
7389```
7390
7391 Note that this can also be an underscore followed by a number for the default block parameters.
7392
7393``` ruby
7394 _1     # name `:_1`
7395```
7396*/
7397    pub name: pm_constant_id_t,
7398    /** LocalVariableReadNode#depth
7399
7400 The number of visible scopes that should be searched to find the origin of this local variable.
7401
7402``` ruby
7403 foo = 1; foo # depth 0
7404```
7405
7406``` ruby
7407 bar = 2; tap { bar } # depth 1
7408```
7409
7410 The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see [the Prism documentation](https://github.com/ruby/prism/blob/main/docs/local_variable_depth.md).
7411*/
7412    pub depth: u32,
7413}
7414/** LocalVariableTargetNode
7415
7416 Represents writing to a local variable in a context that doesn't have an explicit value.
7417
7418``` ruby
7419 foo, bar = baz
7420 ^^^  ^^^
7421```
7422
7423``` ruby
7424 foo => baz
7425        ^^^
7426```
7427
7428 Type: ::PM_LOCAL_VARIABLE_TARGET_NODE
7429
7430 @extends pm_node_t
7431*/
7432#[repr(C)]
7433#[derive(Debug, Default, Copy, Clone)]
7434pub struct pm_local_variable_target_node {
7435    /** The embedded base node.
7436*/
7437    pub base: pm_node_t,
7438    /** LocalVariableTargetNode#name
7439*/
7440    pub name: pm_constant_id_t,
7441    /** LocalVariableTargetNode#depth
7442*/
7443    pub depth: u32,
7444}
7445/** LocalVariableWriteNode
7446
7447 Represents writing to a local variable.
7448
7449``` ruby
7450 foo = 1
7451 ^^^^^^^
7452```
7453
7454 Type: ::PM_LOCAL_VARIABLE_WRITE_NODE
7455
7456 @extends pm_node_t
7457*/
7458#[repr(C)]
7459#[derive(Debug, Copy, Clone)]
7460pub struct pm_local_variable_write_node {
7461    /** The embedded base node.
7462*/
7463    pub base: pm_node_t,
7464    /** LocalVariableWriteNode#name
7465
7466 The name of the local variable, which is an [identifier](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#identifiers).
7467
7468``` ruby
7469 foo = :bar # name `:foo`
7470```
7471
7472``` ruby
7473 abc = 123  # name `:abc`
7474```
7475*/
7476    pub name: pm_constant_id_t,
7477    /** LocalVariableWriteNode#depth
7478
7479 The number of semantic scopes we have to traverse to find the declaration of this variable.
7480
7481``` ruby
7482 foo = 1         # depth 0
7483```
7484
7485``` ruby
7486 tap { foo = 1 } # depth 1
7487```
7488
7489 The specific rules for calculating the depth may differ from individual Ruby implementations, as they are not specified by the language. For more information, see [the Prism documentation](https://github.com/ruby/prism/blob/main/docs/local_variable_depth.md).
7490*/
7491    pub depth: u32,
7492    /** LocalVariableWriteNode#name_loc
7493
7494 The Location of the variable name.
7495
7496``` ruby
7497 foo = :bar
7498 ^^^
7499```
7500*/
7501    pub name_loc: pm_location_t,
7502    /** LocalVariableWriteNode#value
7503
7504 The value to write to the local variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
7505
7506``` ruby
7507 foo = :bar
7508       ^^^^
7509```
7510
7511``` ruby
7512 abc = 1234
7513       ^^^^
7514```
7515
7516 Note that since the name of a local variable is known before the value is parsed, it is valid for a local variable to appear within the value of its own write.
7517
7518``` ruby
7519 foo = foo
7520```
7521*/
7522    pub value: *mut pm_node,
7523    /** LocalVariableWriteNode#operator_loc
7524
7525 The Location of the `=` operator.
7526
7527``` ruby
7528 x = :y
7529   ^
7530```
7531*/
7532    pub operator_loc: pm_location_t,
7533}
7534/** MatchLastLineNode
7535
7536 Represents a regular expression literal used in the predicate of a conditional to implicitly match against the last line read by an IO object.
7537
7538``` ruby
7539 if /foo/i then end
7540    ^^^^^^
7541```
7542
7543 Type: ::PM_MATCH_LAST_LINE_NODE
7544
7545 Flags (#pm_regular_expression_flags):
7546 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
7547 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
7548 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
7549 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
7550 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
7551 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
7552 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
7553 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
7554 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
7555 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
7556 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
7557
7558 @extends pm_node_t
7559*/
7560#[repr(C)]
7561#[derive(Debug, Copy, Clone)]
7562pub struct pm_match_last_line_node {
7563    /** The embedded base node.
7564*/
7565    pub base: pm_node_t,
7566    /** MatchLastLineNode#opening_loc
7567*/
7568    pub opening_loc: pm_location_t,
7569    /** MatchLastLineNode#content_loc
7570*/
7571    pub content_loc: pm_location_t,
7572    /** MatchLastLineNode#closing_loc
7573*/
7574    pub closing_loc: pm_location_t,
7575    /** MatchLastLineNode#unescaped
7576*/
7577    pub unescaped: pm_string_t,
7578}
7579/** MatchPredicateNode
7580
7581 Represents the use of the modifier `in` operator.
7582
7583``` ruby
7584 foo in bar
7585 ^^^^^^^^^^
7586```
7587
7588 Type: ::PM_MATCH_PREDICATE_NODE
7589
7590 @extends pm_node_t
7591*/
7592#[repr(C)]
7593#[derive(Debug, Copy, Clone)]
7594pub struct pm_match_predicate_node {
7595    /** The embedded base node.
7596*/
7597    pub base: pm_node_t,
7598    /** MatchPredicateNode#value
7599*/
7600    pub value: *mut pm_node,
7601    /** MatchPredicateNode#pattern
7602*/
7603    pub pattern: *mut pm_node,
7604    /** MatchPredicateNode#keyword_loc
7605*/
7606    pub keyword_loc: pm_location_t,
7607}
7608/** MatchRequiredNode
7609
7610 Represents the use of the `=>` operator.
7611
7612``` ruby
7613 foo => bar
7614 ^^^^^^^^^^
7615```
7616
7617 Type: ::PM_MATCH_REQUIRED_NODE
7618
7619 @extends pm_node_t
7620*/
7621#[repr(C)]
7622#[derive(Debug, Copy, Clone)]
7623pub struct pm_match_required_node {
7624    /** The embedded base node.
7625*/
7626    pub base: pm_node_t,
7627    /** MatchRequiredNode#value
7628
7629 Represents the left-hand side of the operator.
7630
7631``` ruby
7632 foo => bar
7633 ^^^
7634```
7635*/
7636    pub value: *mut pm_node,
7637    /** MatchRequiredNode#pattern
7638
7639 Represents the right-hand side of the operator. The type of the node depends on the expression.
7640
7641 Anything that looks like a local variable name (including `_`) will result in a `LocalVariableTargetNode`.
7642
7643``` ruby
7644 foo => a # This is equivalent to writing `a = foo`
7645        ^
7646```
7647
7648 Using an explicit `Array` or combining expressions with `,` will result in a `ArrayPatternNode`. This can be preceded by a constant.
7649
7650``` ruby
7651 foo => [a]
7652        ^^^
7653```
7654
7655``` ruby
7656 foo => a, b
7657        ^^^^
7658```
7659
7660``` ruby
7661 foo => Bar[a, b]
7662        ^^^^^^^^^
7663```
7664
7665 If the array pattern contains at least two wildcard matches, a `FindPatternNode` is created instead.
7666
7667``` ruby
7668 foo => *, 1, *a
7669        ^^^^^
7670```
7671
7672 Using an explicit `Hash` or a constant with square brackets and hash keys in the square brackets will result in a `HashPatternNode`.
7673
7674``` ruby
7675 foo => { a: 1, b: }
7676```
7677
7678``` ruby
7679 foo => Bar[a: 1, b:]
7680```
7681
7682``` ruby
7683 foo => Bar[**]
7684```
7685
7686 To use any variable that needs run time evaluation, pinning is required. This results in a `PinnedVariableNode`
7687
7688``` ruby
7689 foo => ^a
7690        ^^
7691```
7692
7693 Similar, any expression can be used with pinning. This results in a `PinnedExpressionNode`.
7694
7695``` ruby
7696 foo => ^(a + 1)
7697```
7698
7699 Anything else will result in the regular node for that expression, for example a `ConstantReadNode`.
7700
7701``` ruby
7702 foo => CONST
7703```
7704*/
7705    pub pattern: *mut pm_node,
7706    /** MatchRequiredNode#operator_loc
7707
7708 The Location of the operator.
7709
7710``` ruby
7711 foo => bar
7712     ^^
7713```
7714*/
7715    pub operator_loc: pm_location_t,
7716}
7717/** MatchWriteNode
7718
7719 Represents writing local variables using a regular expression match with named capture groups.
7720
7721``` ruby
7722 /(?<foo>bar)/ =~ baz
7723 ^^^^^^^^^^^^^^^^^^^^
7724```
7725
7726 Type: ::PM_MATCH_WRITE_NODE
7727
7728 @extends pm_node_t
7729*/
7730#[repr(C)]
7731#[derive(Debug, Copy, Clone)]
7732pub struct pm_match_write_node {
7733    /** The embedded base node.
7734*/
7735    pub base: pm_node_t,
7736    /** MatchWriteNode#call
7737*/
7738    pub call: *mut pm_call_node,
7739    /** MatchWriteNode#targets
7740*/
7741    pub targets: pm_node_list,
7742}
7743/** ModuleNode
7744
7745 Represents a module declaration involving the `module` keyword.
7746
7747``` ruby
7748 module Foo end
7749 ^^^^^^^^^^^^^^
7750```
7751
7752 Type: ::PM_MODULE_NODE
7753
7754 @extends pm_node_t
7755*/
7756#[repr(C)]
7757#[derive(Debug, Copy, Clone)]
7758pub struct pm_module_node {
7759    /** The embedded base node.
7760*/
7761    pub base: pm_node_t,
7762    /** ModuleNode#locals
7763*/
7764    pub locals: pm_constant_id_list_t,
7765    /** ModuleNode#module_keyword_loc
7766*/
7767    pub module_keyword_loc: pm_location_t,
7768    /** ModuleNode#constant_path
7769*/
7770    pub constant_path: *mut pm_node,
7771    /** ModuleNode#body
7772*/
7773    pub body: *mut pm_node,
7774    /** ModuleNode#end_keyword_loc
7775*/
7776    pub end_keyword_loc: pm_location_t,
7777    /** ModuleNode#name
7778*/
7779    pub name: pm_constant_id_t,
7780}
7781/** MultiTargetNode
7782
7783 Represents a multi-target expression.
7784
7785``` ruby
7786 a, (b, c) = 1, 2, 3
7787    ^^^^^^
7788```
7789
7790 This can be a part of `MultiWriteNode` as above, or the target of a `for` loop
7791
7792``` ruby
7793 for a, b in [[1, 2], [3, 4]]
7794     ^^^^
7795```
7796
7797 Type: ::PM_MULTI_TARGET_NODE
7798
7799 @extends pm_node_t
7800*/
7801#[repr(C)]
7802#[derive(Debug, Copy, Clone)]
7803pub struct pm_multi_target_node {
7804    /** The embedded base node.
7805*/
7806    pub base: pm_node_t,
7807    /** MultiTargetNode#lefts
7808
7809 Represents the targets expressions before a splat node.
7810
7811``` ruby
7812 a, (b, c, *) = 1, 2, 3, 4, 5
7813     ^^^^
7814```
7815
7816 The splat node can be absent, in that case all target expressions are in the left field.
7817
7818``` ruby
7819 a, (b, c) = 1, 2, 3, 4, 5
7820     ^^^^
7821```
7822*/
7823    pub lefts: pm_node_list,
7824    /** MultiTargetNode#rest
7825
7826 Represents a splat node in the target expression.
7827
7828``` ruby
7829 a, (b, *c) = 1, 2, 3, 4
7830        ^^
7831```
7832
7833 The variable can be empty, this results in a `SplatNode` with a `nil` expression field.
7834
7835``` ruby
7836 a, (b, *) = 1, 2, 3, 4
7837        ^
7838```
7839
7840 If the `*` is omitted, this field will contain an `ImplicitRestNode`
7841
7842``` ruby
7843 a, (b,) = 1, 2, 3, 4
7844      ^
7845```
7846*/
7847    pub rest: *mut pm_node,
7848    /** MultiTargetNode#rights
7849
7850 Represents the targets expressions after a splat node.
7851
7852``` ruby
7853 a, (*, b, c) = 1, 2, 3, 4, 5
7854        ^^^^
7855```
7856*/
7857    pub rights: pm_node_list,
7858    /** MultiTargetNode#lparen_loc
7859
7860 The Location of the opening parenthesis.
7861
7862``` ruby
7863 a, (b, c) = 1, 2, 3
7864    ^
7865```
7866*/
7867    pub lparen_loc: pm_location_t,
7868    /** MultiTargetNode#rparen_loc
7869
7870 The Location of the closing parenthesis.
7871
7872``` ruby
7873 a, (b, c) = 1, 2, 3
7874         ^
7875```
7876*/
7877    pub rparen_loc: pm_location_t,
7878}
7879/** MultiWriteNode
7880
7881 Represents a write to a multi-target expression.
7882
7883``` ruby
7884 a, b, c = 1, 2, 3
7885 ^^^^^^^^^^^^^^^^^
7886```
7887
7888 Type: ::PM_MULTI_WRITE_NODE
7889
7890 @extends pm_node_t
7891*/
7892#[repr(C)]
7893#[derive(Debug, Copy, Clone)]
7894pub struct pm_multi_write_node {
7895    /** The embedded base node.
7896*/
7897    pub base: pm_node_t,
7898    /** MultiWriteNode#lefts
7899
7900 Represents the targets expressions before a splat node.
7901
7902``` ruby
7903 a, b, * = 1, 2, 3, 4, 5
7904 ^^^^
7905```
7906
7907 The splat node can be absent, in that case all target expressions are in the left field.
7908
7909``` ruby
7910 a, b, c = 1, 2, 3, 4, 5
7911 ^^^^^^^
7912```
7913*/
7914    pub lefts: pm_node_list,
7915    /** MultiWriteNode#rest
7916
7917 Represents a splat node in the target expression.
7918
7919``` ruby
7920 a, b, *c = 1, 2, 3, 4
7921       ^^
7922```
7923
7924 The variable can be empty, this results in a `SplatNode` with a `nil` expression field.
7925
7926``` ruby
7927 a, b, * = 1, 2, 3, 4
7928       ^
7929```
7930
7931 If the `*` is omitted, this field will contain an `ImplicitRestNode`
7932
7933``` ruby
7934 a, b, = 1, 2, 3, 4
7935     ^
7936```
7937*/
7938    pub rest: *mut pm_node,
7939    /** MultiWriteNode#rights
7940
7941 Represents the targets expressions after a splat node.
7942
7943``` ruby
7944 a, *, b, c = 1, 2, 3, 4, 5
7945       ^^^^
7946```
7947*/
7948    pub rights: pm_node_list,
7949    /** MultiWriteNode#lparen_loc
7950
7951 The Location of the opening parenthesis.
7952
7953``` ruby
7954 (a, b, c) = 1, 2, 3
7955 ^
7956```
7957*/
7958    pub lparen_loc: pm_location_t,
7959    /** MultiWriteNode#rparen_loc
7960
7961 The Location of the closing parenthesis.
7962
7963``` ruby
7964 (a, b, c) = 1, 2, 3
7965         ^
7966```
7967*/
7968    pub rparen_loc: pm_location_t,
7969    /** MultiWriteNode#operator_loc
7970
7971 The Location of the operator.
7972
7973``` ruby
7974 a, b, c = 1, 2, 3
7975         ^
7976```
7977*/
7978    pub operator_loc: pm_location_t,
7979    /** MultiWriteNode#value
7980
7981 The value to write to the targets. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
7982
7983``` ruby
7984 a, b, c = 1, 2, 3
7985           ^^^^^^^
7986```
7987*/
7988    pub value: *mut pm_node,
7989}
7990/** NextNode
7991
7992 Represents the use of the `next` keyword.
7993
7994``` ruby
7995 next 1
7996 ^^^^^^
7997```
7998
7999 Type: ::PM_NEXT_NODE
8000
8001 @extends pm_node_t
8002*/
8003#[repr(C)]
8004#[derive(Debug, Copy, Clone)]
8005pub struct pm_next_node {
8006    /** The embedded base node.
8007*/
8008    pub base: pm_node_t,
8009    /** NextNode#arguments
8010*/
8011    pub arguments: *mut pm_arguments_node,
8012    /** NextNode#keyword_loc
8013*/
8014    pub keyword_loc: pm_location_t,
8015}
8016/** NilNode
8017
8018 Represents the use of the `nil` keyword.
8019
8020``` ruby
8021 nil
8022 ^^^
8023```
8024
8025 Type: ::PM_NIL_NODE
8026
8027 @extends pm_node_t
8028*/
8029#[repr(C)]
8030#[derive(Debug, Default, Copy, Clone)]
8031pub struct pm_nil_node {
8032    /** The embedded base node.
8033*/
8034    pub base: pm_node_t,
8035}
8036/** NoBlockParameterNode
8037
8038 Represents the use of `&nil` inside method arguments.
8039
8040``` ruby
8041 def a(&nil)
8042       ^^^^
8043 end
8044```
8045
8046 Type: ::PM_NO_BLOCK_PARAMETER_NODE
8047
8048 @extends pm_node_t
8049*/
8050#[repr(C)]
8051#[derive(Debug, Default, Copy, Clone)]
8052pub struct pm_no_block_parameter_node {
8053    /** The embedded base node.
8054*/
8055    pub base: pm_node_t,
8056    /** NoBlockParameterNode#operator_loc
8057*/
8058    pub operator_loc: pm_location_t,
8059    /** NoBlockParameterNode#keyword_loc
8060*/
8061    pub keyword_loc: pm_location_t,
8062}
8063/** NoKeywordsParameterNode
8064
8065 Represents the use of `**nil` inside method arguments.
8066
8067``` ruby
8068 def a(**nil)
8069       ^^^^^
8070 end
8071```
8072
8073 Type: ::PM_NO_KEYWORDS_PARAMETER_NODE
8074
8075 @extends pm_node_t
8076*/
8077#[repr(C)]
8078#[derive(Debug, Default, Copy, Clone)]
8079pub struct pm_no_keywords_parameter_node {
8080    /** The embedded base node.
8081*/
8082    pub base: pm_node_t,
8083    /** NoKeywordsParameterNode#operator_loc
8084*/
8085    pub operator_loc: pm_location_t,
8086    /** NoKeywordsParameterNode#keyword_loc
8087*/
8088    pub keyword_loc: pm_location_t,
8089}
8090/** NumberedParametersNode
8091
8092 Represents an implicit set of parameters through the use of numbered parameters within a block or lambda.
8093
8094``` ruby
8095 -> { _1 + _2 }
8096 ^^^^^^^^^^^^^^
8097```
8098
8099 Type: ::PM_NUMBERED_PARAMETERS_NODE
8100
8101 @extends pm_node_t
8102*/
8103#[repr(C)]
8104#[derive(Debug, Default, Copy, Clone)]
8105pub struct pm_numbered_parameters_node {
8106    /** The embedded base node.
8107*/
8108    pub base: pm_node_t,
8109    /** NumberedParametersNode#maximum
8110*/
8111    pub maximum: u8,
8112}
8113/** NumberedReferenceReadNode
8114
8115 Represents reading a numbered reference to a capture in the previous match.
8116
8117``` ruby
8118 $1
8119 ^^
8120```
8121
8122 Type: ::PM_NUMBERED_REFERENCE_READ_NODE
8123
8124 @extends pm_node_t
8125*/
8126#[repr(C)]
8127#[derive(Debug, Default, Copy, Clone)]
8128pub struct pm_numbered_reference_read_node {
8129    /** The embedded base node.
8130*/
8131    pub base: pm_node_t,
8132    /** NumberedReferenceReadNode#number
8133
8134 The (1-indexed, from the left) number of the capture group. Numbered references that are too large result in this value being `0`.
8135
8136``` ruby
8137 $1          # number `1`
8138```
8139
8140``` ruby
8141 $5432       # number `5432`
8142```
8143
8144``` ruby
8145 $4294967296 # number `0`
8146```
8147*/
8148    pub number: u32,
8149}
8150/** OptionalKeywordParameterNode
8151
8152 Represents an optional keyword parameter to a method, block, or lambda definition.
8153
8154``` ruby
8155 def a(b: 1)
8156       ^^^^
8157 end
8158```
8159
8160 Type: ::PM_OPTIONAL_KEYWORD_PARAMETER_NODE
8161
8162 Flags (#pm_parameter_flags):
8163 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
8164
8165 @extends pm_node_t
8166*/
8167#[repr(C)]
8168#[derive(Debug, Copy, Clone)]
8169pub struct pm_optional_keyword_parameter_node {
8170    /** The embedded base node.
8171*/
8172    pub base: pm_node_t,
8173    /** OptionalKeywordParameterNode#name
8174*/
8175    pub name: pm_constant_id_t,
8176    /** OptionalKeywordParameterNode#name_loc
8177*/
8178    pub name_loc: pm_location_t,
8179    /** OptionalKeywordParameterNode#value
8180*/
8181    pub value: *mut pm_node,
8182}
8183/** OptionalParameterNode
8184
8185 Represents an optional parameter to a method, block, or lambda definition.
8186
8187``` ruby
8188 def a(b = 1)
8189       ^^^^^
8190 end
8191```
8192
8193 Type: ::PM_OPTIONAL_PARAMETER_NODE
8194
8195 Flags (#pm_parameter_flags):
8196 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
8197
8198 @extends pm_node_t
8199*/
8200#[repr(C)]
8201#[derive(Debug, Copy, Clone)]
8202pub struct pm_optional_parameter_node {
8203    /** The embedded base node.
8204*/
8205    pub base: pm_node_t,
8206    /** OptionalParameterNode#name
8207*/
8208    pub name: pm_constant_id_t,
8209    /** OptionalParameterNode#name_loc
8210*/
8211    pub name_loc: pm_location_t,
8212    /** OptionalParameterNode#operator_loc
8213*/
8214    pub operator_loc: pm_location_t,
8215    /** OptionalParameterNode#value
8216*/
8217    pub value: *mut pm_node,
8218}
8219/** OrNode
8220
8221 Represents the use of the `||` operator or the `or` keyword.
8222
8223``` ruby
8224 left or right
8225 ^^^^^^^^^^^^^
8226```
8227
8228 Type: ::PM_OR_NODE
8229
8230 @extends pm_node_t
8231*/
8232#[repr(C)]
8233#[derive(Debug, Copy, Clone)]
8234pub struct pm_or_node {
8235    /** The embedded base node.
8236*/
8237    pub base: pm_node_t,
8238    /** OrNode#left
8239
8240 Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
8241
8242``` ruby
8243 left or right
8244 ^^^^
8245```
8246
8247``` ruby
8248 1 || 2
8249 ^
8250```
8251*/
8252    pub left: *mut pm_node,
8253    /** OrNode#right
8254
8255 Represents the right side of the expression.
8256
8257``` ruby
8258 left || right
8259         ^^^^^
8260```
8261
8262``` ruby
8263 1 or 2
8264      ^
8265```
8266*/
8267    pub right: *mut pm_node,
8268    /** OrNode#operator_loc
8269
8270 The Location of the `or` keyword or the `||` operator.
8271
8272``` ruby
8273 left or right
8274      ^^
8275```
8276*/
8277    pub operator_loc: pm_location_t,
8278}
8279/** ParametersNode
8280
8281 Represents the list of parameters on a method, block, or lambda definition.
8282
8283``` ruby
8284 def a(b, c, d)
8285       ^^^^^^^
8286 end
8287```
8288
8289 Type: ::PM_PARAMETERS_NODE
8290
8291 @extends pm_node_t
8292*/
8293#[repr(C)]
8294#[derive(Debug, Copy, Clone)]
8295pub struct pm_parameters_node {
8296    /** The embedded base node.
8297*/
8298    pub base: pm_node_t,
8299    /** ParametersNode#requireds
8300*/
8301    pub requireds: pm_node_list,
8302    /** ParametersNode#optionals
8303*/
8304    pub optionals: pm_node_list,
8305    /** ParametersNode#rest
8306*/
8307    pub rest: *mut pm_node,
8308    /** ParametersNode#posts
8309*/
8310    pub posts: pm_node_list,
8311    /** ParametersNode#keywords
8312*/
8313    pub keywords: pm_node_list,
8314    /** ParametersNode#keyword_rest
8315*/
8316    pub keyword_rest: *mut pm_node,
8317    /** ParametersNode#block
8318*/
8319    pub block: *mut pm_node,
8320}
8321/** ParenthesesNode
8322
8323 Represents a parenthesized expression
8324
8325``` ruby
8326 (10 + 34)
8327 ^^^^^^^^^
8328```
8329
8330 Type: ::PM_PARENTHESES_NODE
8331
8332 Flags (#pm_parentheses_node_flags):
8333 * ::PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS
8334
8335 @extends pm_node_t
8336*/
8337#[repr(C)]
8338#[derive(Debug, Copy, Clone)]
8339pub struct pm_parentheses_node {
8340    /** The embedded base node.
8341*/
8342    pub base: pm_node_t,
8343    /** ParenthesesNode#body
8344*/
8345    pub body: *mut pm_node,
8346    /** ParenthesesNode#opening_loc
8347*/
8348    pub opening_loc: pm_location_t,
8349    /** ParenthesesNode#closing_loc
8350*/
8351    pub closing_loc: pm_location_t,
8352}
8353/** PinnedExpressionNode
8354
8355 Represents the use of the `^` operator for pinning an expression in a pattern matching expression.
8356
8357``` ruby
8358 foo in ^(bar)
8359        ^^^^^^
8360```
8361
8362 Type: ::PM_PINNED_EXPRESSION_NODE
8363
8364 @extends pm_node_t
8365*/
8366#[repr(C)]
8367#[derive(Debug, Copy, Clone)]
8368pub struct pm_pinned_expression_node {
8369    /** The embedded base node.
8370*/
8371    pub base: pm_node_t,
8372    /** PinnedExpressionNode#expression
8373
8374 The expression used in the pinned expression
8375
8376``` ruby
8377 foo in ^(bar)
8378          ^^^
8379```
8380*/
8381    pub expression: *mut pm_node,
8382    /** PinnedExpressionNode#operator_loc
8383
8384 The Location of the `^` operator
8385
8386``` ruby
8387 foo in ^(bar)
8388        ^
8389```
8390*/
8391    pub operator_loc: pm_location_t,
8392    /** PinnedExpressionNode#lparen_loc
8393
8394 The Location of the opening parenthesis.
8395
8396``` ruby
8397 foo in ^(bar)
8398         ^
8399```
8400*/
8401    pub lparen_loc: pm_location_t,
8402    /** PinnedExpressionNode#rparen_loc
8403
8404 The Location of the closing parenthesis.
8405
8406``` ruby
8407 foo in ^(bar)
8408             ^
8409```
8410*/
8411    pub rparen_loc: pm_location_t,
8412}
8413/** PinnedVariableNode
8414
8415 Represents the use of the `^` operator for pinning a variable in a pattern matching expression.
8416
8417``` ruby
8418 foo in ^bar
8419        ^^^^
8420```
8421
8422 Type: ::PM_PINNED_VARIABLE_NODE
8423
8424 @extends pm_node_t
8425*/
8426#[repr(C)]
8427#[derive(Debug, Copy, Clone)]
8428pub struct pm_pinned_variable_node {
8429    /** The embedded base node.
8430*/
8431    pub base: pm_node_t,
8432    /** PinnedVariableNode#variable
8433
8434 The variable used in the pinned expression
8435
8436``` ruby
8437 foo in ^bar
8438         ^^^
8439```
8440*/
8441    pub variable: *mut pm_node,
8442    /** PinnedVariableNode#operator_loc
8443
8444 The Location of the `^` operator
8445
8446``` ruby
8447 foo in ^bar
8448        ^
8449```
8450*/
8451    pub operator_loc: pm_location_t,
8452}
8453/** PostExecutionNode
8454
8455 Represents the use of the `END` keyword.
8456
8457``` ruby
8458 END { foo }
8459 ^^^^^^^^^^^
8460```
8461
8462 Type: ::PM_POST_EXECUTION_NODE
8463
8464 @extends pm_node_t
8465*/
8466#[repr(C)]
8467#[derive(Debug, Copy, Clone)]
8468pub struct pm_post_execution_node {
8469    /** The embedded base node.
8470*/
8471    pub base: pm_node_t,
8472    /** PostExecutionNode#statements
8473*/
8474    pub statements: *mut pm_statements_node,
8475    /** PostExecutionNode#keyword_loc
8476*/
8477    pub keyword_loc: pm_location_t,
8478    /** PostExecutionNode#opening_loc
8479*/
8480    pub opening_loc: pm_location_t,
8481    /** PostExecutionNode#closing_loc
8482*/
8483    pub closing_loc: pm_location_t,
8484}
8485/** PreExecutionNode
8486
8487 Represents the use of the `BEGIN` keyword.
8488
8489``` ruby
8490 BEGIN { foo }
8491 ^^^^^^^^^^^^^
8492```
8493
8494 Type: ::PM_PRE_EXECUTION_NODE
8495
8496 @extends pm_node_t
8497*/
8498#[repr(C)]
8499#[derive(Debug, Copy, Clone)]
8500pub struct pm_pre_execution_node {
8501    /** The embedded base node.
8502*/
8503    pub base: pm_node_t,
8504    /** PreExecutionNode#statements
8505*/
8506    pub statements: *mut pm_statements_node,
8507    /** PreExecutionNode#keyword_loc
8508*/
8509    pub keyword_loc: pm_location_t,
8510    /** PreExecutionNode#opening_loc
8511*/
8512    pub opening_loc: pm_location_t,
8513    /** PreExecutionNode#closing_loc
8514*/
8515    pub closing_loc: pm_location_t,
8516}
8517/** ProgramNode
8518
8519 The top level node of any parse tree.
8520
8521 Type: ::PM_PROGRAM_NODE
8522
8523 @extends pm_node_t
8524*/
8525#[repr(C)]
8526#[derive(Debug, Copy, Clone)]
8527pub struct pm_program_node {
8528    /** The embedded base node.
8529*/
8530    pub base: pm_node_t,
8531    /** ProgramNode#locals
8532*/
8533    pub locals: pm_constant_id_list_t,
8534    /** ProgramNode#statements
8535*/
8536    pub statements: *mut pm_statements_node,
8537}
8538/** RangeNode
8539
8540 Represents the use of the `..` or `...` operators.
8541
8542``` ruby
8543 1..2
8544 ^^^^
8545```
8546
8547``` ruby
8548 c if a =~ /left/ ... b =~ /right/
8549      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8550```
8551
8552 Type: ::PM_RANGE_NODE
8553
8554 Flags (#pm_range_flags):
8555 * ::PM_RANGE_FLAGS_EXCLUDE_END
8556
8557 @extends pm_node_t
8558*/
8559#[repr(C)]
8560#[derive(Debug, Copy, Clone)]
8561pub struct pm_range_node {
8562    /** The embedded base node.
8563*/
8564    pub base: pm_node_t,
8565    /** RangeNode#left
8566
8567 The left-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
8568
8569``` ruby
8570 1...
8571 ^
8572```
8573
8574``` ruby
8575 hello...goodbye
8576 ^^^^^
8577```
8578*/
8579    pub left: *mut pm_node,
8580    /** RangeNode#right
8581
8582 The right-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
8583
8584``` ruby
8585 ..5
8586   ^
8587```
8588
8589``` ruby
8590 1...foo
8591     ^^^
8592```
8593 If neither right-hand or left-hand side was included, this will be an ErrorRecoveryNode.
8594*/
8595    pub right: *mut pm_node,
8596    /** RangeNode#operator_loc
8597
8598 The Location of the `..` or `...` operator.
8599*/
8600    pub operator_loc: pm_location_t,
8601}
8602/** RationalNode
8603
8604 Represents a rational number literal.
8605
8606``` ruby
8607 1.0r
8608 ^^^^
8609```
8610
8611 Type: ::PM_RATIONAL_NODE
8612
8613 Flags (#pm_integer_base_flags):
8614 * ::PM_INTEGER_BASE_FLAGS_BINARY
8615 * ::PM_INTEGER_BASE_FLAGS_DECIMAL
8616 * ::PM_INTEGER_BASE_FLAGS_OCTAL
8617 * ::PM_INTEGER_BASE_FLAGS_HEXADECIMAL
8618
8619 @extends pm_node_t
8620*/
8621#[repr(C)]
8622#[derive(Debug, Copy, Clone)]
8623pub struct pm_rational_node {
8624    /** The embedded base node.
8625*/
8626    pub base: pm_node_t,
8627    /** RationalNode#numerator
8628
8629 The numerator of the rational number.
8630
8631``` ruby
8632 1.5r # numerator 3
8633```
8634*/
8635    pub numerator: pm_integer_t,
8636    /** RationalNode#denominator
8637
8638 The denominator of the rational number.
8639
8640``` ruby
8641 1.5r # denominator 2
8642```
8643*/
8644    pub denominator: pm_integer_t,
8645}
8646/** RedoNode
8647
8648 Represents the use of the `redo` keyword.
8649
8650``` ruby
8651 redo
8652 ^^^^
8653```
8654
8655 Type: ::PM_REDO_NODE
8656
8657 @extends pm_node_t
8658*/
8659#[repr(C)]
8660#[derive(Debug, Default, Copy, Clone)]
8661pub struct pm_redo_node {
8662    /** The embedded base node.
8663*/
8664    pub base: pm_node_t,
8665}
8666/** RegularExpressionNode
8667
8668 Represents a regular expression literal with no interpolation.
8669
8670``` ruby
8671 /foo/i
8672 ^^^^^^
8673```
8674
8675 Type: ::PM_REGULAR_EXPRESSION_NODE
8676
8677 Flags (#pm_regular_expression_flags):
8678 * ::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE
8679 * ::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED
8680 * ::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE
8681 * ::PM_REGULAR_EXPRESSION_FLAGS_ONCE
8682 * ::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP
8683 * ::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT
8684 * ::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J
8685 * ::PM_REGULAR_EXPRESSION_FLAGS_UTF_8
8686 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING
8687 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING
8688 * ::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING
8689
8690 @extends pm_node_t
8691*/
8692#[repr(C)]
8693#[derive(Debug, Copy, Clone)]
8694pub struct pm_regular_expression_node {
8695    /** The embedded base node.
8696*/
8697    pub base: pm_node_t,
8698    /** RegularExpressionNode#opening_loc
8699*/
8700    pub opening_loc: pm_location_t,
8701    /** RegularExpressionNode#content_loc
8702*/
8703    pub content_loc: pm_location_t,
8704    /** RegularExpressionNode#closing_loc
8705*/
8706    pub closing_loc: pm_location_t,
8707    /** RegularExpressionNode#unescaped
8708*/
8709    pub unescaped: pm_string_t,
8710}
8711/** RequiredKeywordParameterNode
8712
8713 Represents a required keyword parameter to a method, block, or lambda definition.
8714
8715``` ruby
8716 def a(b: )
8717       ^^
8718 end
8719```
8720
8721 Type: ::PM_REQUIRED_KEYWORD_PARAMETER_NODE
8722
8723 Flags (#pm_parameter_flags):
8724 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
8725
8726 @extends pm_node_t
8727*/
8728#[repr(C)]
8729#[derive(Debug, Default, Copy, Clone)]
8730pub struct pm_required_keyword_parameter_node {
8731    /** The embedded base node.
8732*/
8733    pub base: pm_node_t,
8734    /** RequiredKeywordParameterNode#name
8735*/
8736    pub name: pm_constant_id_t,
8737    /** RequiredKeywordParameterNode#name_loc
8738*/
8739    pub name_loc: pm_location_t,
8740}
8741/** RequiredParameterNode
8742
8743 Represents a required parameter to a method, block, or lambda definition.
8744
8745``` ruby
8746 def a(b)
8747       ^
8748 end
8749```
8750
8751 Type: ::PM_REQUIRED_PARAMETER_NODE
8752
8753 Flags (#pm_parameter_flags):
8754 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
8755
8756 @extends pm_node_t
8757*/
8758#[repr(C)]
8759#[derive(Debug, Default, Copy, Clone)]
8760pub struct pm_required_parameter_node {
8761    /** The embedded base node.
8762*/
8763    pub base: pm_node_t,
8764    /** RequiredParameterNode#name
8765*/
8766    pub name: pm_constant_id_t,
8767}
8768/** RescueModifierNode
8769
8770 Represents an expression modified with a rescue.
8771
8772``` ruby
8773 foo rescue nil
8774 ^^^^^^^^^^^^^^
8775```
8776
8777 Type: ::PM_RESCUE_MODIFIER_NODE
8778
8779 @extends pm_node_t
8780*/
8781#[repr(C)]
8782#[derive(Debug, Copy, Clone)]
8783pub struct pm_rescue_modifier_node {
8784    /** The embedded base node.
8785*/
8786    pub base: pm_node_t,
8787    /** RescueModifierNode#expression
8788*/
8789    pub expression: *mut pm_node,
8790    /** RescueModifierNode#keyword_loc
8791*/
8792    pub keyword_loc: pm_location_t,
8793    /** RescueModifierNode#rescue_expression
8794*/
8795    pub rescue_expression: *mut pm_node,
8796}
8797/** RescueNode
8798
8799 Represents a rescue statement.
8800
8801``` ruby
8802 begin
8803 rescue Foo, *splat, Bar => ex
8804   foo
8805 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8806 end
8807```
8808
8809 `Foo, *splat, Bar` are in the `exceptions` field. `ex` is in the `reference` field.
8810
8811 Type: ::PM_RESCUE_NODE
8812
8813 @extends pm_node_t
8814*/
8815#[repr(C)]
8816#[derive(Debug, Copy, Clone)]
8817pub struct pm_rescue_node {
8818    /** The embedded base node.
8819*/
8820    pub base: pm_node_t,
8821    /** RescueNode#keyword_loc
8822*/
8823    pub keyword_loc: pm_location_t,
8824    /** RescueNode#exceptions
8825*/
8826    pub exceptions: pm_node_list,
8827    /** RescueNode#operator_loc
8828*/
8829    pub operator_loc: pm_location_t,
8830    /** RescueNode#reference
8831*/
8832    pub reference: *mut pm_node,
8833    /** RescueNode#then_keyword_loc
8834*/
8835    pub then_keyword_loc: pm_location_t,
8836    /** RescueNode#statements
8837*/
8838    pub statements: *mut pm_statements_node,
8839    /** RescueNode#subsequent
8840*/
8841    pub subsequent: *mut pm_rescue_node,
8842}
8843/** RestParameterNode
8844
8845 Represents a rest parameter to a method, block, or lambda definition.
8846
8847``` ruby
8848 def a(*b)
8849       ^^
8850 end
8851```
8852
8853 Type: ::PM_REST_PARAMETER_NODE
8854
8855 Flags (#pm_parameter_flags):
8856 * ::PM_PARAMETER_FLAGS_REPEATED_PARAMETER
8857
8858 @extends pm_node_t
8859*/
8860#[repr(C)]
8861#[derive(Debug, Default, Copy, Clone)]
8862pub struct pm_rest_parameter_node {
8863    /** The embedded base node.
8864*/
8865    pub base: pm_node_t,
8866    /** RestParameterNode#name
8867*/
8868    pub name: pm_constant_id_t,
8869    /** RestParameterNode#name_loc
8870*/
8871    pub name_loc: pm_location_t,
8872    /** RestParameterNode#operator_loc
8873*/
8874    pub operator_loc: pm_location_t,
8875}
8876/** RetryNode
8877
8878 Represents the use of the `retry` keyword.
8879
8880``` ruby
8881 retry
8882 ^^^^^
8883```
8884
8885 Type: ::PM_RETRY_NODE
8886
8887 @extends pm_node_t
8888*/
8889#[repr(C)]
8890#[derive(Debug, Default, Copy, Clone)]
8891pub struct pm_retry_node {
8892    /** The embedded base node.
8893*/
8894    pub base: pm_node_t,
8895}
8896/** ReturnNode
8897
8898 Represents the use of the `return` keyword.
8899
8900``` ruby
8901 return 1
8902 ^^^^^^^^
8903```
8904
8905 Type: ::PM_RETURN_NODE
8906
8907 @extends pm_node_t
8908*/
8909#[repr(C)]
8910#[derive(Debug, Copy, Clone)]
8911pub struct pm_return_node {
8912    /** The embedded base node.
8913*/
8914    pub base: pm_node_t,
8915    /** ReturnNode#keyword_loc
8916*/
8917    pub keyword_loc: pm_location_t,
8918    /** ReturnNode#arguments
8919*/
8920    pub arguments: *mut pm_arguments_node,
8921}
8922/** SelfNode
8923
8924 Represents the `self` keyword.
8925
8926``` ruby
8927 self
8928 ^^^^
8929```
8930
8931 Type: ::PM_SELF_NODE
8932
8933 @extends pm_node_t
8934*/
8935#[repr(C)]
8936#[derive(Debug, Default, Copy, Clone)]
8937pub struct pm_self_node {
8938    /** The embedded base node.
8939*/
8940    pub base: pm_node_t,
8941}
8942/** ShareableConstantNode
8943
8944 This node wraps a constant write to indicate that when the value is written, it should have its shareability state modified.
8945
8946``` ruby
8947 # shareable_constant_value: literal
8948 C = { a: 1 }
8949 ^^^^^^^^^^^^
8950```
8951
8952 Type: ::PM_SHAREABLE_CONSTANT_NODE
8953
8954 Flags (#pm_shareable_constant_node_flags):
8955 * ::PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL
8956 * ::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING
8957 * ::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY
8958
8959 @extends pm_node_t
8960*/
8961#[repr(C)]
8962#[derive(Debug, Copy, Clone)]
8963pub struct pm_shareable_constant_node {
8964    /** The embedded base node.
8965*/
8966    pub base: pm_node_t,
8967    /** ShareableConstantNode#write
8968
8969 The constant write that should be modified with the shareability state.
8970*/
8971    pub write: *mut pm_node,
8972}
8973/** SingletonClassNode
8974
8975 Represents a singleton class declaration involving the `class` keyword.
8976
8977``` ruby
8978 class << self end
8979 ^^^^^^^^^^^^^^^^^
8980```
8981
8982 Type: ::PM_SINGLETON_CLASS_NODE
8983
8984 @extends pm_node_t
8985*/
8986#[repr(C)]
8987#[derive(Debug, Copy, Clone)]
8988pub struct pm_singleton_class_node {
8989    /** The embedded base node.
8990*/
8991    pub base: pm_node_t,
8992    /** SingletonClassNode#locals
8993*/
8994    pub locals: pm_constant_id_list_t,
8995    /** SingletonClassNode#class_keyword_loc
8996*/
8997    pub class_keyword_loc: pm_location_t,
8998    /** SingletonClassNode#operator_loc
8999*/
9000    pub operator_loc: pm_location_t,
9001    /** SingletonClassNode#expression
9002*/
9003    pub expression: *mut pm_node,
9004    /** SingletonClassNode#body
9005*/
9006    pub body: *mut pm_node,
9007    /** SingletonClassNode#end_keyword_loc
9008*/
9009    pub end_keyword_loc: pm_location_t,
9010}
9011/** SourceEncodingNode
9012
9013 Represents the use of the `__ENCODING__` keyword.
9014
9015``` ruby
9016 __ENCODING__
9017 ^^^^^^^^^^^^
9018```
9019
9020 Type: ::PM_SOURCE_ENCODING_NODE
9021
9022 @extends pm_node_t
9023*/
9024#[repr(C)]
9025#[derive(Debug, Default, Copy, Clone)]
9026pub struct pm_source_encoding_node {
9027    /** The embedded base node.
9028*/
9029    pub base: pm_node_t,
9030}
9031/** SourceFileNode
9032
9033 Represents the use of the `__FILE__` keyword.
9034
9035``` ruby
9036 __FILE__
9037 ^^^^^^^^
9038```
9039
9040 Type: ::PM_SOURCE_FILE_NODE
9041
9042 Flags (#pm_string_flags):
9043 * ::PM_STRING_FLAGS_FORCED_UTF8_ENCODING
9044 * ::PM_STRING_FLAGS_FORCED_BINARY_ENCODING
9045 * ::PM_STRING_FLAGS_FROZEN
9046 * ::PM_STRING_FLAGS_MUTABLE
9047
9048 @extends pm_node_t
9049*/
9050#[repr(C)]
9051#[derive(Debug, Copy, Clone)]
9052pub struct pm_source_file_node {
9053    /** The embedded base node.
9054*/
9055    pub base: pm_node_t,
9056    /** SourceFileNode#filepath
9057
9058 Represents the file path being parsed. This corresponds directly to the `filepath` option given to the various `Prism.parse*` APIs.
9059*/
9060    pub filepath: pm_string_t,
9061}
9062/** SourceLineNode
9063
9064 Represents the use of the `__LINE__` keyword.
9065
9066``` ruby
9067 __LINE__
9068 ^^^^^^^^
9069```
9070
9071 Type: ::PM_SOURCE_LINE_NODE
9072
9073 @extends pm_node_t
9074*/
9075#[repr(C)]
9076#[derive(Debug, Default, Copy, Clone)]
9077pub struct pm_source_line_node {
9078    /** The embedded base node.
9079*/
9080    pub base: pm_node_t,
9081}
9082/** SplatNode
9083
9084 Represents the use of the splat operator.
9085
9086``` ruby
9087 [*a]
9088  ^^
9089```
9090
9091 Type: ::PM_SPLAT_NODE
9092
9093 @extends pm_node_t
9094*/
9095#[repr(C)]
9096#[derive(Debug, Copy, Clone)]
9097pub struct pm_splat_node {
9098    /** The embedded base node.
9099*/
9100    pub base: pm_node_t,
9101    /** SplatNode#operator_loc
9102*/
9103    pub operator_loc: pm_location_t,
9104    /** SplatNode#expression
9105*/
9106    pub expression: *mut pm_node,
9107}
9108/** StatementsNode
9109
9110 Represents a set of statements contained within some scope.
9111
9112``` ruby
9113 foo; bar; baz
9114 ^^^^^^^^^^^^^
9115```
9116
9117 Type: ::PM_STATEMENTS_NODE
9118
9119 @extends pm_node_t
9120*/
9121#[repr(C)]
9122#[derive(Debug, Copy, Clone)]
9123pub struct pm_statements_node {
9124    /** The embedded base node.
9125*/
9126    pub base: pm_node_t,
9127    /** StatementsNode#body
9128*/
9129    pub body: pm_node_list,
9130}
9131/** StringNode
9132
9133 Represents a string literal, a string contained within a `%w` list, or plain string content within an interpolated string.
9134
9135``` ruby
9136 "foo"
9137 ^^^^^
9138```
9139
9140``` ruby
9141 %w[foo]
9142    ^^^
9143```
9144
9145``` ruby
9146 "foo #{bar} baz"
9147  ^^^^      ^^^^
9148```
9149
9150 Type: ::PM_STRING_NODE
9151
9152 Flags (#pm_string_flags):
9153 * ::PM_STRING_FLAGS_FORCED_UTF8_ENCODING
9154 * ::PM_STRING_FLAGS_FORCED_BINARY_ENCODING
9155 * ::PM_STRING_FLAGS_FROZEN
9156 * ::PM_STRING_FLAGS_MUTABLE
9157
9158 @extends pm_node_t
9159*/
9160#[repr(C)]
9161#[derive(Debug, Copy, Clone)]
9162pub struct pm_string_node {
9163    /** The embedded base node.
9164*/
9165    pub base: pm_node_t,
9166    /** StringNode#opening_loc
9167*/
9168    pub opening_loc: pm_location_t,
9169    /** StringNode#content_loc
9170*/
9171    pub content_loc: pm_location_t,
9172    /** StringNode#closing_loc
9173*/
9174    pub closing_loc: pm_location_t,
9175    /** StringNode#unescaped
9176*/
9177    pub unescaped: pm_string_t,
9178}
9179/** SuperNode
9180
9181 Represents the use of the `super` keyword with parentheses or arguments.
9182
9183``` ruby
9184 super()
9185 ^^^^^^^
9186```
9187
9188``` ruby
9189 super foo, bar
9190 ^^^^^^^^^^^^^^
9191```
9192
9193 If no arguments are provided (except for a block), it would be a `ForwardingSuperNode` instead.
9194
9195 Type: ::PM_SUPER_NODE
9196
9197 @extends pm_node_t
9198*/
9199#[repr(C)]
9200#[derive(Debug, Copy, Clone)]
9201pub struct pm_super_node {
9202    /** The embedded base node.
9203*/
9204    pub base: pm_node_t,
9205    /** SuperNode#keyword_loc
9206*/
9207    pub keyword_loc: pm_location_t,
9208    /** SuperNode#lparen_loc
9209*/
9210    pub lparen_loc: pm_location_t,
9211    /** SuperNode#arguments
9212
9213 Can be only `nil` when there are empty parentheses, like `super()`.
9214*/
9215    pub arguments: *mut pm_arguments_node,
9216    /** SuperNode#rparen_loc
9217*/
9218    pub rparen_loc: pm_location_t,
9219    /** SuperNode#block
9220*/
9221    pub block: *mut pm_node,
9222}
9223/** SymbolNode
9224
9225 Represents a symbol literal or a symbol contained within a `%i` list.
9226
9227``` ruby
9228 :foo
9229 ^^^^
9230```
9231
9232``` ruby
9233 %i[foo]
9234    ^^^
9235```
9236
9237 Type: ::PM_SYMBOL_NODE
9238
9239 Flags (#pm_symbol_flags):
9240 * ::PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING
9241 * ::PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING
9242 * ::PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING
9243
9244 @extends pm_node_t
9245*/
9246#[repr(C)]
9247#[derive(Debug, Copy, Clone)]
9248pub struct pm_symbol_node {
9249    /** The embedded base node.
9250*/
9251    pub base: pm_node_t,
9252    /** SymbolNode#opening_loc
9253*/
9254    pub opening_loc: pm_location_t,
9255    /** SymbolNode#content_loc
9256*/
9257    pub content_loc: pm_location_t,
9258    /** SymbolNode#closing_loc
9259*/
9260    pub closing_loc: pm_location_t,
9261    /** SymbolNode#unescaped
9262*/
9263    pub unescaped: pm_string_t,
9264}
9265/** TrueNode
9266
9267 Represents the use of the literal `true` keyword.
9268
9269``` ruby
9270 true
9271 ^^^^
9272```
9273
9274 Type: ::PM_TRUE_NODE
9275
9276 @extends pm_node_t
9277*/
9278#[repr(C)]
9279#[derive(Debug, Default, Copy, Clone)]
9280pub struct pm_true_node {
9281    /** The embedded base node.
9282*/
9283    pub base: pm_node_t,
9284}
9285/** UndefNode
9286
9287 Represents the use of the `undef` keyword.
9288
9289``` ruby
9290 undef :foo, :bar, :baz
9291 ^^^^^^^^^^^^^^^^^^^^^^
9292```
9293
9294 Type: ::PM_UNDEF_NODE
9295
9296 @extends pm_node_t
9297*/
9298#[repr(C)]
9299#[derive(Debug, Copy, Clone)]
9300pub struct pm_undef_node {
9301    /** The embedded base node.
9302*/
9303    pub base: pm_node_t,
9304    /** UndefNode#names
9305*/
9306    pub names: pm_node_list,
9307    /** UndefNode#keyword_loc
9308*/
9309    pub keyword_loc: pm_location_t,
9310}
9311/** UnlessNode
9312
9313 Represents the use of the `unless` keyword, either in the block form or the modifier form.
9314
9315``` ruby
9316 bar unless foo
9317 ^^^^^^^^^^^^^^
9318```
9319
9320``` ruby
9321 unless foo then bar end
9322 ^^^^^^^^^^^^^^^^^^^^^^^
9323```
9324
9325 Type: ::PM_UNLESS_NODE
9326
9327 @extends pm_node_t
9328*/
9329#[repr(C)]
9330#[derive(Debug, Copy, Clone)]
9331pub struct pm_unless_node {
9332    /** The embedded base node.
9333*/
9334    pub base: pm_node_t,
9335    /** UnlessNode#unless_keyword_loc
9336
9337 The Location of the `unless` keyword.
9338
9339``` ruby
9340 unless cond then bar end
9341 ^^^^^^
9342```
9343
9344``` ruby
9345 bar unless cond
9346     ^^^^^^
9347```
9348*/
9349    pub unless_keyword_loc: pm_location_t,
9350    /** UnlessNode#predicate
9351
9352 The condition to be evaluated for the unless expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression).
9353
9354``` ruby
9355 unless cond then bar end
9356        ^^^^
9357```
9358
9359``` ruby
9360 bar unless cond
9361            ^^^^
9362```
9363*/
9364    pub predicate: *mut pm_node,
9365    /** UnlessNode#then_keyword_loc
9366
9367 The Location of the `then` keyword, if present.
9368
9369``` ruby
9370 unless cond then bar end
9371             ^^^^
9372```
9373*/
9374    pub then_keyword_loc: pm_location_t,
9375    /** UnlessNode#statements
9376
9377 The body of statements that will executed if the unless condition is
9378 falsey. Will be `nil` if no body is provided.
9379
9380``` ruby
9381 unless cond then bar end
9382                  ^^^
9383```
9384*/
9385    pub statements: *mut pm_statements_node,
9386    /** UnlessNode#else_clause
9387
9388 The else clause of the unless expression, if present.
9389
9390``` ruby
9391 unless cond then bar else baz end
9392                      ^^^^^^^^^^^^
9393```
9394*/
9395    pub else_clause: *mut pm_else_node,
9396    /** UnlessNode#end_keyword_loc
9397
9398 The Location of the `end` keyword, if present.
9399
9400``` ruby
9401 unless cond then bar end
9402                      ^^^
9403```
9404*/
9405    pub end_keyword_loc: pm_location_t,
9406}
9407/** UntilNode
9408
9409 Represents the use of the `until` keyword, either in the block form or the modifier form.
9410
9411``` ruby
9412 bar until foo
9413 ^^^^^^^^^^^^^
9414```
9415
9416``` ruby
9417 until foo do bar end
9418 ^^^^^^^^^^^^^^^^^^^^
9419```
9420
9421 Type: ::PM_UNTIL_NODE
9422
9423 Flags (#pm_loop_flags):
9424 * ::PM_LOOP_FLAGS_BEGIN_MODIFIER
9425
9426 @extends pm_node_t
9427*/
9428#[repr(C)]
9429#[derive(Debug, Copy, Clone)]
9430pub struct pm_until_node {
9431    /** The embedded base node.
9432*/
9433    pub base: pm_node_t,
9434    /** UntilNode#until_keyword_loc
9435*/
9436    pub until_keyword_loc: pm_location_t,
9437    /** UntilNode#do_keyword_loc
9438*/
9439    pub do_keyword_loc: pm_location_t,
9440    /** UntilNode#end_keyword_loc
9441*/
9442    pub end_keyword_loc: pm_location_t,
9443    /** UntilNode#predicate
9444*/
9445    pub predicate: *mut pm_node,
9446    /** UntilNode#statements
9447*/
9448    pub statements: *mut pm_statements_node,
9449}
9450/** WhenNode
9451
9452 Represents the use of the `when` keyword within a case statement.
9453
9454``` ruby
9455 case true
9456 when true
9457 ^^^^^^^^^
9458 end
9459```
9460
9461 Type: ::PM_WHEN_NODE
9462
9463 @extends pm_node_t
9464*/
9465#[repr(C)]
9466#[derive(Debug, Copy, Clone)]
9467pub struct pm_when_node {
9468    /** The embedded base node.
9469*/
9470    pub base: pm_node_t,
9471    /** WhenNode#when_keyword_loc
9472*/
9473    pub when_keyword_loc: pm_location_t,
9474    /** WhenNode#conditions
9475*/
9476    pub conditions: pm_node_list,
9477    /** WhenNode#then_keyword_loc
9478*/
9479    pub then_keyword_loc: pm_location_t,
9480    /** WhenNode#statements
9481*/
9482    pub statements: *mut pm_statements_node,
9483}
9484/** WhileNode
9485
9486 Represents the use of the `while` keyword, either in the block form or the modifier form.
9487
9488``` ruby
9489 bar while foo
9490 ^^^^^^^^^^^^^
9491```
9492
9493``` ruby
9494 while foo do bar end
9495 ^^^^^^^^^^^^^^^^^^^^
9496```
9497
9498 Type: ::PM_WHILE_NODE
9499
9500 Flags (#pm_loop_flags):
9501 * ::PM_LOOP_FLAGS_BEGIN_MODIFIER
9502
9503 @extends pm_node_t
9504*/
9505#[repr(C)]
9506#[derive(Debug, Copy, Clone)]
9507pub struct pm_while_node {
9508    /** The embedded base node.
9509*/
9510    pub base: pm_node_t,
9511    /** WhileNode#while_keyword_loc
9512*/
9513    pub while_keyword_loc: pm_location_t,
9514    /** WhileNode#do_keyword_loc
9515*/
9516    pub do_keyword_loc: pm_location_t,
9517    /** WhileNode#end_keyword_loc
9518*/
9519    pub end_keyword_loc: pm_location_t,
9520    /** WhileNode#predicate
9521*/
9522    pub predicate: *mut pm_node,
9523    /** WhileNode#statements
9524*/
9525    pub statements: *mut pm_statements_node,
9526}
9527/** XStringNode
9528
9529 Represents an xstring literal with no interpolation.
9530
9531``` ruby
9532 `foo`
9533 ^^^^^
9534```
9535
9536 Type: ::PM_X_STRING_NODE
9537
9538 Flags (#pm_encoding_flags):
9539 * ::PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING
9540 * ::PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING
9541
9542 @extends pm_node_t
9543*/
9544#[repr(C)]
9545#[derive(Debug, Copy, Clone)]
9546pub struct pm_x_string_node {
9547    /** The embedded base node.
9548*/
9549    pub base: pm_node_t,
9550    /** XStringNode#opening_loc
9551*/
9552    pub opening_loc: pm_location_t,
9553    /** XStringNode#content_loc
9554*/
9555    pub content_loc: pm_location_t,
9556    /** XStringNode#closing_loc
9557*/
9558    pub closing_loc: pm_location_t,
9559    /** XStringNode#unescaped
9560*/
9561    pub unescaped: pm_string_t,
9562}
9563/** YieldNode
9564
9565 Represents the use of the `yield` keyword.
9566
9567``` ruby
9568 yield 1
9569 ^^^^^^^
9570```
9571
9572 Type: ::PM_YIELD_NODE
9573
9574 @extends pm_node_t
9575*/
9576#[repr(C)]
9577#[derive(Debug, Copy, Clone)]
9578pub struct pm_yield_node {
9579    /** The embedded base node.
9580*/
9581    pub base: pm_node_t,
9582    /** YieldNode#keyword_loc
9583*/
9584    pub keyword_loc: pm_location_t,
9585    /** YieldNode#lparen_loc
9586*/
9587    pub lparen_loc: pm_location_t,
9588    /** YieldNode#arguments
9589*/
9590    pub arguments: *mut pm_arguments_node,
9591    /** YieldNode#rparen_loc
9592*/
9593    pub rparen_loc: pm_location_t,
9594}
9595/** An opaque pointer to a diagnostic generated during parsing.
9596*/
9597#[repr(C)]
9598#[derive(Debug)]
9599pub struct pm_diagnostic_t {
9600    _unused: [u8; 0],
9601}
9602/** An opaque pointer to a comment found while parsing.
9603*/
9604#[repr(C)]
9605#[derive(Debug)]
9606pub struct pm_comment_t {
9607    _unused: [u8; 0],
9608}
9609/** A list of offsets of the start of lines in a string. The offsets are assumed
9610 to be sorted/inserted in ascending order.
9611*/
9612#[repr(C)]
9613#[derive(Debug, Copy, Clone)]
9614pub struct pm_line_offset_list_t {
9615    /** The number of offsets in the list.
9616*/
9617    pub size: usize,
9618    /** The capacity of the list that has been allocated.
9619*/
9620    pub capacity: usize,
9621    /** The list of offsets.
9622*/
9623    pub offsets: *mut u32,
9624}
9625/** A line and column in a string.
9626*/
9627#[repr(C)]
9628#[derive(Debug, Default, Copy, Clone)]
9629pub struct pm_line_column_t {
9630    /** The line number.
9631*/
9632    pub line: i32,
9633    /** The column in bytes.
9634*/
9635    pub column: u32,
9636}
9637/** An opaque pointer to a magic comment found while parsing.
9638*/
9639#[repr(C)]
9640#[derive(Debug)]
9641pub struct pm_magic_comment_t {
9642    _unused: [u8; 0],
9643}
9644/** A scope of locals surrounding the code that is being parsed.
9645*/
9646#[repr(C)]
9647#[derive(Debug)]
9648pub struct pm_options_scope_t {
9649    _unused: [u8; 0],
9650}
9651/** The options that can be passed to the parser.
9652*/
9653#[repr(C)]
9654#[derive(Debug)]
9655pub struct pm_options_t {
9656    _unused: [u8; 0],
9657}
9658/** The parser used to parse Ruby source.
9659*/
9660#[repr(C)]
9661#[derive(Debug)]
9662pub struct pm_parser_t {
9663    _unused: [u8; 0],
9664}
9665/** The default value for parameters.
9666*/
9667pub const PM_OPTIONS_SCOPE_FORWARDING_NONE: u8 = 0;
9668/** When the scope is forwarding with the * parameter.
9669*/
9670pub const PM_OPTIONS_SCOPE_FORWARDING_POSITIONALS: u8 = 1;
9671/** When the scope is forwarding with the ** parameter.
9672*/
9673pub const PM_OPTIONS_SCOPE_FORWARDING_KEYWORDS: u8 = 2;
9674/** When the scope is forwarding with the & parameter.
9675*/
9676pub const PM_OPTIONS_SCOPE_FORWARDING_BLOCK: u8 = 4;
9677/** When the scope is forwarding with the ... parameter.
9678*/
9679pub const PM_OPTIONS_SCOPE_FORWARDING_ALL: u8 = 8;
9680/** A bit representing whether or not the command line -a option was set. -a
9681 splits the input line $_ into $F.
9682*/
9683pub const PM_OPTIONS_COMMAND_LINE_A: u8 = 1;
9684/** A bit representing whether or not the command line -e option was set. -e
9685 allow the user to specify a script to be executed. This is necessary for
9686 prism to know because certain warnings are not generated when -e is used.
9687*/
9688pub const PM_OPTIONS_COMMAND_LINE_E: u8 = 2;
9689/** A bit representing whether or not the command line -l option was set. -l
9690 chomps the input line by default.
9691*/
9692pub const PM_OPTIONS_COMMAND_LINE_L: u8 = 4;
9693/** A bit representing whether or not the command line -n option was set. -n
9694 wraps the script in a while gets loop.
9695*/
9696pub const PM_OPTIONS_COMMAND_LINE_N: u8 = 8;
9697/** A bit representing whether or not the command line -p option was set. -p
9698 prints the value of $_ at the end of each loop.
9699*/
9700pub const PM_OPTIONS_COMMAND_LINE_P: u8 = 16;
9701/** A bit representing whether or not the command line -x option was set. -x
9702 searches the input file for a shebang that includes "ruby".
9703*/
9704pub const PM_OPTIONS_COMMAND_LINE_X: u8 = 32;
9705/** Returned if the encoding given to a slice query was invalid.
9706*/
9707pub const PM_STRING_QUERY_ERROR: pm_string_query_t = -1;
9708/** Returned if the result of the slice query is false.
9709*/
9710pub const PM_STRING_QUERY_FALSE: pm_string_query_t = 0;
9711/** Returned if the result of the slice query is true.
9712*/
9713pub const PM_STRING_QUERY_TRUE: pm_string_query_t = 1;
9714#[repr(u32)]
9715#[non_exhaustive]
9716/** This enum represents every type of node in the Ruby syntax tree.
9717*/
9718#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
9719pub enum pm_node_type {
9720    /** AliasGlobalVariableNode
9721*/
9722    PM_ALIAS_GLOBAL_VARIABLE_NODE = 1,
9723    /** AliasMethodNode
9724*/
9725    PM_ALIAS_METHOD_NODE = 2,
9726    /** AlternationPatternNode
9727*/
9728    PM_ALTERNATION_PATTERN_NODE = 3,
9729    /** AndNode
9730*/
9731    PM_AND_NODE = 4,
9732    /** ArgumentsNode
9733*/
9734    PM_ARGUMENTS_NODE = 5,
9735    /** ArrayNode
9736*/
9737    PM_ARRAY_NODE = 6,
9738    /** ArrayPatternNode
9739*/
9740    PM_ARRAY_PATTERN_NODE = 7,
9741    /** AssocNode
9742*/
9743    PM_ASSOC_NODE = 8,
9744    /** AssocSplatNode
9745*/
9746    PM_ASSOC_SPLAT_NODE = 9,
9747    /** BackReferenceReadNode
9748*/
9749    PM_BACK_REFERENCE_READ_NODE = 10,
9750    /** BeginNode
9751*/
9752    PM_BEGIN_NODE = 11,
9753    /** BlockArgumentNode
9754*/
9755    PM_BLOCK_ARGUMENT_NODE = 12,
9756    /** BlockLocalVariableNode
9757*/
9758    PM_BLOCK_LOCAL_VARIABLE_NODE = 13,
9759    /** BlockNode
9760*/
9761    PM_BLOCK_NODE = 14,
9762    /** BlockParameterNode
9763*/
9764    PM_BLOCK_PARAMETER_NODE = 15,
9765    /** BlockParametersNode
9766*/
9767    PM_BLOCK_PARAMETERS_NODE = 16,
9768    /** BreakNode
9769*/
9770    PM_BREAK_NODE = 17,
9771    /** CallAndWriteNode
9772*/
9773    PM_CALL_AND_WRITE_NODE = 18,
9774    /** CallNode
9775*/
9776    PM_CALL_NODE = 19,
9777    /** CallOperatorWriteNode
9778*/
9779    PM_CALL_OPERATOR_WRITE_NODE = 20,
9780    /** CallOrWriteNode
9781*/
9782    PM_CALL_OR_WRITE_NODE = 21,
9783    /** CallTargetNode
9784*/
9785    PM_CALL_TARGET_NODE = 22,
9786    /** CapturePatternNode
9787*/
9788    PM_CAPTURE_PATTERN_NODE = 23,
9789    /** CaseMatchNode
9790*/
9791    PM_CASE_MATCH_NODE = 24,
9792    /** CaseNode
9793*/
9794    PM_CASE_NODE = 25,
9795    /** ClassNode
9796*/
9797    PM_CLASS_NODE = 26,
9798    /** ClassVariableAndWriteNode
9799*/
9800    PM_CLASS_VARIABLE_AND_WRITE_NODE = 27,
9801    /** ClassVariableOperatorWriteNode
9802*/
9803    PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE = 28,
9804    /** ClassVariableOrWriteNode
9805*/
9806    PM_CLASS_VARIABLE_OR_WRITE_NODE = 29,
9807    /** ClassVariableReadNode
9808*/
9809    PM_CLASS_VARIABLE_READ_NODE = 30,
9810    /** ClassVariableTargetNode
9811*/
9812    PM_CLASS_VARIABLE_TARGET_NODE = 31,
9813    /** ClassVariableWriteNode
9814*/
9815    PM_CLASS_VARIABLE_WRITE_NODE = 32,
9816    /** ConstantAndWriteNode
9817*/
9818    PM_CONSTANT_AND_WRITE_NODE = 33,
9819    /** ConstantOperatorWriteNode
9820*/
9821    PM_CONSTANT_OPERATOR_WRITE_NODE = 34,
9822    /** ConstantOrWriteNode
9823*/
9824    PM_CONSTANT_OR_WRITE_NODE = 35,
9825    /** ConstantPathAndWriteNode
9826*/
9827    PM_CONSTANT_PATH_AND_WRITE_NODE = 36,
9828    /** ConstantPathNode
9829*/
9830    PM_CONSTANT_PATH_NODE = 37,
9831    /** ConstantPathOperatorWriteNode
9832*/
9833    PM_CONSTANT_PATH_OPERATOR_WRITE_NODE = 38,
9834    /** ConstantPathOrWriteNode
9835*/
9836    PM_CONSTANT_PATH_OR_WRITE_NODE = 39,
9837    /** ConstantPathTargetNode
9838*/
9839    PM_CONSTANT_PATH_TARGET_NODE = 40,
9840    /** ConstantPathWriteNode
9841*/
9842    PM_CONSTANT_PATH_WRITE_NODE = 41,
9843    /** ConstantReadNode
9844*/
9845    PM_CONSTANT_READ_NODE = 42,
9846    /** ConstantTargetNode
9847*/
9848    PM_CONSTANT_TARGET_NODE = 43,
9849    /** ConstantWriteNode
9850*/
9851    PM_CONSTANT_WRITE_NODE = 44,
9852    /** DefNode
9853*/
9854    PM_DEF_NODE = 45,
9855    /** DefinedNode
9856*/
9857    PM_DEFINED_NODE = 46,
9858    /** ElseNode
9859*/
9860    PM_ELSE_NODE = 47,
9861    /** EmbeddedStatementsNode
9862*/
9863    PM_EMBEDDED_STATEMENTS_NODE = 48,
9864    /** EmbeddedVariableNode
9865*/
9866    PM_EMBEDDED_VARIABLE_NODE = 49,
9867    /** EnsureNode
9868*/
9869    PM_ENSURE_NODE = 50,
9870    /** ErrorRecoveryNode
9871*/
9872    PM_ERROR_RECOVERY_NODE = 51,
9873    /** FalseNode
9874*/
9875    PM_FALSE_NODE = 52,
9876    /** FindPatternNode
9877*/
9878    PM_FIND_PATTERN_NODE = 53,
9879    /** FlipFlopNode
9880*/
9881    PM_FLIP_FLOP_NODE = 54,
9882    /** FloatNode
9883*/
9884    PM_FLOAT_NODE = 55,
9885    /** ForNode
9886*/
9887    PM_FOR_NODE = 56,
9888    /** ForwardingArgumentsNode
9889*/
9890    PM_FORWARDING_ARGUMENTS_NODE = 57,
9891    /** ForwardingParameterNode
9892*/
9893    PM_FORWARDING_PARAMETER_NODE = 58,
9894    /** ForwardingSuperNode
9895*/
9896    PM_FORWARDING_SUPER_NODE = 59,
9897    /** GlobalVariableAndWriteNode
9898*/
9899    PM_GLOBAL_VARIABLE_AND_WRITE_NODE = 60,
9900    /** GlobalVariableOperatorWriteNode
9901*/
9902    PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE = 61,
9903    /** GlobalVariableOrWriteNode
9904*/
9905    PM_GLOBAL_VARIABLE_OR_WRITE_NODE = 62,
9906    /** GlobalVariableReadNode
9907*/
9908    PM_GLOBAL_VARIABLE_READ_NODE = 63,
9909    /** GlobalVariableTargetNode
9910*/
9911    PM_GLOBAL_VARIABLE_TARGET_NODE = 64,
9912    /** GlobalVariableWriteNode
9913*/
9914    PM_GLOBAL_VARIABLE_WRITE_NODE = 65,
9915    /** HashNode
9916*/
9917    PM_HASH_NODE = 66,
9918    /** HashPatternNode
9919*/
9920    PM_HASH_PATTERN_NODE = 67,
9921    /** IfNode
9922*/
9923    PM_IF_NODE = 68,
9924    /** ImaginaryNode
9925*/
9926    PM_IMAGINARY_NODE = 69,
9927    /** ImplicitNode
9928*/
9929    PM_IMPLICIT_NODE = 70,
9930    /** ImplicitRestNode
9931*/
9932    PM_IMPLICIT_REST_NODE = 71,
9933    /** InNode
9934*/
9935    PM_IN_NODE = 72,
9936    /** IndexAndWriteNode
9937*/
9938    PM_INDEX_AND_WRITE_NODE = 73,
9939    /** IndexOperatorWriteNode
9940*/
9941    PM_INDEX_OPERATOR_WRITE_NODE = 74,
9942    /** IndexOrWriteNode
9943*/
9944    PM_INDEX_OR_WRITE_NODE = 75,
9945    /** IndexTargetNode
9946*/
9947    PM_INDEX_TARGET_NODE = 76,
9948    /** InstanceVariableAndWriteNode
9949*/
9950    PM_INSTANCE_VARIABLE_AND_WRITE_NODE = 77,
9951    /** InstanceVariableOperatorWriteNode
9952*/
9953    PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE = 78,
9954    /** InstanceVariableOrWriteNode
9955*/
9956    PM_INSTANCE_VARIABLE_OR_WRITE_NODE = 79,
9957    /** InstanceVariableReadNode
9958*/
9959    PM_INSTANCE_VARIABLE_READ_NODE = 80,
9960    /** InstanceVariableTargetNode
9961*/
9962    PM_INSTANCE_VARIABLE_TARGET_NODE = 81,
9963    /** InstanceVariableWriteNode
9964*/
9965    PM_INSTANCE_VARIABLE_WRITE_NODE = 82,
9966    /** IntegerNode
9967*/
9968    PM_INTEGER_NODE = 83,
9969    /** InterpolatedMatchLastLineNode
9970*/
9971    PM_INTERPOLATED_MATCH_LAST_LINE_NODE = 84,
9972    /** InterpolatedRegularExpressionNode
9973*/
9974    PM_INTERPOLATED_REGULAR_EXPRESSION_NODE = 85,
9975    /** InterpolatedStringNode
9976*/
9977    PM_INTERPOLATED_STRING_NODE = 86,
9978    /** InterpolatedSymbolNode
9979*/
9980    PM_INTERPOLATED_SYMBOL_NODE = 87,
9981    /** InterpolatedXStringNode
9982*/
9983    PM_INTERPOLATED_X_STRING_NODE = 88,
9984    /** ItLocalVariableReadNode
9985*/
9986    PM_IT_LOCAL_VARIABLE_READ_NODE = 89,
9987    /** ItParametersNode
9988*/
9989    PM_IT_PARAMETERS_NODE = 90,
9990    /** KeywordHashNode
9991*/
9992    PM_KEYWORD_HASH_NODE = 91,
9993    /** KeywordRestParameterNode
9994*/
9995    PM_KEYWORD_REST_PARAMETER_NODE = 92,
9996    /** LambdaNode
9997*/
9998    PM_LAMBDA_NODE = 93,
9999    /** LocalVariableAndWriteNode
10000*/
10001    PM_LOCAL_VARIABLE_AND_WRITE_NODE = 94,
10002    /** LocalVariableOperatorWriteNode
10003*/
10004    PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE = 95,
10005    /** LocalVariableOrWriteNode
10006*/
10007    PM_LOCAL_VARIABLE_OR_WRITE_NODE = 96,
10008    /** LocalVariableReadNode
10009*/
10010    PM_LOCAL_VARIABLE_READ_NODE = 97,
10011    /** LocalVariableTargetNode
10012*/
10013    PM_LOCAL_VARIABLE_TARGET_NODE = 98,
10014    /** LocalVariableWriteNode
10015*/
10016    PM_LOCAL_VARIABLE_WRITE_NODE = 99,
10017    /** MatchLastLineNode
10018*/
10019    PM_MATCH_LAST_LINE_NODE = 100,
10020    /** MatchPredicateNode
10021*/
10022    PM_MATCH_PREDICATE_NODE = 101,
10023    /** MatchRequiredNode
10024*/
10025    PM_MATCH_REQUIRED_NODE = 102,
10026    /** MatchWriteNode
10027*/
10028    PM_MATCH_WRITE_NODE = 103,
10029    /** ModuleNode
10030*/
10031    PM_MODULE_NODE = 104,
10032    /** MultiTargetNode
10033*/
10034    PM_MULTI_TARGET_NODE = 105,
10035    /** MultiWriteNode
10036*/
10037    PM_MULTI_WRITE_NODE = 106,
10038    /** NextNode
10039*/
10040    PM_NEXT_NODE = 107,
10041    /** NilNode
10042*/
10043    PM_NIL_NODE = 108,
10044    /** NoBlockParameterNode
10045*/
10046    PM_NO_BLOCK_PARAMETER_NODE = 109,
10047    /** NoKeywordsParameterNode
10048*/
10049    PM_NO_KEYWORDS_PARAMETER_NODE = 110,
10050    /** NumberedParametersNode
10051*/
10052    PM_NUMBERED_PARAMETERS_NODE = 111,
10053    /** NumberedReferenceReadNode
10054*/
10055    PM_NUMBERED_REFERENCE_READ_NODE = 112,
10056    /** OptionalKeywordParameterNode
10057*/
10058    PM_OPTIONAL_KEYWORD_PARAMETER_NODE = 113,
10059    /** OptionalParameterNode
10060*/
10061    PM_OPTIONAL_PARAMETER_NODE = 114,
10062    /** OrNode
10063*/
10064    PM_OR_NODE = 115,
10065    /** ParametersNode
10066*/
10067    PM_PARAMETERS_NODE = 116,
10068    /** ParenthesesNode
10069*/
10070    PM_PARENTHESES_NODE = 117,
10071    /** PinnedExpressionNode
10072*/
10073    PM_PINNED_EXPRESSION_NODE = 118,
10074    /** PinnedVariableNode
10075*/
10076    PM_PINNED_VARIABLE_NODE = 119,
10077    /** PostExecutionNode
10078*/
10079    PM_POST_EXECUTION_NODE = 120,
10080    /** PreExecutionNode
10081*/
10082    PM_PRE_EXECUTION_NODE = 121,
10083    /** ProgramNode
10084*/
10085    PM_PROGRAM_NODE = 122,
10086    /** RangeNode
10087*/
10088    PM_RANGE_NODE = 123,
10089    /** RationalNode
10090*/
10091    PM_RATIONAL_NODE = 124,
10092    /** RedoNode
10093*/
10094    PM_REDO_NODE = 125,
10095    /** RegularExpressionNode
10096*/
10097    PM_REGULAR_EXPRESSION_NODE = 126,
10098    /** RequiredKeywordParameterNode
10099*/
10100    PM_REQUIRED_KEYWORD_PARAMETER_NODE = 127,
10101    /** RequiredParameterNode
10102*/
10103    PM_REQUIRED_PARAMETER_NODE = 128,
10104    /** RescueModifierNode
10105*/
10106    PM_RESCUE_MODIFIER_NODE = 129,
10107    /** RescueNode
10108*/
10109    PM_RESCUE_NODE = 130,
10110    /** RestParameterNode
10111*/
10112    PM_REST_PARAMETER_NODE = 131,
10113    /** RetryNode
10114*/
10115    PM_RETRY_NODE = 132,
10116    /** ReturnNode
10117*/
10118    PM_RETURN_NODE = 133,
10119    /** SelfNode
10120*/
10121    PM_SELF_NODE = 134,
10122    /** ShareableConstantNode
10123*/
10124    PM_SHAREABLE_CONSTANT_NODE = 135,
10125    /** SingletonClassNode
10126*/
10127    PM_SINGLETON_CLASS_NODE = 136,
10128    /** SourceEncodingNode
10129*/
10130    PM_SOURCE_ENCODING_NODE = 137,
10131    /** SourceFileNode
10132*/
10133    PM_SOURCE_FILE_NODE = 138,
10134    /** SourceLineNode
10135*/
10136    PM_SOURCE_LINE_NODE = 139,
10137    /** SplatNode
10138*/
10139    PM_SPLAT_NODE = 140,
10140    /** StatementsNode
10141*/
10142    PM_STATEMENTS_NODE = 141,
10143    /** StringNode
10144*/
10145    PM_STRING_NODE = 142,
10146    /** SuperNode
10147*/
10148    PM_SUPER_NODE = 143,
10149    /** SymbolNode
10150*/
10151    PM_SYMBOL_NODE = 144,
10152    /** TrueNode
10153*/
10154    PM_TRUE_NODE = 145,
10155    /** UndefNode
10156*/
10157    PM_UNDEF_NODE = 146,
10158    /** UnlessNode
10159*/
10160    PM_UNLESS_NODE = 147,
10161    /** UntilNode
10162*/
10163    PM_UNTIL_NODE = 148,
10164    /** WhenNode
10165*/
10166    PM_WHEN_NODE = 149,
10167    /** WhileNode
10168*/
10169    PM_WHILE_NODE = 150,
10170    /** XStringNode
10171*/
10172    PM_X_STRING_NODE = 151,
10173    /** YieldNode
10174*/
10175    PM_YIELD_NODE = 152,
10176    /** A special kind of node used for compilation.
10177*/
10178    PM_SCOPE_NODE = 153,
10179}
10180#[repr(u32)]
10181#[non_exhaustive]
10182/** Flags for arguments nodes.
10183*/
10184#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10185pub enum pm_arguments_node_flags {
10186    /** if the arguments contain forwarding
10187*/
10188    PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING = 4,
10189    /** if the arguments contain keywords
10190*/
10191    PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS = 8,
10192    /** if the arguments contain a keyword splat
10193*/
10194    PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT = 16,
10195    /** if the arguments contain a splat
10196*/
10197    PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT = 32,
10198    /** if the arguments contain multiple splats
10199*/
10200    PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS = 64,
10201    /** if the arguments contain multiple splats
10202*/
10203    PM_ARGUMENTS_NODE_FLAGS_LAST = 65,
10204}
10205#[repr(u32)]
10206#[non_exhaustive]
10207/** Flags for array nodes.
10208*/
10209#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10210pub enum pm_array_node_flags {
10211    /** if array contains splat nodes
10212*/
10213    PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT = 4,
10214    /** if array contains splat nodes
10215*/
10216    PM_ARRAY_NODE_FLAGS_LAST = 5,
10217}
10218#[repr(u32)]
10219#[non_exhaustive]
10220/** Flags for call nodes.
10221*/
10222#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10223pub enum pm_call_node_flags {
10224    /** &. operator
10225*/
10226    PM_CALL_NODE_FLAGS_SAFE_NAVIGATION = 4,
10227    /** a call that could have been a local variable
10228*/
10229    PM_CALL_NODE_FLAGS_VARIABLE_CALL = 8,
10230    /** a call that is an attribute write, so the value being written should be returned
10231*/
10232    PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE = 16,
10233    /** a call that ignores method visibility
10234*/
10235    PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY = 32,
10236    /** a call that ignores method visibility
10237*/
10238    PM_CALL_NODE_FLAGS_LAST = 33,
10239}
10240#[repr(u32)]
10241#[non_exhaustive]
10242/** Flags for nodes that have unescaped content.
10243*/
10244#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10245pub enum pm_encoding_flags {
10246    /** internal bytes forced the encoding to UTF-8
10247*/
10248    PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING = 4,
10249    /** internal bytes forced the encoding to binary
10250*/
10251    PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING = 8,
10252    /** internal bytes forced the encoding to binary
10253*/
10254    PM_ENCODING_FLAGS_LAST = 9,
10255}
10256#[repr(u32)]
10257#[non_exhaustive]
10258/** Flags for integer nodes that correspond to the base of the integer.
10259*/
10260#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10261pub enum pm_integer_base_flags {
10262    /** 0b prefix
10263*/
10264    PM_INTEGER_BASE_FLAGS_BINARY = 4,
10265    /** 0d or no prefix
10266*/
10267    PM_INTEGER_BASE_FLAGS_DECIMAL = 8,
10268    /** 0o or 0 prefix
10269*/
10270    PM_INTEGER_BASE_FLAGS_OCTAL = 16,
10271    /** 0x prefix
10272*/
10273    PM_INTEGER_BASE_FLAGS_HEXADECIMAL = 32,
10274    /** 0x prefix
10275*/
10276    PM_INTEGER_BASE_FLAGS_LAST = 33,
10277}
10278#[repr(u32)]
10279#[non_exhaustive]
10280/** Flags for interpolated string nodes that indicated mutability if they are also marked as literals.
10281*/
10282#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10283pub enum pm_interpolated_string_node_flags {
10284    /** frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`
10285*/
10286    PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN = 4,
10287    /** mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`
10288*/
10289    PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE = 8,
10290    /** mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`; only for adjacent string literals like `'a' 'b'`
10291*/
10292    PM_INTERPOLATED_STRING_NODE_FLAGS_LAST = 9,
10293}
10294#[repr(u32)]
10295#[non_exhaustive]
10296/** Flags for keyword hash nodes.
10297*/
10298#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10299pub enum pm_keyword_hash_node_flags {
10300    /** a keyword hash which only has `AssocNode` elements all with symbol keys, which means the elements can be treated as keyword arguments
10301*/
10302    PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS = 4,
10303    /** a keyword hash which only has `AssocNode` elements all with symbol keys, which means the elements can be treated as keyword arguments
10304*/
10305    PM_KEYWORD_HASH_NODE_FLAGS_LAST = 5,
10306}
10307#[repr(u32)]
10308#[non_exhaustive]
10309/** Flags for while and until loop nodes.
10310*/
10311#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10312pub enum pm_loop_flags {
10313    /** a loop after a begin statement, so the body is executed first before the condition
10314*/
10315    PM_LOOP_FLAGS_BEGIN_MODIFIER = 4,
10316    /** a loop after a begin statement, so the body is executed first before the condition
10317*/
10318    PM_LOOP_FLAGS_LAST = 5,
10319}
10320#[repr(u32)]
10321#[non_exhaustive]
10322/** Flags for parameter nodes.
10323*/
10324#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10325pub enum pm_parameter_flags {
10326    /** a parameter name that has been repeated in the method signature
10327*/
10328    PM_PARAMETER_FLAGS_REPEATED_PARAMETER = 4,
10329    /** a parameter name that has been repeated in the method signature
10330*/
10331    PM_PARAMETER_FLAGS_LAST = 5,
10332}
10333#[repr(u32)]
10334#[non_exhaustive]
10335/** Flags for parentheses nodes.
10336*/
10337#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10338pub enum pm_parentheses_node_flags {
10339    /** parentheses that contain multiple potentially void statements
10340*/
10341    PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS = 4,
10342    /** parentheses that contain multiple potentially void statements
10343*/
10344    PM_PARENTHESES_NODE_FLAGS_LAST = 5,
10345}
10346#[repr(u32)]
10347#[non_exhaustive]
10348/** Flags for range and flip-flop nodes.
10349*/
10350#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10351pub enum pm_range_flags {
10352    /** ... operator
10353*/
10354    PM_RANGE_FLAGS_EXCLUDE_END = 4,
10355    /** ... operator
10356*/
10357    PM_RANGE_FLAGS_LAST = 5,
10358}
10359#[repr(u32)]
10360#[non_exhaustive]
10361/** Flags for regular expression and match last line nodes.
10362*/
10363#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10364pub enum pm_regular_expression_flags {
10365    /** i - ignores the case of characters when matching
10366*/
10367    PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE = 4,
10368    /** x - ignores whitespace and allows comments in regular expressions
10369*/
10370    PM_REGULAR_EXPRESSION_FLAGS_EXTENDED = 8,
10371    /** m - allows $ to match the end of lines within strings
10372*/
10373    PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE = 16,
10374    /** o - only interpolates values into the regular expression once
10375*/
10376    PM_REGULAR_EXPRESSION_FLAGS_ONCE = 32,
10377    /** e - forces the EUC-JP encoding
10378*/
10379    PM_REGULAR_EXPRESSION_FLAGS_EUC_JP = 64,
10380    /** n - forces the ASCII-8BIT encoding
10381*/
10382    PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT = 128,
10383    /** s - forces the Windows-31J encoding
10384*/
10385    PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J = 256,
10386    /** u - forces the UTF-8 encoding
10387*/
10388    PM_REGULAR_EXPRESSION_FLAGS_UTF_8 = 512,
10389    /** internal bytes forced the encoding to UTF-8
10390*/
10391    PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING = 1024,
10392    /** internal bytes forced the encoding to binary
10393*/
10394    PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING = 2048,
10395    /** internal bytes forced the encoding to US-ASCII
10396*/
10397    PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING = 4096,
10398    /** internal bytes forced the encoding to US-ASCII
10399*/
10400    PM_REGULAR_EXPRESSION_FLAGS_LAST = 4097,
10401}
10402#[repr(u32)]
10403#[non_exhaustive]
10404/** Flags for shareable constant nodes.
10405*/
10406#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10407pub enum pm_shareable_constant_node_flags {
10408    /** constant writes that should be modified with shareable constant value literal
10409*/
10410    PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL = 4,
10411    /** constant writes that should be modified with shareable constant value experimental everything
10412*/
10413    PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING = 8,
10414    /** constant writes that should be modified with shareable constant value experimental copy
10415*/
10416    PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY = 16,
10417    /** constant writes that should be modified with shareable constant value experimental copy
10418*/
10419    PM_SHAREABLE_CONSTANT_NODE_FLAGS_LAST = 17,
10420}
10421#[repr(u32)]
10422#[non_exhaustive]
10423/** Flags for string nodes.
10424*/
10425#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10426pub enum pm_string_flags {
10427    /** internal bytes forced the encoding to UTF-8
10428*/
10429    PM_STRING_FLAGS_FORCED_UTF8_ENCODING = 4,
10430    /** internal bytes forced the encoding to binary
10431*/
10432    PM_STRING_FLAGS_FORCED_BINARY_ENCODING = 8,
10433    /** frozen by virtue of a `frozen_string_literal: true` comment or `--enable-frozen-string-literal`
10434*/
10435    PM_STRING_FLAGS_FROZEN = 16,
10436    /** mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`
10437*/
10438    PM_STRING_FLAGS_MUTABLE = 32,
10439    /** mutable by virtue of a `frozen_string_literal: false` comment or `--disable-frozen-string-literal`
10440*/
10441    PM_STRING_FLAGS_LAST = 33,
10442}
10443#[repr(u32)]
10444#[non_exhaustive]
10445/** Flags for symbol nodes.
10446*/
10447#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10448pub enum pm_symbol_flags {
10449    /** internal bytes forced the encoding to UTF-8
10450*/
10451    PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING = 4,
10452    /** internal bytes forced the encoding to binary
10453*/
10454    PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING = 8,
10455    /** internal bytes forced the encoding to US-ASCII
10456*/
10457    PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING = 16,
10458    /** internal bytes forced the encoding to US-ASCII
10459*/
10460    PM_SYMBOL_FLAGS_LAST = 17,
10461}
10462#[repr(u32)]
10463#[non_exhaustive]
10464/** The levels of errors generated during parsing.
10465*/
10466#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10467pub enum pm_error_level_t {
10468    /** For errors that should raise a syntax error.
10469*/
10470    PM_ERROR_LEVEL_SYNTAX = 0,
10471    /** For errors that should raise an argument error.
10472*/
10473    PM_ERROR_LEVEL_ARGUMENT = 1,
10474    /** For errors that should raise a load error.
10475*/
10476    PM_ERROR_LEVEL_LOAD = 2,
10477}
10478#[repr(u32)]
10479#[non_exhaustive]
10480/** The levels of warnings generated during parsing.
10481*/
10482#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10483pub enum pm_warning_level_t {
10484    /** For warnings which should be emitted if $VERBOSE != nil.
10485*/
10486    PM_WARNING_LEVEL_DEFAULT = 0,
10487    /** For warnings which should be emitted if $VERBOSE == true.
10488*/
10489    PM_WARNING_LEVEL_VERBOSE = 1,
10490}
10491#[repr(u32)]
10492#[non_exhaustive]
10493/** This is the type of a comment that we've found while parsing.
10494*/
10495#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
10496pub enum pm_comment_type_t {
10497    PM_COMMENT_INLINE = 0,
10498    PM_COMMENT_EMBDOC = 1,
10499}
10500impl Default for pm_constant_id_list_t {
10501    fn default() -> Self {
10502        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10503        unsafe {
10504            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10505            s.assume_init()
10506        }
10507    }
10508}
10509impl Default for pm_integer_t {
10510    fn default() -> Self {
10511        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10512        unsafe {
10513            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10514            s.assume_init()
10515        }
10516    }
10517}
10518impl Default for pm_string_t {
10519    fn default() -> Self {
10520        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10521        unsafe {
10522            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10523            s.assume_init()
10524        }
10525    }
10526}
10527impl Default for pm_node_list {
10528    fn default() -> Self {
10529        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10530        unsafe {
10531            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10532            s.assume_init()
10533        }
10534    }
10535}
10536impl Default for pm_alias_global_variable_node {
10537    fn default() -> Self {
10538        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10539        unsafe {
10540            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10541            s.assume_init()
10542        }
10543    }
10544}
10545impl Default for pm_alias_method_node {
10546    fn default() -> Self {
10547        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10548        unsafe {
10549            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10550            s.assume_init()
10551        }
10552    }
10553}
10554impl Default for pm_alternation_pattern_node {
10555    fn default() -> Self {
10556        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10557        unsafe {
10558            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10559            s.assume_init()
10560        }
10561    }
10562}
10563impl Default for pm_and_node {
10564    fn default() -> Self {
10565        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10566        unsafe {
10567            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10568            s.assume_init()
10569        }
10570    }
10571}
10572impl Default for pm_arguments_node {
10573    fn default() -> Self {
10574        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10575        unsafe {
10576            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10577            s.assume_init()
10578        }
10579    }
10580}
10581impl Default for pm_array_node {
10582    fn default() -> Self {
10583        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10584        unsafe {
10585            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10586            s.assume_init()
10587        }
10588    }
10589}
10590impl Default for pm_array_pattern_node {
10591    fn default() -> Self {
10592        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10593        unsafe {
10594            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10595            s.assume_init()
10596        }
10597    }
10598}
10599impl Default for pm_assoc_node {
10600    fn default() -> Self {
10601        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10602        unsafe {
10603            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10604            s.assume_init()
10605        }
10606    }
10607}
10608impl Default for pm_assoc_splat_node {
10609    fn default() -> Self {
10610        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10611        unsafe {
10612            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10613            s.assume_init()
10614        }
10615    }
10616}
10617impl Default for pm_begin_node {
10618    fn default() -> Self {
10619        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10620        unsafe {
10621            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10622            s.assume_init()
10623        }
10624    }
10625}
10626impl Default for pm_block_argument_node {
10627    fn default() -> Self {
10628        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10629        unsafe {
10630            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10631            s.assume_init()
10632        }
10633    }
10634}
10635impl Default for pm_block_node {
10636    fn default() -> Self {
10637        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10638        unsafe {
10639            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10640            s.assume_init()
10641        }
10642    }
10643}
10644impl Default for pm_block_parameters_node {
10645    fn default() -> Self {
10646        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10647        unsafe {
10648            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10649            s.assume_init()
10650        }
10651    }
10652}
10653impl Default for pm_break_node {
10654    fn default() -> Self {
10655        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10656        unsafe {
10657            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10658            s.assume_init()
10659        }
10660    }
10661}
10662impl Default for pm_call_and_write_node {
10663    fn default() -> Self {
10664        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10665        unsafe {
10666            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10667            s.assume_init()
10668        }
10669    }
10670}
10671impl Default for pm_call_node {
10672    fn default() -> Self {
10673        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10674        unsafe {
10675            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10676            s.assume_init()
10677        }
10678    }
10679}
10680impl Default for pm_call_operator_write_node {
10681    fn default() -> Self {
10682        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10683        unsafe {
10684            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10685            s.assume_init()
10686        }
10687    }
10688}
10689impl Default for pm_call_or_write_node {
10690    fn default() -> Self {
10691        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10692        unsafe {
10693            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10694            s.assume_init()
10695        }
10696    }
10697}
10698impl Default for pm_call_target_node {
10699    fn default() -> Self {
10700        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10701        unsafe {
10702            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10703            s.assume_init()
10704        }
10705    }
10706}
10707impl Default for pm_capture_pattern_node {
10708    fn default() -> Self {
10709        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10710        unsafe {
10711            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10712            s.assume_init()
10713        }
10714    }
10715}
10716impl Default for pm_case_match_node {
10717    fn default() -> Self {
10718        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10719        unsafe {
10720            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10721            s.assume_init()
10722        }
10723    }
10724}
10725impl Default for pm_case_node {
10726    fn default() -> Self {
10727        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10728        unsafe {
10729            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10730            s.assume_init()
10731        }
10732    }
10733}
10734impl Default for pm_class_node {
10735    fn default() -> Self {
10736        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10737        unsafe {
10738            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10739            s.assume_init()
10740        }
10741    }
10742}
10743impl Default for pm_class_variable_and_write_node {
10744    fn default() -> Self {
10745        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10746        unsafe {
10747            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10748            s.assume_init()
10749        }
10750    }
10751}
10752impl Default for pm_class_variable_operator_write_node {
10753    fn default() -> Self {
10754        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10755        unsafe {
10756            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10757            s.assume_init()
10758        }
10759    }
10760}
10761impl Default for pm_class_variable_or_write_node {
10762    fn default() -> Self {
10763        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10764        unsafe {
10765            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10766            s.assume_init()
10767        }
10768    }
10769}
10770impl Default for pm_class_variable_write_node {
10771    fn default() -> Self {
10772        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10773        unsafe {
10774            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10775            s.assume_init()
10776        }
10777    }
10778}
10779impl Default for pm_constant_and_write_node {
10780    fn default() -> Self {
10781        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10782        unsafe {
10783            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10784            s.assume_init()
10785        }
10786    }
10787}
10788impl Default for pm_constant_operator_write_node {
10789    fn default() -> Self {
10790        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10791        unsafe {
10792            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10793            s.assume_init()
10794        }
10795    }
10796}
10797impl Default for pm_constant_or_write_node {
10798    fn default() -> Self {
10799        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10800        unsafe {
10801            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10802            s.assume_init()
10803        }
10804    }
10805}
10806impl Default for pm_constant_path_and_write_node {
10807    fn default() -> Self {
10808        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10809        unsafe {
10810            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10811            s.assume_init()
10812        }
10813    }
10814}
10815impl Default for pm_constant_path_node {
10816    fn default() -> Self {
10817        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10818        unsafe {
10819            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10820            s.assume_init()
10821        }
10822    }
10823}
10824impl Default for pm_constant_path_operator_write_node {
10825    fn default() -> Self {
10826        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10827        unsafe {
10828            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10829            s.assume_init()
10830        }
10831    }
10832}
10833impl Default for pm_constant_path_or_write_node {
10834    fn default() -> Self {
10835        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10836        unsafe {
10837            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10838            s.assume_init()
10839        }
10840    }
10841}
10842impl Default for pm_constant_path_target_node {
10843    fn default() -> Self {
10844        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10845        unsafe {
10846            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10847            s.assume_init()
10848        }
10849    }
10850}
10851impl Default for pm_constant_path_write_node {
10852    fn default() -> Self {
10853        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10854        unsafe {
10855            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10856            s.assume_init()
10857        }
10858    }
10859}
10860impl Default for pm_constant_write_node {
10861    fn default() -> Self {
10862        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10863        unsafe {
10864            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10865            s.assume_init()
10866        }
10867    }
10868}
10869impl Default for pm_def_node {
10870    fn default() -> Self {
10871        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10872        unsafe {
10873            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10874            s.assume_init()
10875        }
10876    }
10877}
10878impl Default for pm_defined_node {
10879    fn default() -> Self {
10880        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10881        unsafe {
10882            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10883            s.assume_init()
10884        }
10885    }
10886}
10887impl Default for pm_else_node {
10888    fn default() -> Self {
10889        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10890        unsafe {
10891            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10892            s.assume_init()
10893        }
10894    }
10895}
10896impl Default for pm_embedded_statements_node {
10897    fn default() -> Self {
10898        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10899        unsafe {
10900            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10901            s.assume_init()
10902        }
10903    }
10904}
10905impl Default for pm_embedded_variable_node {
10906    fn default() -> Self {
10907        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10908        unsafe {
10909            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10910            s.assume_init()
10911        }
10912    }
10913}
10914impl Default for pm_ensure_node {
10915    fn default() -> Self {
10916        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10917        unsafe {
10918            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10919            s.assume_init()
10920        }
10921    }
10922}
10923impl Default for pm_error_recovery_node {
10924    fn default() -> Self {
10925        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10926        unsafe {
10927            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10928            s.assume_init()
10929        }
10930    }
10931}
10932impl Default for pm_find_pattern_node {
10933    fn default() -> Self {
10934        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10935        unsafe {
10936            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10937            s.assume_init()
10938        }
10939    }
10940}
10941impl Default for pm_flip_flop_node {
10942    fn default() -> Self {
10943        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10944        unsafe {
10945            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10946            s.assume_init()
10947        }
10948    }
10949}
10950impl Default for pm_for_node {
10951    fn default() -> Self {
10952        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10953        unsafe {
10954            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10955            s.assume_init()
10956        }
10957    }
10958}
10959impl Default for pm_forwarding_super_node {
10960    fn default() -> Self {
10961        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10962        unsafe {
10963            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10964            s.assume_init()
10965        }
10966    }
10967}
10968impl Default for pm_global_variable_and_write_node {
10969    fn default() -> Self {
10970        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10971        unsafe {
10972            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10973            s.assume_init()
10974        }
10975    }
10976}
10977impl Default for pm_global_variable_operator_write_node {
10978    fn default() -> Self {
10979        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10980        unsafe {
10981            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10982            s.assume_init()
10983        }
10984    }
10985}
10986impl Default for pm_global_variable_or_write_node {
10987    fn default() -> Self {
10988        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10989        unsafe {
10990            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
10991            s.assume_init()
10992        }
10993    }
10994}
10995impl Default for pm_global_variable_write_node {
10996    fn default() -> Self {
10997        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
10998        unsafe {
10999            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11000            s.assume_init()
11001        }
11002    }
11003}
11004impl Default for pm_hash_node {
11005    fn default() -> Self {
11006        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11007        unsafe {
11008            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11009            s.assume_init()
11010        }
11011    }
11012}
11013impl Default for pm_hash_pattern_node {
11014    fn default() -> Self {
11015        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11016        unsafe {
11017            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11018            s.assume_init()
11019        }
11020    }
11021}
11022impl Default for pm_if_node {
11023    fn default() -> Self {
11024        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11025        unsafe {
11026            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11027            s.assume_init()
11028        }
11029    }
11030}
11031impl Default for pm_imaginary_node {
11032    fn default() -> Self {
11033        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11034        unsafe {
11035            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11036            s.assume_init()
11037        }
11038    }
11039}
11040impl Default for pm_implicit_node {
11041    fn default() -> Self {
11042        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11043        unsafe {
11044            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11045            s.assume_init()
11046        }
11047    }
11048}
11049impl Default for pm_in_node {
11050    fn default() -> Self {
11051        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11052        unsafe {
11053            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11054            s.assume_init()
11055        }
11056    }
11057}
11058impl Default for pm_index_and_write_node {
11059    fn default() -> Self {
11060        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11061        unsafe {
11062            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11063            s.assume_init()
11064        }
11065    }
11066}
11067impl Default for pm_index_operator_write_node {
11068    fn default() -> Self {
11069        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11070        unsafe {
11071            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11072            s.assume_init()
11073        }
11074    }
11075}
11076impl Default for pm_index_or_write_node {
11077    fn default() -> Self {
11078        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11079        unsafe {
11080            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11081            s.assume_init()
11082        }
11083    }
11084}
11085impl Default for pm_index_target_node {
11086    fn default() -> Self {
11087        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11088        unsafe {
11089            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11090            s.assume_init()
11091        }
11092    }
11093}
11094impl Default for pm_instance_variable_and_write_node {
11095    fn default() -> Self {
11096        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11097        unsafe {
11098            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11099            s.assume_init()
11100        }
11101    }
11102}
11103impl Default for pm_instance_variable_operator_write_node {
11104    fn default() -> Self {
11105        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11106        unsafe {
11107            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11108            s.assume_init()
11109        }
11110    }
11111}
11112impl Default for pm_instance_variable_or_write_node {
11113    fn default() -> Self {
11114        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11115        unsafe {
11116            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11117            s.assume_init()
11118        }
11119    }
11120}
11121impl Default for pm_instance_variable_write_node {
11122    fn default() -> Self {
11123        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11124        unsafe {
11125            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11126            s.assume_init()
11127        }
11128    }
11129}
11130impl Default for pm_integer_node {
11131    fn default() -> Self {
11132        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11133        unsafe {
11134            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11135            s.assume_init()
11136        }
11137    }
11138}
11139impl Default for pm_interpolated_match_last_line_node {
11140    fn default() -> Self {
11141        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11142        unsafe {
11143            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11144            s.assume_init()
11145        }
11146    }
11147}
11148impl Default for pm_interpolated_regular_expression_node {
11149    fn default() -> Self {
11150        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11151        unsafe {
11152            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11153            s.assume_init()
11154        }
11155    }
11156}
11157impl Default for pm_interpolated_string_node {
11158    fn default() -> Self {
11159        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11160        unsafe {
11161            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11162            s.assume_init()
11163        }
11164    }
11165}
11166impl Default for pm_interpolated_symbol_node {
11167    fn default() -> Self {
11168        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11169        unsafe {
11170            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11171            s.assume_init()
11172        }
11173    }
11174}
11175impl Default for pm_interpolated_x_string_node {
11176    fn default() -> Self {
11177        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11178        unsafe {
11179            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11180            s.assume_init()
11181        }
11182    }
11183}
11184impl Default for pm_keyword_hash_node {
11185    fn default() -> Self {
11186        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11187        unsafe {
11188            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11189            s.assume_init()
11190        }
11191    }
11192}
11193impl Default for pm_lambda_node {
11194    fn default() -> Self {
11195        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11196        unsafe {
11197            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11198            s.assume_init()
11199        }
11200    }
11201}
11202impl Default for pm_local_variable_and_write_node {
11203    fn default() -> Self {
11204        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11205        unsafe {
11206            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11207            s.assume_init()
11208        }
11209    }
11210}
11211impl Default for pm_local_variable_operator_write_node {
11212    fn default() -> Self {
11213        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11214        unsafe {
11215            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11216            s.assume_init()
11217        }
11218    }
11219}
11220impl Default for pm_local_variable_or_write_node {
11221    fn default() -> Self {
11222        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11223        unsafe {
11224            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11225            s.assume_init()
11226        }
11227    }
11228}
11229impl Default for pm_local_variable_write_node {
11230    fn default() -> Self {
11231        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11232        unsafe {
11233            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11234            s.assume_init()
11235        }
11236    }
11237}
11238impl Default for pm_match_last_line_node {
11239    fn default() -> Self {
11240        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11241        unsafe {
11242            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11243            s.assume_init()
11244        }
11245    }
11246}
11247impl Default for pm_match_predicate_node {
11248    fn default() -> Self {
11249        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11250        unsafe {
11251            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11252            s.assume_init()
11253        }
11254    }
11255}
11256impl Default for pm_match_required_node {
11257    fn default() -> Self {
11258        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11259        unsafe {
11260            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11261            s.assume_init()
11262        }
11263    }
11264}
11265impl Default for pm_match_write_node {
11266    fn default() -> Self {
11267        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11268        unsafe {
11269            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11270            s.assume_init()
11271        }
11272    }
11273}
11274impl Default for pm_module_node {
11275    fn default() -> Self {
11276        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11277        unsafe {
11278            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11279            s.assume_init()
11280        }
11281    }
11282}
11283impl Default for pm_multi_target_node {
11284    fn default() -> Self {
11285        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11286        unsafe {
11287            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11288            s.assume_init()
11289        }
11290    }
11291}
11292impl Default for pm_multi_write_node {
11293    fn default() -> Self {
11294        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11295        unsafe {
11296            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11297            s.assume_init()
11298        }
11299    }
11300}
11301impl Default for pm_next_node {
11302    fn default() -> Self {
11303        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11304        unsafe {
11305            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11306            s.assume_init()
11307        }
11308    }
11309}
11310impl Default for pm_optional_keyword_parameter_node {
11311    fn default() -> Self {
11312        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11313        unsafe {
11314            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11315            s.assume_init()
11316        }
11317    }
11318}
11319impl Default for pm_optional_parameter_node {
11320    fn default() -> Self {
11321        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11322        unsafe {
11323            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11324            s.assume_init()
11325        }
11326    }
11327}
11328impl Default for pm_or_node {
11329    fn default() -> Self {
11330        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11331        unsafe {
11332            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11333            s.assume_init()
11334        }
11335    }
11336}
11337impl Default for pm_parameters_node {
11338    fn default() -> Self {
11339        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11340        unsafe {
11341            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11342            s.assume_init()
11343        }
11344    }
11345}
11346impl Default for pm_parentheses_node {
11347    fn default() -> Self {
11348        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11349        unsafe {
11350            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11351            s.assume_init()
11352        }
11353    }
11354}
11355impl Default for pm_pinned_expression_node {
11356    fn default() -> Self {
11357        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11358        unsafe {
11359            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11360            s.assume_init()
11361        }
11362    }
11363}
11364impl Default for pm_pinned_variable_node {
11365    fn default() -> Self {
11366        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11367        unsafe {
11368            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11369            s.assume_init()
11370        }
11371    }
11372}
11373impl Default for pm_post_execution_node {
11374    fn default() -> Self {
11375        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11376        unsafe {
11377            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11378            s.assume_init()
11379        }
11380    }
11381}
11382impl Default for pm_pre_execution_node {
11383    fn default() -> Self {
11384        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11385        unsafe {
11386            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11387            s.assume_init()
11388        }
11389    }
11390}
11391impl Default for pm_program_node {
11392    fn default() -> Self {
11393        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11394        unsafe {
11395            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11396            s.assume_init()
11397        }
11398    }
11399}
11400impl Default for pm_range_node {
11401    fn default() -> Self {
11402        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11403        unsafe {
11404            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11405            s.assume_init()
11406        }
11407    }
11408}
11409impl Default for pm_rational_node {
11410    fn default() -> Self {
11411        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11412        unsafe {
11413            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11414            s.assume_init()
11415        }
11416    }
11417}
11418impl Default for pm_regular_expression_node {
11419    fn default() -> Self {
11420        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11421        unsafe {
11422            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11423            s.assume_init()
11424        }
11425    }
11426}
11427impl Default for pm_rescue_modifier_node {
11428    fn default() -> Self {
11429        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11430        unsafe {
11431            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11432            s.assume_init()
11433        }
11434    }
11435}
11436impl Default for pm_rescue_node {
11437    fn default() -> Self {
11438        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11439        unsafe {
11440            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11441            s.assume_init()
11442        }
11443    }
11444}
11445impl Default for pm_return_node {
11446    fn default() -> Self {
11447        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11448        unsafe {
11449            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11450            s.assume_init()
11451        }
11452    }
11453}
11454impl Default for pm_shareable_constant_node {
11455    fn default() -> Self {
11456        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11457        unsafe {
11458            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11459            s.assume_init()
11460        }
11461    }
11462}
11463impl Default for pm_singleton_class_node {
11464    fn default() -> Self {
11465        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11466        unsafe {
11467            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11468            s.assume_init()
11469        }
11470    }
11471}
11472impl Default for pm_source_file_node {
11473    fn default() -> Self {
11474        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11475        unsafe {
11476            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11477            s.assume_init()
11478        }
11479    }
11480}
11481impl Default for pm_splat_node {
11482    fn default() -> Self {
11483        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11484        unsafe {
11485            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11486            s.assume_init()
11487        }
11488    }
11489}
11490impl Default for pm_statements_node {
11491    fn default() -> Self {
11492        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11493        unsafe {
11494            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11495            s.assume_init()
11496        }
11497    }
11498}
11499impl Default for pm_string_node {
11500    fn default() -> Self {
11501        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11502        unsafe {
11503            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11504            s.assume_init()
11505        }
11506    }
11507}
11508impl Default for pm_super_node {
11509    fn default() -> Self {
11510        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11511        unsafe {
11512            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11513            s.assume_init()
11514        }
11515    }
11516}
11517impl Default for pm_symbol_node {
11518    fn default() -> Self {
11519        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11520        unsafe {
11521            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11522            s.assume_init()
11523        }
11524    }
11525}
11526impl Default for pm_undef_node {
11527    fn default() -> Self {
11528        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11529        unsafe {
11530            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11531            s.assume_init()
11532        }
11533    }
11534}
11535impl Default for pm_unless_node {
11536    fn default() -> Self {
11537        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11538        unsafe {
11539            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11540            s.assume_init()
11541        }
11542    }
11543}
11544impl Default for pm_until_node {
11545    fn default() -> Self {
11546        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11547        unsafe {
11548            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11549            s.assume_init()
11550        }
11551    }
11552}
11553impl Default for pm_when_node {
11554    fn default() -> Self {
11555        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11556        unsafe {
11557            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11558            s.assume_init()
11559        }
11560    }
11561}
11562impl Default for pm_while_node {
11563    fn default() -> Self {
11564        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11565        unsafe {
11566            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11567            s.assume_init()
11568        }
11569    }
11570}
11571impl Default for pm_x_string_node {
11572    fn default() -> Self {
11573        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11574        unsafe {
11575            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11576            s.assume_init()
11577        }
11578    }
11579}
11580impl Default for pm_yield_node {
11581    fn default() -> Self {
11582        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11583        unsafe {
11584            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11585            s.assume_init()
11586        }
11587    }
11588}
11589impl Default for pm_line_offset_list_t {
11590    fn default() -> Self {
11591        let mut s = ::std::mem::MaybeUninit::<Self>::uninit();
11592        unsafe {
11593            ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1);
11594            s.assume_init()
11595        }
11596    }
11597}
11598unsafe extern "C" {
11599    /** Returns a newly allocated and initialized arena. If the arena cannot be
11600 allocated, this function aborts the process.
11601
11602 @returns A pointer to the newly allocated arena. It is the responsibility of
11603     the caller to free the arena using pm_arena_free when it is no longer
11604     needed.
11605*/
11606    pub fn pm_arena_new() -> *mut pm_arena_t;
11607    /** Frees both the held memory and the arena itself.
11608
11609 @param arena The arena to free.
11610*/
11611    pub fn pm_arena_free(arena: *mut pm_arena_t);
11612    /** Return a raw pointer to the start of a constant.
11613
11614 @param constant The constant to get the start of.
11615 @returns A raw pointer to the start of the constant.
11616*/
11617    pub fn pm_constant_start(constant: *const pm_constant_t) -> *const u8;
11618    /** Return the length of a constant.
11619
11620 @param constant The constant to get the length of.
11621 @returns The length of the constant.
11622*/
11623    pub fn pm_constant_length(constant: *const pm_constant_t) -> usize;
11624    /** Initialize a string that views the given bytes. The bytes are not copied, so
11625 they must remain valid for as long as the string is in use.
11626
11627 @param string The string to initialize.
11628 @param source The start of the bytes.
11629 @param length The number of bytes.
11630*/
11631    pub fn pm_string_init(string: *mut pm_string_t, source: *const u8, length: usize);
11632    /** Returns the length associated with the string.
11633
11634 @param string The string to get the length of.
11635 @returns The length of the string.
11636*/
11637    pub fn pm_string_length(string: *const pm_string_t) -> usize;
11638    /** Returns the start pointer associated with the string.
11639
11640 @param string The string to get the start pointer of.
11641 @returns The start pointer of the string.
11642*/
11643    pub fn pm_string_source(string: *const pm_string_t) -> *const u8;
11644    /** Get the type of the given diagnostic.
11645
11646 @param diagnostic The diagnostic to get the type of.
11647 @returns The type of the given diagnostic. Note that this is a string
11648     representation of an internal ID, and is not meant to be relied upon as a
11649     stable identifier for the diagnostic. We do not guarantee that these will
11650     not change in the future. This is meant to be used for debugging and
11651     error reporting purposes, and not for programmatic checks.
11652*/
11653    pub fn pm_diagnostic_type(
11654        diagnostic: *const pm_diagnostic_t,
11655    ) -> *const ::std::os::raw::c_char;
11656    /** Get the location of the given diagnostic.
11657
11658 @param diagnostic The diagnostic to get the location of.
11659 @returns The location of the given diagnostic.
11660*/
11661    pub fn pm_diagnostic_location(diagnostic: *const pm_diagnostic_t) -> pm_location_t;
11662    /** Get the message of the given diagnostic.
11663
11664 @param diagnostic The diagnostic to get the message of.
11665 @returns The message of the given diagnostic.
11666*/
11667    pub fn pm_diagnostic_message(
11668        diagnostic: *const pm_diagnostic_t,
11669    ) -> *const ::std::os::raw::c_char;
11670    /** Get the error level associated with the given diagnostic.
11671
11672 @param diagnostic The diagnostic to get the error level of.
11673 @returns The error level of the given diagnostic. If the diagnostic was a
11674     warning, or is in any way not an error, then the return value is
11675     undefined and should not be relied upon.
11676*/
11677    pub fn pm_diagnostic_error_level(
11678        diagnostic: *const pm_diagnostic_t,
11679    ) -> pm_error_level_t;
11680    /** Get the warning level associated with the given diagnostic.
11681
11682 @param diagnostic The diagnostic to get the warning level of.
11683 @returns The warning level of the given diagnostic. If the diagnostic was an
11684     error, or is in any way not a warning, then the return value is
11685     undefined and should not be relied upon.
11686*/
11687    pub fn pm_diagnostic_warning_level(
11688        diagnostic: *const pm_diagnostic_t,
11689    ) -> pm_warning_level_t;
11690    /** Get the diagnostic that follows the given diagnostic among the errors or the
11691 warnings of the parser that produced it.
11692
11693 @param diagnostic The diagnostic to get the successor of.
11694 @returns The next diagnostic of the same kind, or NULL if the given
11695     diagnostic is the last one.
11696*/
11697    pub fn pm_diagnostic_next(
11698        diagnostic: *const pm_diagnostic_t,
11699    ) -> *const pm_diagnostic_t;
11700    /** Returns the location associated with the given comment.
11701
11702 @param comment the comment whose location we want to get
11703 @returns the location associated with the given comment
11704*/
11705    pub fn pm_comment_location(comment: *const pm_comment_t) -> pm_location_t;
11706    /** Returns the type associated with the given comment.
11707
11708 @param comment the comment whose type we want to get
11709 @returns the type associated with the given comment. This can either be
11710     PM_COMMENT_INLINE or PM_COMMENT_EMBDOC.
11711*/
11712    pub fn pm_comment_type(comment: *const pm_comment_t) -> pm_comment_type_t;
11713    /** Returns the comment that follows the given comment among the comments
11714 associated with the parser that found it.
11715
11716 @param comment the comment whose successor we want to get
11717 @returns the next comment, or NULL if the given comment is the last one
11718*/
11719    pub fn pm_comment_next(comment: *const pm_comment_t) -> *const pm_comment_t;
11720    /** Returns the line and column of the given offset. If the offset is not in the
11721 list, the line and column of the closest offset less than the given offset
11722 are returned.
11723
11724 @param list The list to search.
11725 @param cursor The offset to search for.
11726 @param start_line The line to start counting from.
11727 @returns The line and column of the given offset.
11728*/
11729    pub fn pm_line_offset_list_line_column(
11730        list: *const pm_line_offset_list_t,
11731        cursor: u32,
11732        start_line: i32,
11733    ) -> pm_line_column_t;
11734    /** Returns the location of the key associated with the given magic comment.
11735
11736 @param magic_comment the magic comment whose key location we want to get
11737 @returns the location of the key associated with the given magic comment
11738*/
11739    pub fn pm_magic_comment_key(
11740        magic_comment: *const pm_magic_comment_t,
11741    ) -> pm_location_t;
11742    /** Returns the location of the value associated with the given magic comment.
11743
11744 @param magic_comment the magic comment whose value location we want to get
11745 @returns the location of the value associated with the given magic comment
11746*/
11747    pub fn pm_magic_comment_value(
11748        magic_comment: *const pm_magic_comment_t,
11749    ) -> pm_location_t;
11750    /** Returns the magic comment that follows the given magic comment among the
11751 magic comments associated with the parser that found it.
11752
11753 @param magic_comment the magic comment whose successor we want to get
11754 @returns the next magic comment, or NULL if the given magic comment is the
11755     last one
11756*/
11757    pub fn pm_magic_comment_next(
11758        magic_comment: *const pm_magic_comment_t,
11759    ) -> *const pm_magic_comment_t;
11760    /** Allocate a new options struct. If the options struct cannot be allocated,
11761 this function aborts the process.
11762
11763 @returns A new options struct with default values. It is the responsibility
11764     of the caller to free this struct using pm_options_free().
11765*/
11766    pub fn pm_options_new() -> *mut pm_options_t;
11767    /** Free both the held memory of the given options struct and the struct itself.
11768
11769 @param options The options struct to free.
11770*/
11771    pub fn pm_options_free(options: *mut pm_options_t);
11772    /** Set the filepath option on the given options struct.
11773
11774 @param options The options struct to set the filepath on.
11775 @param filepath The filepath to set.
11776*/
11777    pub fn pm_options_filepath_set(
11778        options: *mut pm_options_t,
11779        filepath: *const ::std::os::raw::c_char,
11780    );
11781    /** Set the line option on the given options struct.
11782
11783 @param options The options struct to set the line on.
11784 @param line The line to set.
11785*/
11786    pub fn pm_options_line_set(options: *mut pm_options_t, line: i32);
11787    /** Set the encoding option on the given options struct.
11788
11789 @param options The options struct to set the encoding on.
11790 @param encoding The encoding to set.
11791*/
11792    pub fn pm_options_encoding_set(
11793        options: *mut pm_options_t,
11794        encoding: *const ::std::os::raw::c_char,
11795    );
11796    /** Set the encoding_locked option on the given options struct.
11797
11798 @param options The options struct to set the encoding_locked value on.
11799 @param encoding_locked The encoding_locked value to set.
11800*/
11801    pub fn pm_options_encoding_locked_set(
11802        options: *mut pm_options_t,
11803        encoding_locked: bool,
11804    );
11805    /** Set the frozen string literal option on the given options struct.
11806
11807 @param options The options struct to set the frozen string literal value on.
11808 @param frozen_string_literal The frozen string literal value to set.
11809*/
11810    pub fn pm_options_frozen_string_literal_set(
11811        options: *mut pm_options_t,
11812        frozen_string_literal: bool,
11813    );
11814    /** Sets the command line option on the given options struct.
11815
11816 @param options The options struct to set the command line option on.
11817 @param command_line The command_line value to set.
11818*/
11819    pub fn pm_options_command_line_set(options: *mut pm_options_t, command_line: u8);
11820    /** Set the version option on the given options struct by parsing the given
11821 string. If the string contains an invalid option, this returns false.
11822 Otherwise, it returns true.
11823
11824 @param options The options struct to set the version on.
11825 @param version The version to set.
11826 @param length The length of the version string.
11827 @returns Whether or not the version was parsed successfully.
11828*/
11829    pub fn pm_options_version_set(
11830        options: *mut pm_options_t,
11831        version: *const ::std::os::raw::c_char,
11832        length: usize,
11833    ) -> bool;
11834    /** Set the main script option on the given options struct.
11835
11836 @param options The options struct to set the main script value on.
11837 @param main_script The main script value to set.
11838*/
11839    pub fn pm_options_main_script_set(options: *mut pm_options_t, main_script: bool);
11840    /** Set the partial script option on the given options struct.
11841
11842 @param options The options struct to set the partial script value on.
11843 @param partial_script The partial script value to set.
11844*/
11845    pub fn pm_options_partial_script_set(
11846        options: *mut pm_options_t,
11847        partial_script: bool,
11848    );
11849    /** Allocate and zero out the scopes array on the given options struct.
11850
11851 @param options The options struct to initialize the scopes array on.
11852 @param scopes_count The number of scopes to allocate.
11853 @returns Whether or not the scopes array was initialized successfully.
11854*/
11855    pub fn pm_options_scopes_init(
11856        options: *mut pm_options_t,
11857        scopes_count: usize,
11858    ) -> bool;
11859    /** Return a mutable pointer to the scope at the given index within the given
11860 options.
11861
11862 @param options The options struct to get the scope from.
11863 @param index The index of the scope to get.
11864 @returns A mutable pointer to the scope at the given index.
11865*/
11866    pub fn pm_options_scope_mut(
11867        options: *mut pm_options_t,
11868        index: usize,
11869    ) -> *mut pm_options_scope_t;
11870    /** Create a new options scope struct. This will hold a set of locals that are in
11871 scope surrounding the code that is being parsed. If the scope was unable to
11872 allocate its locals, this function will abort the process.
11873
11874 @param scope The scope struct to initialize.
11875 @param locals_count The number of locals to allocate.
11876*/
11877    pub fn pm_options_scope_init(scope: *mut pm_options_scope_t, locals_count: usize);
11878    /** Return a mutable pointer to the local at the given index within the given
11879 scope, for setting the local's name with pm_string_init. The parser copies
11880 the name when it is created, so its bytes must remain valid until then.
11881
11882 @param scope The scope struct to get the local from.
11883 @param index The index of the local to get.
11884 @returns A mutable pointer to the local at the given index.
11885*/
11886    pub fn pm_options_scope_local_mut(
11887        scope: *mut pm_options_scope_t,
11888        index: usize,
11889    ) -> *mut pm_string_t;
11890    /** Set the forwarding option on the given scope struct.
11891
11892 @param scope The scope struct to set the forwarding on.
11893 @param forwarding The forwarding value to set.
11894*/
11895    pub fn pm_options_scope_forwarding_set(
11896        scope: *mut pm_options_scope_t,
11897        forwarding: u8,
11898    );
11899    /** Allocate and initialize a parser with the given start and end pointers.
11900
11901 @param arena The arena to use for all AST-lifetime allocations. It is caller-
11902     owned and must outlive the parser.
11903 @param source The source to parse.
11904 @param size The size of the source.
11905 @param options The optional options to use when parsing. These options must
11906     live for the whole lifetime of this parser.
11907 @returns The initialized parser. It is the responsibility of the caller to
11908     free the parser with `pm_parser_free()`.
11909*/
11910    pub fn pm_parser_new(
11911        arena: *mut pm_arena_t,
11912        source: *const u8,
11913        size: usize,
11914        options: *const pm_options_t,
11915    ) -> *mut pm_parser_t;
11916    /** Free both the memory held by the given parser and the parser itself.
11917
11918 @param parser The parser to free.
11919*/
11920    pub fn pm_parser_free(parser: *mut pm_parser_t);
11921    /** Returns the raw pointer to the start of the source that is being parsed.
11922
11923 @param parser the parser whose start pointer we want to get
11924 @returns the raw pointer to the start of the source that is being parsed
11925*/
11926    pub fn pm_parser_start(parser: *const pm_parser_t) -> *const u8;
11927    /** Returns the line that the parser was considered to have started on.
11928
11929 @param parser the parser whose start line we want to get
11930 @returns the line that the parser was considered to have started on
11931*/
11932    pub fn pm_parser_start_line(parser: *const pm_parser_t) -> i32;
11933    /** Add a constant to the parser's constant pool, for naming a node that was not
11934 parsed from the source. If the constant is already in the pool, its existing
11935 id is returned. Otherwise the parser copies the bytes, so they only need to
11936 remain valid for the duration of the call.
11937
11938 Adding a constant makes the pool larger, so a cache with one entry per
11939 constant built beforehand from pm_parser_constants_size and
11940 pm_parser_constant_at does not cover it. Build such caches after adding any
11941 constants.
11942
11943 @param parser the parser whose constant pool we want to add to
11944 @param start a pointer to the start of the string to add
11945 @param length the length of the string to add
11946 @returns the id of the constant
11947*/
11948    pub fn pm_parser_constant_insert(
11949        parser: *mut pm_parser_t,
11950        start: *const u8,
11951        length: usize,
11952    ) -> pm_constant_id_t;
11953    /** Returns the frozen string literal value of the parser, as determined by the
11954 frozen_string_literal magic comment or the option set on the parser.
11955
11956 @param parser the parser whose frozen string literal value we want to get
11957 @returns -1 if disabled, 0 if unset, 1 if enabled
11958*/
11959    pub fn pm_parser_frozen_string_literal(parser: *const pm_parser_t) -> i8;
11960    /** Returns the line offsets that are associated with the given parser.
11961
11962 @param parser the parser whose line offsets we want to get
11963 @returns the line offsets that are associated with the given parser
11964*/
11965    pub fn pm_parser_line_offsets(
11966        parser: *const pm_parser_t,
11967    ) -> *const pm_line_offset_list_t;
11968    /** Returns the location of the __DATA__ section that is associated with the
11969 given parser.
11970
11971 @param parser the parser whose data location we want to get
11972 @returns the location of the __DATA__ section that is associated with the
11973     given parser. If it is unset, then the length will be set to 0.
11974*/
11975    pub fn pm_parser_data_loc(parser: *const pm_parser_t) -> *const pm_location_t;
11976    /** Returns the number of comments associated with the given parser.
11977
11978 @param parser the parser whose comments we want to get the size of
11979 @returns the number of comments associated with the given parser
11980*/
11981    pub fn pm_parser_comments_size(parser: *const pm_parser_t) -> usize;
11982    /** Returns the first comment associated with the given parser. Iterate over the
11983 rest with pm_comment_next, as in:
11984
11985 ```c
11986 for (const pm_comment_t *comment = pm_parser_comments_first(parser); comment != NULL; comment = pm_comment_next(comment)) {
11987     pm_location_t location = pm_comment_location(comment);
11988 }
11989 ```
11990
11991 @param parser the parser whose comments we want to iterate over
11992 @returns the first comment, or NULL if there are no comments
11993*/
11994    pub fn pm_parser_comments_first(parser: *const pm_parser_t) -> *const pm_comment_t;
11995    /** Returns the number of magic comments associated with the given parser.
11996
11997 @param parser the parser whose magic comments we want to get the size of
11998 @returns the number of magic comments associated with the given parser
11999*/
12000    pub fn pm_parser_magic_comments_size(parser: *const pm_parser_t) -> usize;
12001    /** Returns the first magic comment associated with the given parser. Iterate
12002 over the rest with pm_magic_comment_next.
12003
12004 @param parser the parser whose magic comments we want to iterate over
12005 @returns the first magic comment, or NULL if there are no magic comments
12006*/
12007    pub fn pm_parser_magic_comments_first(
12008        parser: *const pm_parser_t,
12009    ) -> *const pm_magic_comment_t;
12010    /** Returns the number of errors associated with the given parser.
12011
12012 @param parser the parser whose errors we want to get the size of
12013 @returns the number of errors associated with the given parser
12014*/
12015    pub fn pm_parser_errors_size(parser: *const pm_parser_t) -> usize;
12016    /** Returns the number of warnings associated with the given parser.
12017
12018 @param parser the parser whose warnings we want to get the size of
12019 @returns the number of warnings associated with the given parser
12020*/
12021    pub fn pm_parser_warnings_size(parser: *const pm_parser_t) -> usize;
12022    /** Returns the first error associated with the given parser. Iterate over the
12023 rest with pm_diagnostic_next.
12024
12025 @param parser the parser whose errors we want to iterate over
12026 @returns the first error, or NULL if there are no errors
12027*/
12028    pub fn pm_parser_errors_first(parser: *const pm_parser_t) -> *const pm_diagnostic_t;
12029    /** Returns the first warning associated with the given parser. Iterate over the
12030 rest with pm_diagnostic_next.
12031
12032 @param parser the parser whose warnings we want to iterate over
12033 @returns the first warning, or NULL if there are no warnings
12034*/
12035    pub fn pm_parser_warnings_first(
12036        parser: *const pm_parser_t,
12037    ) -> *const pm_diagnostic_t;
12038    /** Returns the number of constants in the constant pool associated with the
12039 given parser.
12040
12041 @param parser the parser whose constant pool constants we want to get the
12042     size of
12043 @returns the number of constants in the constant pool associated with the
12044     given parser
12045*/
12046    pub fn pm_parser_constants_size(parser: *const pm_parser_t) -> usize;
12047    /** Returns the constant at the given index in the constant pool associated with
12048 the given parser. Together with pm_constant_id_index, this lets a caller
12049 build a cache with one entry per constant and then find the entry for any
12050 constant id, as in:
12051
12052 ```c
12053 size_t size = pm_parser_constants_size(parser);
12054 for (size_t index = 0; index < size; index++) {
12055     cache[index] = convert(pm_parser_constant_at(parser, index));
12056 }
12057
12058 value = cache[pm_constant_id_index(constant_id)];
12059 ```
12060
12061 For any constant id, pm_parser_constant_at(parser,
12062 pm_constant_id_index(constant_id)) is pm_parser_constant(parser,
12063 constant_id).
12064
12065 @param parser the parser whose constant pool we want to look up from
12066 @param index the index of the constant, which must be less than
12067     pm_parser_constants_size(parser)
12068 @returns a pointer to the constant at the given index
12069*/
12070    pub fn pm_parser_constant_at(
12071        parser: *const pm_parser_t,
12072        index: usize,
12073    ) -> *const pm_constant_t;
12074    /** Returns a pointer to the constant at the given id in the constant pool
12075 associated with the given parser.
12076
12077 @param parser the parser whose constant pool we want to look up from
12078 @param constant_id the id of the constant to look up. Optional constant
12079     fields on nodes hold 0 when they are absent, which is not a valid id.
12080 @returns a pointer to the constant at the given id
12081*/
12082    pub fn pm_parser_constant(
12083        parser: *const pm_parser_t,
12084        constant_id: pm_constant_id_t,
12085    ) -> *const pm_constant_t;
12086    /** Initiate the parser with the given parser.
12087
12088 @param parser The parser to use.
12089 @returns The AST representing the source.
12090*/
12091    pub fn pm_parse(parser: *mut pm_parser_t) -> *mut pm_node_t;
12092    /** Append a node to the end of a node list. If the list is full, its storage is
12093 grown by allocating from the given arena, so the arena must live as long as
12094 the list does. For a list in a parsed tree, that is the arena that was passed
12095 to pm_parser_new.
12096
12097 @param arena The arena to allocate the list's storage from.
12098 @param list The list to append to.
12099 @param node The node to append.
12100*/
12101    pub fn pm_node_list_append(
12102        arena: *mut pm_arena_t,
12103        list: *mut pm_node_list_t,
12104        node: *mut pm_node_t,
12105    );
12106    /** Check that the slice is a valid local variable name.
12107
12108 @param source The source to check.
12109 @param length The length of the source.
12110 @param encoding_name The name of the encoding of the source.
12111 @returns PM_STRING_QUERY_TRUE if the query is true, PM_STRING_QUERY_FALSE if
12112   the query is false, and PM_STRING_QUERY_ERROR if the encoding was invalid.
12113*/
12114    pub fn pm_string_query_local(
12115        source: *const u8,
12116        length: usize,
12117        encoding_name: *const ::std::os::raw::c_char,
12118    ) -> pm_string_query_t;
12119    /** Check that the slice is a valid constant name.
12120
12121 @param source The source to check.
12122 @param length The length of the source.
12123 @param encoding_name The name of the encoding of the source.
12124 @returns PM_STRING_QUERY_TRUE if the query is true, PM_STRING_QUERY_FALSE if
12125   the query is false, and PM_STRING_QUERY_ERROR if the encoding was invalid.
12126*/
12127    pub fn pm_string_query_constant(
12128        source: *const u8,
12129        length: usize,
12130        encoding_name: *const ::std::os::raw::c_char,
12131    ) -> pm_string_query_t;
12132    /** Check that the slice is a valid method name.
12133
12134 @param source The source to check.
12135 @param length The length of the source.
12136 @param encoding_name The name of the encoding of the source.
12137 @returns PM_STRING_QUERY_TRUE if the query is true, PM_STRING_QUERY_FALSE if
12138   the query is false, and PM_STRING_QUERY_ERROR if the encoding was invalid.
12139*/
12140    pub fn pm_string_query_method_name(
12141        source: *const u8,
12142        length: usize,
12143        encoding_name: *const ::std::os::raw::c_char,
12144    ) -> pm_string_query_t;
12145    /** Check that the slice is a keyword.
12146
12147 @param source The source to check.
12148 @param length The length of the source.
12149 @param encoding_name The name of the encoding of the source.
12150 @returns PM_STRING_QUERY_TRUE if the query is true, PM_STRING_QUERY_FALSE if
12151   the query is false, and PM_STRING_QUERY_ERROR if the encoding was invalid.
12152*/
12153    pub fn pm_string_query_keyword(
12154        source: *const u8,
12155        length: usize,
12156        encoding_name: *const ::std::os::raw::c_char,
12157    ) -> pm_string_query_t;
12158    /** The prism version and the serialization format.
12159
12160 @returns The prism version as a constant string.
12161*/
12162    pub fn pm_version() -> *const ::std::os::raw::c_char;
12163}