1
2use std::marker::PhantomData;
3
4#[allow(clippy::wildcard_imports)]
5use ruby_prism_sys::*;
6use crate::{ConstantId, ConstantList, Integer, Location, NodeList};
7const PM_ALIAS_GLOBAL_VARIABLE_NODE: u16 = pm_node_type::PM_ALIAS_GLOBAL_VARIABLE_NODE as u16;
8const PM_ALIAS_METHOD_NODE: u16 = pm_node_type::PM_ALIAS_METHOD_NODE as u16;
9const PM_ALTERNATION_PATTERN_NODE: u16 = pm_node_type::PM_ALTERNATION_PATTERN_NODE as u16;
10const PM_AND_NODE: u16 = pm_node_type::PM_AND_NODE as u16;
11const PM_ARGUMENTS_NODE: u16 = pm_node_type::PM_ARGUMENTS_NODE as u16;
12const PM_ARRAY_NODE: u16 = pm_node_type::PM_ARRAY_NODE as u16;
13const PM_ARRAY_PATTERN_NODE: u16 = pm_node_type::PM_ARRAY_PATTERN_NODE as u16;
14const PM_ASSOC_NODE: u16 = pm_node_type::PM_ASSOC_NODE as u16;
15const PM_ASSOC_SPLAT_NODE: u16 = pm_node_type::PM_ASSOC_SPLAT_NODE as u16;
16const PM_BACK_REFERENCE_READ_NODE: u16 = pm_node_type::PM_BACK_REFERENCE_READ_NODE as u16;
17const PM_BEGIN_NODE: u16 = pm_node_type::PM_BEGIN_NODE as u16;
18const PM_BLOCK_ARGUMENT_NODE: u16 = pm_node_type::PM_BLOCK_ARGUMENT_NODE as u16;
19const PM_BLOCK_LOCAL_VARIABLE_NODE: u16 = pm_node_type::PM_BLOCK_LOCAL_VARIABLE_NODE as u16;
20const PM_BLOCK_NODE: u16 = pm_node_type::PM_BLOCK_NODE as u16;
21const PM_BLOCK_PARAMETER_NODE: u16 = pm_node_type::PM_BLOCK_PARAMETER_NODE as u16;
22const PM_BLOCK_PARAMETERS_NODE: u16 = pm_node_type::PM_BLOCK_PARAMETERS_NODE as u16;
23const PM_BREAK_NODE: u16 = pm_node_type::PM_BREAK_NODE as u16;
24const PM_CALL_AND_WRITE_NODE: u16 = pm_node_type::PM_CALL_AND_WRITE_NODE as u16;
25const PM_CALL_NODE: u16 = pm_node_type::PM_CALL_NODE as u16;
26const PM_CALL_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CALL_OPERATOR_WRITE_NODE as u16;
27const PM_CALL_OR_WRITE_NODE: u16 = pm_node_type::PM_CALL_OR_WRITE_NODE as u16;
28const PM_CALL_TARGET_NODE: u16 = pm_node_type::PM_CALL_TARGET_NODE as u16;
29const PM_CAPTURE_PATTERN_NODE: u16 = pm_node_type::PM_CAPTURE_PATTERN_NODE as u16;
30const PM_CASE_MATCH_NODE: u16 = pm_node_type::PM_CASE_MATCH_NODE as u16;
31const PM_CASE_NODE: u16 = pm_node_type::PM_CASE_NODE as u16;
32const PM_CLASS_NODE: u16 = pm_node_type::PM_CLASS_NODE as u16;
33const PM_CLASS_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_AND_WRITE_NODE as u16;
34const PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE as u16;
35const PM_CLASS_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_OR_WRITE_NODE as u16;
36const PM_CLASS_VARIABLE_READ_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_READ_NODE as u16;
37const PM_CLASS_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_TARGET_NODE as u16;
38const PM_CLASS_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_WRITE_NODE as u16;
39const PM_CONSTANT_AND_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_AND_WRITE_NODE as u16;
40const PM_CONSTANT_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_OPERATOR_WRITE_NODE as u16;
41const PM_CONSTANT_OR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_OR_WRITE_NODE as u16;
42const PM_CONSTANT_PATH_AND_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_AND_WRITE_NODE as u16;
43const PM_CONSTANT_PATH_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_NODE as u16;
44const PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_OPERATOR_WRITE_NODE as u16;
45const PM_CONSTANT_PATH_OR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_OR_WRITE_NODE as u16;
46const PM_CONSTANT_PATH_TARGET_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_TARGET_NODE as u16;
47const PM_CONSTANT_PATH_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_WRITE_NODE as u16;
48const PM_CONSTANT_READ_NODE: u16 = pm_node_type::PM_CONSTANT_READ_NODE as u16;
49const PM_CONSTANT_TARGET_NODE: u16 = pm_node_type::PM_CONSTANT_TARGET_NODE as u16;
50const PM_CONSTANT_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_WRITE_NODE as u16;
51const PM_DEF_NODE: u16 = pm_node_type::PM_DEF_NODE as u16;
52const PM_DEFINED_NODE: u16 = pm_node_type::PM_DEFINED_NODE as u16;
53const PM_ELSE_NODE: u16 = pm_node_type::PM_ELSE_NODE as u16;
54const PM_EMBEDDED_STATEMENTS_NODE: u16 = pm_node_type::PM_EMBEDDED_STATEMENTS_NODE as u16;
55const PM_EMBEDDED_VARIABLE_NODE: u16 = pm_node_type::PM_EMBEDDED_VARIABLE_NODE as u16;
56const PM_ENSURE_NODE: u16 = pm_node_type::PM_ENSURE_NODE as u16;
57const PM_ERROR_RECOVERY_NODE: u16 = pm_node_type::PM_ERROR_RECOVERY_NODE as u16;
58const PM_FALSE_NODE: u16 = pm_node_type::PM_FALSE_NODE as u16;
59const PM_FIND_PATTERN_NODE: u16 = pm_node_type::PM_FIND_PATTERN_NODE as u16;
60const PM_FLIP_FLOP_NODE: u16 = pm_node_type::PM_FLIP_FLOP_NODE as u16;
61const PM_FLOAT_NODE: u16 = pm_node_type::PM_FLOAT_NODE as u16;
62const PM_FOR_NODE: u16 = pm_node_type::PM_FOR_NODE as u16;
63const PM_FORWARDING_ARGUMENTS_NODE: u16 = pm_node_type::PM_FORWARDING_ARGUMENTS_NODE as u16;
64const PM_FORWARDING_PARAMETER_NODE: u16 = pm_node_type::PM_FORWARDING_PARAMETER_NODE as u16;
65const PM_FORWARDING_SUPER_NODE: u16 = pm_node_type::PM_FORWARDING_SUPER_NODE as u16;
66const PM_GLOBAL_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_AND_WRITE_NODE as u16;
67const PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE as u16;
68const PM_GLOBAL_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_OR_WRITE_NODE as u16;
69const PM_GLOBAL_VARIABLE_READ_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_READ_NODE as u16;
70const PM_GLOBAL_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_TARGET_NODE as u16;
71const PM_GLOBAL_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_WRITE_NODE as u16;
72const PM_HASH_NODE: u16 = pm_node_type::PM_HASH_NODE as u16;
73const PM_HASH_PATTERN_NODE: u16 = pm_node_type::PM_HASH_PATTERN_NODE as u16;
74const PM_IF_NODE: u16 = pm_node_type::PM_IF_NODE as u16;
75const PM_IMAGINARY_NODE: u16 = pm_node_type::PM_IMAGINARY_NODE as u16;
76const PM_IMPLICIT_NODE: u16 = pm_node_type::PM_IMPLICIT_NODE as u16;
77const PM_IMPLICIT_REST_NODE: u16 = pm_node_type::PM_IMPLICIT_REST_NODE as u16;
78const PM_IN_NODE: u16 = pm_node_type::PM_IN_NODE as u16;
79const PM_INDEX_AND_WRITE_NODE: u16 = pm_node_type::PM_INDEX_AND_WRITE_NODE as u16;
80const PM_INDEX_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_INDEX_OPERATOR_WRITE_NODE as u16;
81const PM_INDEX_OR_WRITE_NODE: u16 = pm_node_type::PM_INDEX_OR_WRITE_NODE as u16;
82const PM_INDEX_TARGET_NODE: u16 = pm_node_type::PM_INDEX_TARGET_NODE as u16;
83const PM_INSTANCE_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_AND_WRITE_NODE as u16;
84const PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE as u16;
85const PM_INSTANCE_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_OR_WRITE_NODE as u16;
86const PM_INSTANCE_VARIABLE_READ_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_READ_NODE as u16;
87const PM_INSTANCE_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_TARGET_NODE as u16;
88const PM_INSTANCE_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_WRITE_NODE as u16;
89const PM_INTEGER_NODE: u16 = pm_node_type::PM_INTEGER_NODE as u16;
90const PM_INTERPOLATED_MATCH_LAST_LINE_NODE: u16 = pm_node_type::PM_INTERPOLATED_MATCH_LAST_LINE_NODE as u16;
91const PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: u16 = pm_node_type::PM_INTERPOLATED_REGULAR_EXPRESSION_NODE as u16;
92const PM_INTERPOLATED_STRING_NODE: u16 = pm_node_type::PM_INTERPOLATED_STRING_NODE as u16;
93const PM_INTERPOLATED_SYMBOL_NODE: u16 = pm_node_type::PM_INTERPOLATED_SYMBOL_NODE as u16;
94const PM_INTERPOLATED_X_STRING_NODE: u16 = pm_node_type::PM_INTERPOLATED_X_STRING_NODE as u16;
95const PM_IT_LOCAL_VARIABLE_READ_NODE: u16 = pm_node_type::PM_IT_LOCAL_VARIABLE_READ_NODE as u16;
96const PM_IT_PARAMETERS_NODE: u16 = pm_node_type::PM_IT_PARAMETERS_NODE as u16;
97const PM_KEYWORD_HASH_NODE: u16 = pm_node_type::PM_KEYWORD_HASH_NODE as u16;
98const PM_KEYWORD_REST_PARAMETER_NODE: u16 = pm_node_type::PM_KEYWORD_REST_PARAMETER_NODE as u16;
99const PM_LAMBDA_NODE: u16 = pm_node_type::PM_LAMBDA_NODE as u16;
100const PM_LOCAL_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_AND_WRITE_NODE as u16;
101const PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE as u16;
102const PM_LOCAL_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_OR_WRITE_NODE as u16;
103const PM_LOCAL_VARIABLE_READ_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_READ_NODE as u16;
104const PM_LOCAL_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_TARGET_NODE as u16;
105const PM_LOCAL_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_WRITE_NODE as u16;
106const PM_MATCH_LAST_LINE_NODE: u16 = pm_node_type::PM_MATCH_LAST_LINE_NODE as u16;
107const PM_MATCH_PREDICATE_NODE: u16 = pm_node_type::PM_MATCH_PREDICATE_NODE as u16;
108const PM_MATCH_REQUIRED_NODE: u16 = pm_node_type::PM_MATCH_REQUIRED_NODE as u16;
109const PM_MATCH_WRITE_NODE: u16 = pm_node_type::PM_MATCH_WRITE_NODE as u16;
110const PM_MODULE_NODE: u16 = pm_node_type::PM_MODULE_NODE as u16;
111const PM_MULTI_TARGET_NODE: u16 = pm_node_type::PM_MULTI_TARGET_NODE as u16;
112const PM_MULTI_WRITE_NODE: u16 = pm_node_type::PM_MULTI_WRITE_NODE as u16;
113const PM_NEXT_NODE: u16 = pm_node_type::PM_NEXT_NODE as u16;
114const PM_NIL_NODE: u16 = pm_node_type::PM_NIL_NODE as u16;
115const PM_NO_BLOCK_PARAMETER_NODE: u16 = pm_node_type::PM_NO_BLOCK_PARAMETER_NODE as u16;
116const PM_NO_KEYWORDS_PARAMETER_NODE: u16 = pm_node_type::PM_NO_KEYWORDS_PARAMETER_NODE as u16;
117const PM_NUMBERED_PARAMETERS_NODE: u16 = pm_node_type::PM_NUMBERED_PARAMETERS_NODE as u16;
118const PM_NUMBERED_REFERENCE_READ_NODE: u16 = pm_node_type::PM_NUMBERED_REFERENCE_READ_NODE as u16;
119const PM_OPTIONAL_KEYWORD_PARAMETER_NODE: u16 = pm_node_type::PM_OPTIONAL_KEYWORD_PARAMETER_NODE as u16;
120const PM_OPTIONAL_PARAMETER_NODE: u16 = pm_node_type::PM_OPTIONAL_PARAMETER_NODE as u16;
121const PM_OR_NODE: u16 = pm_node_type::PM_OR_NODE as u16;
122const PM_PARAMETERS_NODE: u16 = pm_node_type::PM_PARAMETERS_NODE as u16;
123const PM_PARENTHESES_NODE: u16 = pm_node_type::PM_PARENTHESES_NODE as u16;
124const PM_PINNED_EXPRESSION_NODE: u16 = pm_node_type::PM_PINNED_EXPRESSION_NODE as u16;
125const PM_PINNED_VARIABLE_NODE: u16 = pm_node_type::PM_PINNED_VARIABLE_NODE as u16;
126const PM_POST_EXECUTION_NODE: u16 = pm_node_type::PM_POST_EXECUTION_NODE as u16;
127const PM_PRE_EXECUTION_NODE: u16 = pm_node_type::PM_PRE_EXECUTION_NODE as u16;
128const PM_PROGRAM_NODE: u16 = pm_node_type::PM_PROGRAM_NODE as u16;
129const PM_RANGE_NODE: u16 = pm_node_type::PM_RANGE_NODE as u16;
130const PM_RATIONAL_NODE: u16 = pm_node_type::PM_RATIONAL_NODE as u16;
131const PM_REDO_NODE: u16 = pm_node_type::PM_REDO_NODE as u16;
132const PM_REGULAR_EXPRESSION_NODE: u16 = pm_node_type::PM_REGULAR_EXPRESSION_NODE as u16;
133const PM_REQUIRED_KEYWORD_PARAMETER_NODE: u16 = pm_node_type::PM_REQUIRED_KEYWORD_PARAMETER_NODE as u16;
134const PM_REQUIRED_PARAMETER_NODE: u16 = pm_node_type::PM_REQUIRED_PARAMETER_NODE as u16;
135const PM_RESCUE_MODIFIER_NODE: u16 = pm_node_type::PM_RESCUE_MODIFIER_NODE as u16;
136const PM_RESCUE_NODE: u16 = pm_node_type::PM_RESCUE_NODE as u16;
137const PM_REST_PARAMETER_NODE: u16 = pm_node_type::PM_REST_PARAMETER_NODE as u16;
138const PM_RETRY_NODE: u16 = pm_node_type::PM_RETRY_NODE as u16;
139const PM_RETURN_NODE: u16 = pm_node_type::PM_RETURN_NODE as u16;
140const PM_SELF_NODE: u16 = pm_node_type::PM_SELF_NODE as u16;
141const PM_SHAREABLE_CONSTANT_NODE: u16 = pm_node_type::PM_SHAREABLE_CONSTANT_NODE as u16;
142const PM_SINGLETON_CLASS_NODE: u16 = pm_node_type::PM_SINGLETON_CLASS_NODE as u16;
143const PM_SOURCE_ENCODING_NODE: u16 = pm_node_type::PM_SOURCE_ENCODING_NODE as u16;
144const PM_SOURCE_FILE_NODE: u16 = pm_node_type::PM_SOURCE_FILE_NODE as u16;
145const PM_SOURCE_LINE_NODE: u16 = pm_node_type::PM_SOURCE_LINE_NODE as u16;
146const PM_SPLAT_NODE: u16 = pm_node_type::PM_SPLAT_NODE as u16;
147const PM_STATEMENTS_NODE: u16 = pm_node_type::PM_STATEMENTS_NODE as u16;
148const PM_STRING_NODE: u16 = pm_node_type::PM_STRING_NODE as u16;
149const PM_SUPER_NODE: u16 = pm_node_type::PM_SUPER_NODE as u16;
150const PM_SYMBOL_NODE: u16 = pm_node_type::PM_SYMBOL_NODE as u16;
151const PM_TRUE_NODE: u16 = pm_node_type::PM_TRUE_NODE as u16;
152const PM_UNDEF_NODE: u16 = pm_node_type::PM_UNDEF_NODE as u16;
153const PM_UNLESS_NODE: u16 = pm_node_type::PM_UNLESS_NODE as u16;
154const PM_UNTIL_NODE: u16 = pm_node_type::PM_UNTIL_NODE as u16;
155const PM_WHEN_NODE: u16 = pm_node_type::PM_WHEN_NODE as u16;
156const PM_WHILE_NODE: u16 = pm_node_type::PM_WHILE_NODE as u16;
157const PM_X_STRING_NODE: u16 = pm_node_type::PM_X_STRING_NODE as u16;
158const PM_YIELD_NODE: u16 = pm_node_type::PM_YIELD_NODE as u16;
159
160const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING as u16;
161const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS as u16;
162const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT as u16;
163const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT as u16;
164const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS as u16;
165const PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT: u16 = pm_array_node_flags::PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT as u16;
166const PM_CALL_NODE_FLAGS_SAFE_NAVIGATION: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION as u16;
167const PM_CALL_NODE_FLAGS_VARIABLE_CALL: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_VARIABLE_CALL as u16;
168const PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE as u16;
169const PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY as u16;
170const PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_encoding_flags::PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING as u16;
171const PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_encoding_flags::PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING as u16;
172const PM_INTEGER_BASE_FLAGS_BINARY: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_BINARY as u16;
173const PM_INTEGER_BASE_FLAGS_DECIMAL: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_DECIMAL as u16;
174const PM_INTEGER_BASE_FLAGS_OCTAL: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_OCTAL as u16;
175const PM_INTEGER_BASE_FLAGS_HEXADECIMAL: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_HEXADECIMAL as u16;
176const PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN: u16 = pm_interpolated_string_node_flags::PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN as u16;
177const PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE: u16 = pm_interpolated_string_node_flags::PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE as u16;
178const PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS: u16 = pm_keyword_hash_node_flags::PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS as u16;
179const PM_LOOP_FLAGS_BEGIN_MODIFIER: u16 = pm_loop_flags::PM_LOOP_FLAGS_BEGIN_MODIFIER as u16;
180const PM_PARAMETER_FLAGS_REPEATED_PARAMETER: u16 = pm_parameter_flags::PM_PARAMETER_FLAGS_REPEATED_PARAMETER as u16;
181const PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS: u16 = pm_parentheses_node_flags::PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS as u16;
182const PM_RANGE_FLAGS_EXCLUDE_END: u16 = pm_range_flags::PM_RANGE_FLAGS_EXCLUDE_END as u16;
183const PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE as u16;
184const PM_REGULAR_EXPRESSION_FLAGS_EXTENDED: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED as u16;
185const PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE as u16;
186const PM_REGULAR_EXPRESSION_FLAGS_ONCE: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_ONCE as u16;
187const PM_REGULAR_EXPRESSION_FLAGS_EUC_JP: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP as u16;
188const PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT as u16;
189const PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J as u16;
190const PM_REGULAR_EXPRESSION_FLAGS_UTF_8: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_UTF_8 as u16;
191const PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING as u16;
192const PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING as u16;
193const PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING as u16;
194const PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL: u16 = pm_shareable_constant_node_flags::PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL as u16;
195const PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING: u16 = pm_shareable_constant_node_flags::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING as u16;
196const PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY: u16 = pm_shareable_constant_node_flags::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY as u16;
197const PM_STRING_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_string_flags::PM_STRING_FLAGS_FORCED_UTF8_ENCODING as u16;
198const PM_STRING_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_string_flags::PM_STRING_FLAGS_FORCED_BINARY_ENCODING as u16;
199const PM_STRING_FLAGS_FROZEN: u16 = pm_string_flags::PM_STRING_FLAGS_FROZEN as u16;
200const PM_STRING_FLAGS_MUTABLE: u16 = pm_string_flags::PM_STRING_FLAGS_MUTABLE as u16;
201const PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_symbol_flags::PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING as u16;
202const PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_symbol_flags::PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING as u16;
203const PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING: u16 = pm_symbol_flags::PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING as u16;
204
205pub enum Node<'pr> {
207 AliasGlobalVariableNode {
209 parser: *const pm_parser_t,
211
212 pointer: *mut pm_alias_global_variable_node_t,
214
215 marker: PhantomData<&'pr mut pm_alias_global_variable_node_t>
217 },
218 AliasMethodNode {
220 parser: *const pm_parser_t,
222
223 pointer: *mut pm_alias_method_node_t,
225
226 marker: PhantomData<&'pr mut pm_alias_method_node_t>
228 },
229 AlternationPatternNode {
231 parser: *const pm_parser_t,
233
234 pointer: *mut pm_alternation_pattern_node_t,
236
237 marker: PhantomData<&'pr mut pm_alternation_pattern_node_t>
239 },
240 AndNode {
242 parser: *const pm_parser_t,
244
245 pointer: *mut pm_and_node_t,
247
248 marker: PhantomData<&'pr mut pm_and_node_t>
250 },
251 ArgumentsNode {
253 parser: *const pm_parser_t,
255
256 pointer: *mut pm_arguments_node_t,
258
259 marker: PhantomData<&'pr mut pm_arguments_node_t>
261 },
262 ArrayNode {
264 parser: *const pm_parser_t,
266
267 pointer: *mut pm_array_node_t,
269
270 marker: PhantomData<&'pr mut pm_array_node_t>
272 },
273 ArrayPatternNode {
275 parser: *const pm_parser_t,
277
278 pointer: *mut pm_array_pattern_node_t,
280
281 marker: PhantomData<&'pr mut pm_array_pattern_node_t>
283 },
284 AssocNode {
286 parser: *const pm_parser_t,
288
289 pointer: *mut pm_assoc_node_t,
291
292 marker: PhantomData<&'pr mut pm_assoc_node_t>
294 },
295 AssocSplatNode {
297 parser: *const pm_parser_t,
299
300 pointer: *mut pm_assoc_splat_node_t,
302
303 marker: PhantomData<&'pr mut pm_assoc_splat_node_t>
305 },
306 BackReferenceReadNode {
308 parser: *const pm_parser_t,
310
311 pointer: *mut pm_back_reference_read_node_t,
313
314 marker: PhantomData<&'pr mut pm_back_reference_read_node_t>
316 },
317 BeginNode {
319 parser: *const pm_parser_t,
321
322 pointer: *mut pm_begin_node_t,
324
325 marker: PhantomData<&'pr mut pm_begin_node_t>
327 },
328 BlockArgumentNode {
330 parser: *const pm_parser_t,
332
333 pointer: *mut pm_block_argument_node_t,
335
336 marker: PhantomData<&'pr mut pm_block_argument_node_t>
338 },
339 BlockLocalVariableNode {
341 parser: *const pm_parser_t,
343
344 pointer: *mut pm_block_local_variable_node_t,
346
347 marker: PhantomData<&'pr mut pm_block_local_variable_node_t>
349 },
350 BlockNode {
352 parser: *const pm_parser_t,
354
355 pointer: *mut pm_block_node_t,
357
358 marker: PhantomData<&'pr mut pm_block_node_t>
360 },
361 BlockParameterNode {
363 parser: *const pm_parser_t,
365
366 pointer: *mut pm_block_parameter_node_t,
368
369 marker: PhantomData<&'pr mut pm_block_parameter_node_t>
371 },
372 BlockParametersNode {
374 parser: *const pm_parser_t,
376
377 pointer: *mut pm_block_parameters_node_t,
379
380 marker: PhantomData<&'pr mut pm_block_parameters_node_t>
382 },
383 BreakNode {
385 parser: *const pm_parser_t,
387
388 pointer: *mut pm_break_node_t,
390
391 marker: PhantomData<&'pr mut pm_break_node_t>
393 },
394 CallAndWriteNode {
396 parser: *const pm_parser_t,
398
399 pointer: *mut pm_call_and_write_node_t,
401
402 marker: PhantomData<&'pr mut pm_call_and_write_node_t>
404 },
405 CallNode {
407 parser: *const pm_parser_t,
409
410 pointer: *mut pm_call_node_t,
412
413 marker: PhantomData<&'pr mut pm_call_node_t>
415 },
416 CallOperatorWriteNode {
418 parser: *const pm_parser_t,
420
421 pointer: *mut pm_call_operator_write_node_t,
423
424 marker: PhantomData<&'pr mut pm_call_operator_write_node_t>
426 },
427 CallOrWriteNode {
429 parser: *const pm_parser_t,
431
432 pointer: *mut pm_call_or_write_node_t,
434
435 marker: PhantomData<&'pr mut pm_call_or_write_node_t>
437 },
438 CallTargetNode {
440 parser: *const pm_parser_t,
442
443 pointer: *mut pm_call_target_node_t,
445
446 marker: PhantomData<&'pr mut pm_call_target_node_t>
448 },
449 CapturePatternNode {
451 parser: *const pm_parser_t,
453
454 pointer: *mut pm_capture_pattern_node_t,
456
457 marker: PhantomData<&'pr mut pm_capture_pattern_node_t>
459 },
460 CaseMatchNode {
462 parser: *const pm_parser_t,
464
465 pointer: *mut pm_case_match_node_t,
467
468 marker: PhantomData<&'pr mut pm_case_match_node_t>
470 },
471 CaseNode {
473 parser: *const pm_parser_t,
475
476 pointer: *mut pm_case_node_t,
478
479 marker: PhantomData<&'pr mut pm_case_node_t>
481 },
482 ClassNode {
484 parser: *const pm_parser_t,
486
487 pointer: *mut pm_class_node_t,
489
490 marker: PhantomData<&'pr mut pm_class_node_t>
492 },
493 ClassVariableAndWriteNode {
495 parser: *const pm_parser_t,
497
498 pointer: *mut pm_class_variable_and_write_node_t,
500
501 marker: PhantomData<&'pr mut pm_class_variable_and_write_node_t>
503 },
504 ClassVariableOperatorWriteNode {
506 parser: *const pm_parser_t,
508
509 pointer: *mut pm_class_variable_operator_write_node_t,
511
512 marker: PhantomData<&'pr mut pm_class_variable_operator_write_node_t>
514 },
515 ClassVariableOrWriteNode {
517 parser: *const pm_parser_t,
519
520 pointer: *mut pm_class_variable_or_write_node_t,
522
523 marker: PhantomData<&'pr mut pm_class_variable_or_write_node_t>
525 },
526 ClassVariableReadNode {
528 parser: *const pm_parser_t,
530
531 pointer: *mut pm_class_variable_read_node_t,
533
534 marker: PhantomData<&'pr mut pm_class_variable_read_node_t>
536 },
537 ClassVariableTargetNode {
539 parser: *const pm_parser_t,
541
542 pointer: *mut pm_class_variable_target_node_t,
544
545 marker: PhantomData<&'pr mut pm_class_variable_target_node_t>
547 },
548 ClassVariableWriteNode {
550 parser: *const pm_parser_t,
552
553 pointer: *mut pm_class_variable_write_node_t,
555
556 marker: PhantomData<&'pr mut pm_class_variable_write_node_t>
558 },
559 ConstantAndWriteNode {
561 parser: *const pm_parser_t,
563
564 pointer: *mut pm_constant_and_write_node_t,
566
567 marker: PhantomData<&'pr mut pm_constant_and_write_node_t>
569 },
570 ConstantOperatorWriteNode {
572 parser: *const pm_parser_t,
574
575 pointer: *mut pm_constant_operator_write_node_t,
577
578 marker: PhantomData<&'pr mut pm_constant_operator_write_node_t>
580 },
581 ConstantOrWriteNode {
583 parser: *const pm_parser_t,
585
586 pointer: *mut pm_constant_or_write_node_t,
588
589 marker: PhantomData<&'pr mut pm_constant_or_write_node_t>
591 },
592 ConstantPathAndWriteNode {
594 parser: *const pm_parser_t,
596
597 pointer: *mut pm_constant_path_and_write_node_t,
599
600 marker: PhantomData<&'pr mut pm_constant_path_and_write_node_t>
602 },
603 ConstantPathNode {
605 parser: *const pm_parser_t,
607
608 pointer: *mut pm_constant_path_node_t,
610
611 marker: PhantomData<&'pr mut pm_constant_path_node_t>
613 },
614 ConstantPathOperatorWriteNode {
616 parser: *const pm_parser_t,
618
619 pointer: *mut pm_constant_path_operator_write_node_t,
621
622 marker: PhantomData<&'pr mut pm_constant_path_operator_write_node_t>
624 },
625 ConstantPathOrWriteNode {
627 parser: *const pm_parser_t,
629
630 pointer: *mut pm_constant_path_or_write_node_t,
632
633 marker: PhantomData<&'pr mut pm_constant_path_or_write_node_t>
635 },
636 ConstantPathTargetNode {
638 parser: *const pm_parser_t,
640
641 pointer: *mut pm_constant_path_target_node_t,
643
644 marker: PhantomData<&'pr mut pm_constant_path_target_node_t>
646 },
647 ConstantPathWriteNode {
649 parser: *const pm_parser_t,
651
652 pointer: *mut pm_constant_path_write_node_t,
654
655 marker: PhantomData<&'pr mut pm_constant_path_write_node_t>
657 },
658 ConstantReadNode {
660 parser: *const pm_parser_t,
662
663 pointer: *mut pm_constant_read_node_t,
665
666 marker: PhantomData<&'pr mut pm_constant_read_node_t>
668 },
669 ConstantTargetNode {
671 parser: *const pm_parser_t,
673
674 pointer: *mut pm_constant_target_node_t,
676
677 marker: PhantomData<&'pr mut pm_constant_target_node_t>
679 },
680 ConstantWriteNode {
682 parser: *const pm_parser_t,
684
685 pointer: *mut pm_constant_write_node_t,
687
688 marker: PhantomData<&'pr mut pm_constant_write_node_t>
690 },
691 DefNode {
693 parser: *const pm_parser_t,
695
696 pointer: *mut pm_def_node_t,
698
699 marker: PhantomData<&'pr mut pm_def_node_t>
701 },
702 DefinedNode {
704 parser: *const pm_parser_t,
706
707 pointer: *mut pm_defined_node_t,
709
710 marker: PhantomData<&'pr mut pm_defined_node_t>
712 },
713 ElseNode {
715 parser: *const pm_parser_t,
717
718 pointer: *mut pm_else_node_t,
720
721 marker: PhantomData<&'pr mut pm_else_node_t>
723 },
724 EmbeddedStatementsNode {
726 parser: *const pm_parser_t,
728
729 pointer: *mut pm_embedded_statements_node_t,
731
732 marker: PhantomData<&'pr mut pm_embedded_statements_node_t>
734 },
735 EmbeddedVariableNode {
737 parser: *const pm_parser_t,
739
740 pointer: *mut pm_embedded_variable_node_t,
742
743 marker: PhantomData<&'pr mut pm_embedded_variable_node_t>
745 },
746 EnsureNode {
748 parser: *const pm_parser_t,
750
751 pointer: *mut pm_ensure_node_t,
753
754 marker: PhantomData<&'pr mut pm_ensure_node_t>
756 },
757 ErrorRecoveryNode {
759 parser: *const pm_parser_t,
761
762 pointer: *mut pm_error_recovery_node_t,
764
765 marker: PhantomData<&'pr mut pm_error_recovery_node_t>
767 },
768 FalseNode {
770 parser: *const pm_parser_t,
772
773 pointer: *mut pm_false_node_t,
775
776 marker: PhantomData<&'pr mut pm_false_node_t>
778 },
779 FindPatternNode {
781 parser: *const pm_parser_t,
783
784 pointer: *mut pm_find_pattern_node_t,
786
787 marker: PhantomData<&'pr mut pm_find_pattern_node_t>
789 },
790 FlipFlopNode {
792 parser: *const pm_parser_t,
794
795 pointer: *mut pm_flip_flop_node_t,
797
798 marker: PhantomData<&'pr mut pm_flip_flop_node_t>
800 },
801 FloatNode {
803 parser: *const pm_parser_t,
805
806 pointer: *mut pm_float_node_t,
808
809 marker: PhantomData<&'pr mut pm_float_node_t>
811 },
812 ForNode {
814 parser: *const pm_parser_t,
816
817 pointer: *mut pm_for_node_t,
819
820 marker: PhantomData<&'pr mut pm_for_node_t>
822 },
823 ForwardingArgumentsNode {
825 parser: *const pm_parser_t,
827
828 pointer: *mut pm_forwarding_arguments_node_t,
830
831 marker: PhantomData<&'pr mut pm_forwarding_arguments_node_t>
833 },
834 ForwardingParameterNode {
836 parser: *const pm_parser_t,
838
839 pointer: *mut pm_forwarding_parameter_node_t,
841
842 marker: PhantomData<&'pr mut pm_forwarding_parameter_node_t>
844 },
845 ForwardingSuperNode {
847 parser: *const pm_parser_t,
849
850 pointer: *mut pm_forwarding_super_node_t,
852
853 marker: PhantomData<&'pr mut pm_forwarding_super_node_t>
855 },
856 GlobalVariableAndWriteNode {
858 parser: *const pm_parser_t,
860
861 pointer: *mut pm_global_variable_and_write_node_t,
863
864 marker: PhantomData<&'pr mut pm_global_variable_and_write_node_t>
866 },
867 GlobalVariableOperatorWriteNode {
869 parser: *const pm_parser_t,
871
872 pointer: *mut pm_global_variable_operator_write_node_t,
874
875 marker: PhantomData<&'pr mut pm_global_variable_operator_write_node_t>
877 },
878 GlobalVariableOrWriteNode {
880 parser: *const pm_parser_t,
882
883 pointer: *mut pm_global_variable_or_write_node_t,
885
886 marker: PhantomData<&'pr mut pm_global_variable_or_write_node_t>
888 },
889 GlobalVariableReadNode {
891 parser: *const pm_parser_t,
893
894 pointer: *mut pm_global_variable_read_node_t,
896
897 marker: PhantomData<&'pr mut pm_global_variable_read_node_t>
899 },
900 GlobalVariableTargetNode {
902 parser: *const pm_parser_t,
904
905 pointer: *mut pm_global_variable_target_node_t,
907
908 marker: PhantomData<&'pr mut pm_global_variable_target_node_t>
910 },
911 GlobalVariableWriteNode {
913 parser: *const pm_parser_t,
915
916 pointer: *mut pm_global_variable_write_node_t,
918
919 marker: PhantomData<&'pr mut pm_global_variable_write_node_t>
921 },
922 HashNode {
924 parser: *const pm_parser_t,
926
927 pointer: *mut pm_hash_node_t,
929
930 marker: PhantomData<&'pr mut pm_hash_node_t>
932 },
933 HashPatternNode {
935 parser: *const pm_parser_t,
937
938 pointer: *mut pm_hash_pattern_node_t,
940
941 marker: PhantomData<&'pr mut pm_hash_pattern_node_t>
943 },
944 IfNode {
946 parser: *const pm_parser_t,
948
949 pointer: *mut pm_if_node_t,
951
952 marker: PhantomData<&'pr mut pm_if_node_t>
954 },
955 ImaginaryNode {
957 parser: *const pm_parser_t,
959
960 pointer: *mut pm_imaginary_node_t,
962
963 marker: PhantomData<&'pr mut pm_imaginary_node_t>
965 },
966 ImplicitNode {
968 parser: *const pm_parser_t,
970
971 pointer: *mut pm_implicit_node_t,
973
974 marker: PhantomData<&'pr mut pm_implicit_node_t>
976 },
977 ImplicitRestNode {
979 parser: *const pm_parser_t,
981
982 pointer: *mut pm_implicit_rest_node_t,
984
985 marker: PhantomData<&'pr mut pm_implicit_rest_node_t>
987 },
988 InNode {
990 parser: *const pm_parser_t,
992
993 pointer: *mut pm_in_node_t,
995
996 marker: PhantomData<&'pr mut pm_in_node_t>
998 },
999 IndexAndWriteNode {
1001 parser: *const pm_parser_t,
1003
1004 pointer: *mut pm_index_and_write_node_t,
1006
1007 marker: PhantomData<&'pr mut pm_index_and_write_node_t>
1009 },
1010 IndexOperatorWriteNode {
1012 parser: *const pm_parser_t,
1014
1015 pointer: *mut pm_index_operator_write_node_t,
1017
1018 marker: PhantomData<&'pr mut pm_index_operator_write_node_t>
1020 },
1021 IndexOrWriteNode {
1023 parser: *const pm_parser_t,
1025
1026 pointer: *mut pm_index_or_write_node_t,
1028
1029 marker: PhantomData<&'pr mut pm_index_or_write_node_t>
1031 },
1032 IndexTargetNode {
1034 parser: *const pm_parser_t,
1036
1037 pointer: *mut pm_index_target_node_t,
1039
1040 marker: PhantomData<&'pr mut pm_index_target_node_t>
1042 },
1043 InstanceVariableAndWriteNode {
1045 parser: *const pm_parser_t,
1047
1048 pointer: *mut pm_instance_variable_and_write_node_t,
1050
1051 marker: PhantomData<&'pr mut pm_instance_variable_and_write_node_t>
1053 },
1054 InstanceVariableOperatorWriteNode {
1056 parser: *const pm_parser_t,
1058
1059 pointer: *mut pm_instance_variable_operator_write_node_t,
1061
1062 marker: PhantomData<&'pr mut pm_instance_variable_operator_write_node_t>
1064 },
1065 InstanceVariableOrWriteNode {
1067 parser: *const pm_parser_t,
1069
1070 pointer: *mut pm_instance_variable_or_write_node_t,
1072
1073 marker: PhantomData<&'pr mut pm_instance_variable_or_write_node_t>
1075 },
1076 InstanceVariableReadNode {
1078 parser: *const pm_parser_t,
1080
1081 pointer: *mut pm_instance_variable_read_node_t,
1083
1084 marker: PhantomData<&'pr mut pm_instance_variable_read_node_t>
1086 },
1087 InstanceVariableTargetNode {
1089 parser: *const pm_parser_t,
1091
1092 pointer: *mut pm_instance_variable_target_node_t,
1094
1095 marker: PhantomData<&'pr mut pm_instance_variable_target_node_t>
1097 },
1098 InstanceVariableWriteNode {
1100 parser: *const pm_parser_t,
1102
1103 pointer: *mut pm_instance_variable_write_node_t,
1105
1106 marker: PhantomData<&'pr mut pm_instance_variable_write_node_t>
1108 },
1109 IntegerNode {
1111 parser: *const pm_parser_t,
1113
1114 pointer: *mut pm_integer_node_t,
1116
1117 marker: PhantomData<&'pr mut pm_integer_node_t>
1119 },
1120 InterpolatedMatchLastLineNode {
1122 parser: *const pm_parser_t,
1124
1125 pointer: *mut pm_interpolated_match_last_line_node_t,
1127
1128 marker: PhantomData<&'pr mut pm_interpolated_match_last_line_node_t>
1130 },
1131 InterpolatedRegularExpressionNode {
1133 parser: *const pm_parser_t,
1135
1136 pointer: *mut pm_interpolated_regular_expression_node_t,
1138
1139 marker: PhantomData<&'pr mut pm_interpolated_regular_expression_node_t>
1141 },
1142 InterpolatedStringNode {
1144 parser: *const pm_parser_t,
1146
1147 pointer: *mut pm_interpolated_string_node_t,
1149
1150 marker: PhantomData<&'pr mut pm_interpolated_string_node_t>
1152 },
1153 InterpolatedSymbolNode {
1155 parser: *const pm_parser_t,
1157
1158 pointer: *mut pm_interpolated_symbol_node_t,
1160
1161 marker: PhantomData<&'pr mut pm_interpolated_symbol_node_t>
1163 },
1164 InterpolatedXStringNode {
1166 parser: *const pm_parser_t,
1168
1169 pointer: *mut pm_interpolated_x_string_node_t,
1171
1172 marker: PhantomData<&'pr mut pm_interpolated_x_string_node_t>
1174 },
1175 ItLocalVariableReadNode {
1177 parser: *const pm_parser_t,
1179
1180 pointer: *mut pm_it_local_variable_read_node_t,
1182
1183 marker: PhantomData<&'pr mut pm_it_local_variable_read_node_t>
1185 },
1186 ItParametersNode {
1188 parser: *const pm_parser_t,
1190
1191 pointer: *mut pm_it_parameters_node_t,
1193
1194 marker: PhantomData<&'pr mut pm_it_parameters_node_t>
1196 },
1197 KeywordHashNode {
1199 parser: *const pm_parser_t,
1201
1202 pointer: *mut pm_keyword_hash_node_t,
1204
1205 marker: PhantomData<&'pr mut pm_keyword_hash_node_t>
1207 },
1208 KeywordRestParameterNode {
1210 parser: *const pm_parser_t,
1212
1213 pointer: *mut pm_keyword_rest_parameter_node_t,
1215
1216 marker: PhantomData<&'pr mut pm_keyword_rest_parameter_node_t>
1218 },
1219 LambdaNode {
1221 parser: *const pm_parser_t,
1223
1224 pointer: *mut pm_lambda_node_t,
1226
1227 marker: PhantomData<&'pr mut pm_lambda_node_t>
1229 },
1230 LocalVariableAndWriteNode {
1232 parser: *const pm_parser_t,
1234
1235 pointer: *mut pm_local_variable_and_write_node_t,
1237
1238 marker: PhantomData<&'pr mut pm_local_variable_and_write_node_t>
1240 },
1241 LocalVariableOperatorWriteNode {
1243 parser: *const pm_parser_t,
1245
1246 pointer: *mut pm_local_variable_operator_write_node_t,
1248
1249 marker: PhantomData<&'pr mut pm_local_variable_operator_write_node_t>
1251 },
1252 LocalVariableOrWriteNode {
1254 parser: *const pm_parser_t,
1256
1257 pointer: *mut pm_local_variable_or_write_node_t,
1259
1260 marker: PhantomData<&'pr mut pm_local_variable_or_write_node_t>
1262 },
1263 LocalVariableReadNode {
1265 parser: *const pm_parser_t,
1267
1268 pointer: *mut pm_local_variable_read_node_t,
1270
1271 marker: PhantomData<&'pr mut pm_local_variable_read_node_t>
1273 },
1274 LocalVariableTargetNode {
1276 parser: *const pm_parser_t,
1278
1279 pointer: *mut pm_local_variable_target_node_t,
1281
1282 marker: PhantomData<&'pr mut pm_local_variable_target_node_t>
1284 },
1285 LocalVariableWriteNode {
1287 parser: *const pm_parser_t,
1289
1290 pointer: *mut pm_local_variable_write_node_t,
1292
1293 marker: PhantomData<&'pr mut pm_local_variable_write_node_t>
1295 },
1296 MatchLastLineNode {
1298 parser: *const pm_parser_t,
1300
1301 pointer: *mut pm_match_last_line_node_t,
1303
1304 marker: PhantomData<&'pr mut pm_match_last_line_node_t>
1306 },
1307 MatchPredicateNode {
1309 parser: *const pm_parser_t,
1311
1312 pointer: *mut pm_match_predicate_node_t,
1314
1315 marker: PhantomData<&'pr mut pm_match_predicate_node_t>
1317 },
1318 MatchRequiredNode {
1320 parser: *const pm_parser_t,
1322
1323 pointer: *mut pm_match_required_node_t,
1325
1326 marker: PhantomData<&'pr mut pm_match_required_node_t>
1328 },
1329 MatchWriteNode {
1331 parser: *const pm_parser_t,
1333
1334 pointer: *mut pm_match_write_node_t,
1336
1337 marker: PhantomData<&'pr mut pm_match_write_node_t>
1339 },
1340 ModuleNode {
1342 parser: *const pm_parser_t,
1344
1345 pointer: *mut pm_module_node_t,
1347
1348 marker: PhantomData<&'pr mut pm_module_node_t>
1350 },
1351 MultiTargetNode {
1353 parser: *const pm_parser_t,
1355
1356 pointer: *mut pm_multi_target_node_t,
1358
1359 marker: PhantomData<&'pr mut pm_multi_target_node_t>
1361 },
1362 MultiWriteNode {
1364 parser: *const pm_parser_t,
1366
1367 pointer: *mut pm_multi_write_node_t,
1369
1370 marker: PhantomData<&'pr mut pm_multi_write_node_t>
1372 },
1373 NextNode {
1375 parser: *const pm_parser_t,
1377
1378 pointer: *mut pm_next_node_t,
1380
1381 marker: PhantomData<&'pr mut pm_next_node_t>
1383 },
1384 NilNode {
1386 parser: *const pm_parser_t,
1388
1389 pointer: *mut pm_nil_node_t,
1391
1392 marker: PhantomData<&'pr mut pm_nil_node_t>
1394 },
1395 NoBlockParameterNode {
1397 parser: *const pm_parser_t,
1399
1400 pointer: *mut pm_no_block_parameter_node_t,
1402
1403 marker: PhantomData<&'pr mut pm_no_block_parameter_node_t>
1405 },
1406 NoKeywordsParameterNode {
1408 parser: *const pm_parser_t,
1410
1411 pointer: *mut pm_no_keywords_parameter_node_t,
1413
1414 marker: PhantomData<&'pr mut pm_no_keywords_parameter_node_t>
1416 },
1417 NumberedParametersNode {
1419 parser: *const pm_parser_t,
1421
1422 pointer: *mut pm_numbered_parameters_node_t,
1424
1425 marker: PhantomData<&'pr mut pm_numbered_parameters_node_t>
1427 },
1428 NumberedReferenceReadNode {
1430 parser: *const pm_parser_t,
1432
1433 pointer: *mut pm_numbered_reference_read_node_t,
1435
1436 marker: PhantomData<&'pr mut pm_numbered_reference_read_node_t>
1438 },
1439 OptionalKeywordParameterNode {
1441 parser: *const pm_parser_t,
1443
1444 pointer: *mut pm_optional_keyword_parameter_node_t,
1446
1447 marker: PhantomData<&'pr mut pm_optional_keyword_parameter_node_t>
1449 },
1450 OptionalParameterNode {
1452 parser: *const pm_parser_t,
1454
1455 pointer: *mut pm_optional_parameter_node_t,
1457
1458 marker: PhantomData<&'pr mut pm_optional_parameter_node_t>
1460 },
1461 OrNode {
1463 parser: *const pm_parser_t,
1465
1466 pointer: *mut pm_or_node_t,
1468
1469 marker: PhantomData<&'pr mut pm_or_node_t>
1471 },
1472 ParametersNode {
1474 parser: *const pm_parser_t,
1476
1477 pointer: *mut pm_parameters_node_t,
1479
1480 marker: PhantomData<&'pr mut pm_parameters_node_t>
1482 },
1483 ParenthesesNode {
1485 parser: *const pm_parser_t,
1487
1488 pointer: *mut pm_parentheses_node_t,
1490
1491 marker: PhantomData<&'pr mut pm_parentheses_node_t>
1493 },
1494 PinnedExpressionNode {
1496 parser: *const pm_parser_t,
1498
1499 pointer: *mut pm_pinned_expression_node_t,
1501
1502 marker: PhantomData<&'pr mut pm_pinned_expression_node_t>
1504 },
1505 PinnedVariableNode {
1507 parser: *const pm_parser_t,
1509
1510 pointer: *mut pm_pinned_variable_node_t,
1512
1513 marker: PhantomData<&'pr mut pm_pinned_variable_node_t>
1515 },
1516 PostExecutionNode {
1518 parser: *const pm_parser_t,
1520
1521 pointer: *mut pm_post_execution_node_t,
1523
1524 marker: PhantomData<&'pr mut pm_post_execution_node_t>
1526 },
1527 PreExecutionNode {
1529 parser: *const pm_parser_t,
1531
1532 pointer: *mut pm_pre_execution_node_t,
1534
1535 marker: PhantomData<&'pr mut pm_pre_execution_node_t>
1537 },
1538 ProgramNode {
1540 parser: *const pm_parser_t,
1542
1543 pointer: *mut pm_program_node_t,
1545
1546 marker: PhantomData<&'pr mut pm_program_node_t>
1548 },
1549 RangeNode {
1551 parser: *const pm_parser_t,
1553
1554 pointer: *mut pm_range_node_t,
1556
1557 marker: PhantomData<&'pr mut pm_range_node_t>
1559 },
1560 RationalNode {
1562 parser: *const pm_parser_t,
1564
1565 pointer: *mut pm_rational_node_t,
1567
1568 marker: PhantomData<&'pr mut pm_rational_node_t>
1570 },
1571 RedoNode {
1573 parser: *const pm_parser_t,
1575
1576 pointer: *mut pm_redo_node_t,
1578
1579 marker: PhantomData<&'pr mut pm_redo_node_t>
1581 },
1582 RegularExpressionNode {
1584 parser: *const pm_parser_t,
1586
1587 pointer: *mut pm_regular_expression_node_t,
1589
1590 marker: PhantomData<&'pr mut pm_regular_expression_node_t>
1592 },
1593 RequiredKeywordParameterNode {
1595 parser: *const pm_parser_t,
1597
1598 pointer: *mut pm_required_keyword_parameter_node_t,
1600
1601 marker: PhantomData<&'pr mut pm_required_keyword_parameter_node_t>
1603 },
1604 RequiredParameterNode {
1606 parser: *const pm_parser_t,
1608
1609 pointer: *mut pm_required_parameter_node_t,
1611
1612 marker: PhantomData<&'pr mut pm_required_parameter_node_t>
1614 },
1615 RescueModifierNode {
1617 parser: *const pm_parser_t,
1619
1620 pointer: *mut pm_rescue_modifier_node_t,
1622
1623 marker: PhantomData<&'pr mut pm_rescue_modifier_node_t>
1625 },
1626 RescueNode {
1628 parser: *const pm_parser_t,
1630
1631 pointer: *mut pm_rescue_node_t,
1633
1634 marker: PhantomData<&'pr mut pm_rescue_node_t>
1636 },
1637 RestParameterNode {
1639 parser: *const pm_parser_t,
1641
1642 pointer: *mut pm_rest_parameter_node_t,
1644
1645 marker: PhantomData<&'pr mut pm_rest_parameter_node_t>
1647 },
1648 RetryNode {
1650 parser: *const pm_parser_t,
1652
1653 pointer: *mut pm_retry_node_t,
1655
1656 marker: PhantomData<&'pr mut pm_retry_node_t>
1658 },
1659 ReturnNode {
1661 parser: *const pm_parser_t,
1663
1664 pointer: *mut pm_return_node_t,
1666
1667 marker: PhantomData<&'pr mut pm_return_node_t>
1669 },
1670 SelfNode {
1672 parser: *const pm_parser_t,
1674
1675 pointer: *mut pm_self_node_t,
1677
1678 marker: PhantomData<&'pr mut pm_self_node_t>
1680 },
1681 ShareableConstantNode {
1683 parser: *const pm_parser_t,
1685
1686 pointer: *mut pm_shareable_constant_node_t,
1688
1689 marker: PhantomData<&'pr mut pm_shareable_constant_node_t>
1691 },
1692 SingletonClassNode {
1694 parser: *const pm_parser_t,
1696
1697 pointer: *mut pm_singleton_class_node_t,
1699
1700 marker: PhantomData<&'pr mut pm_singleton_class_node_t>
1702 },
1703 SourceEncodingNode {
1705 parser: *const pm_parser_t,
1707
1708 pointer: *mut pm_source_encoding_node_t,
1710
1711 marker: PhantomData<&'pr mut pm_source_encoding_node_t>
1713 },
1714 SourceFileNode {
1716 parser: *const pm_parser_t,
1718
1719 pointer: *mut pm_source_file_node_t,
1721
1722 marker: PhantomData<&'pr mut pm_source_file_node_t>
1724 },
1725 SourceLineNode {
1727 parser: *const pm_parser_t,
1729
1730 pointer: *mut pm_source_line_node_t,
1732
1733 marker: PhantomData<&'pr mut pm_source_line_node_t>
1735 },
1736 SplatNode {
1738 parser: *const pm_parser_t,
1740
1741 pointer: *mut pm_splat_node_t,
1743
1744 marker: PhantomData<&'pr mut pm_splat_node_t>
1746 },
1747 StatementsNode {
1749 parser: *const pm_parser_t,
1751
1752 pointer: *mut pm_statements_node_t,
1754
1755 marker: PhantomData<&'pr mut pm_statements_node_t>
1757 },
1758 StringNode {
1760 parser: *const pm_parser_t,
1762
1763 pointer: *mut pm_string_node_t,
1765
1766 marker: PhantomData<&'pr mut pm_string_node_t>
1768 },
1769 SuperNode {
1771 parser: *const pm_parser_t,
1773
1774 pointer: *mut pm_super_node_t,
1776
1777 marker: PhantomData<&'pr mut pm_super_node_t>
1779 },
1780 SymbolNode {
1782 parser: *const pm_parser_t,
1784
1785 pointer: *mut pm_symbol_node_t,
1787
1788 marker: PhantomData<&'pr mut pm_symbol_node_t>
1790 },
1791 TrueNode {
1793 parser: *const pm_parser_t,
1795
1796 pointer: *mut pm_true_node_t,
1798
1799 marker: PhantomData<&'pr mut pm_true_node_t>
1801 },
1802 UndefNode {
1804 parser: *const pm_parser_t,
1806
1807 pointer: *mut pm_undef_node_t,
1809
1810 marker: PhantomData<&'pr mut pm_undef_node_t>
1812 },
1813 UnlessNode {
1815 parser: *const pm_parser_t,
1817
1818 pointer: *mut pm_unless_node_t,
1820
1821 marker: PhantomData<&'pr mut pm_unless_node_t>
1823 },
1824 UntilNode {
1826 parser: *const pm_parser_t,
1828
1829 pointer: *mut pm_until_node_t,
1831
1832 marker: PhantomData<&'pr mut pm_until_node_t>
1834 },
1835 WhenNode {
1837 parser: *const pm_parser_t,
1839
1840 pointer: *mut pm_when_node_t,
1842
1843 marker: PhantomData<&'pr mut pm_when_node_t>
1845 },
1846 WhileNode {
1848 parser: *const pm_parser_t,
1850
1851 pointer: *mut pm_while_node_t,
1853
1854 marker: PhantomData<&'pr mut pm_while_node_t>
1856 },
1857 XStringNode {
1859 parser: *const pm_parser_t,
1861
1862 pointer: *mut pm_x_string_node_t,
1864
1865 marker: PhantomData<&'pr mut pm_x_string_node_t>
1867 },
1868 YieldNode {
1870 parser: *const pm_parser_t,
1872
1873 pointer: *mut pm_yield_node_t,
1875
1876 marker: PhantomData<&'pr mut pm_yield_node_t>
1878 },
1879}
1880
1881
1882impl<'pr> Node<'pr> {
1883 #[allow(clippy::not_unsafe_ptr_arg_deref)]
1890 #[allow(clippy::cast_ptr_alignment)]
1891 pub(crate) fn new(parser: *const pm_parser_t, node: *mut pm_node_t) -> Self {
1892 match unsafe { (*node).type_ } {
1893 PM_ALIAS_GLOBAL_VARIABLE_NODE => Self::AliasGlobalVariableNode { parser, pointer: node.cast::<pm_alias_global_variable_node_t>(), marker: PhantomData },
1894 PM_ALIAS_METHOD_NODE => Self::AliasMethodNode { parser, pointer: node.cast::<pm_alias_method_node_t>(), marker: PhantomData },
1895 PM_ALTERNATION_PATTERN_NODE => Self::AlternationPatternNode { parser, pointer: node.cast::<pm_alternation_pattern_node_t>(), marker: PhantomData },
1896 PM_AND_NODE => Self::AndNode { parser, pointer: node.cast::<pm_and_node_t>(), marker: PhantomData },
1897 PM_ARGUMENTS_NODE => Self::ArgumentsNode { parser, pointer: node.cast::<pm_arguments_node_t>(), marker: PhantomData },
1898 PM_ARRAY_NODE => Self::ArrayNode { parser, pointer: node.cast::<pm_array_node_t>(), marker: PhantomData },
1899 PM_ARRAY_PATTERN_NODE => Self::ArrayPatternNode { parser, pointer: node.cast::<pm_array_pattern_node_t>(), marker: PhantomData },
1900 PM_ASSOC_NODE => Self::AssocNode { parser, pointer: node.cast::<pm_assoc_node_t>(), marker: PhantomData },
1901 PM_ASSOC_SPLAT_NODE => Self::AssocSplatNode { parser, pointer: node.cast::<pm_assoc_splat_node_t>(), marker: PhantomData },
1902 PM_BACK_REFERENCE_READ_NODE => Self::BackReferenceReadNode { parser, pointer: node.cast::<pm_back_reference_read_node_t>(), marker: PhantomData },
1903 PM_BEGIN_NODE => Self::BeginNode { parser, pointer: node.cast::<pm_begin_node_t>(), marker: PhantomData },
1904 PM_BLOCK_ARGUMENT_NODE => Self::BlockArgumentNode { parser, pointer: node.cast::<pm_block_argument_node_t>(), marker: PhantomData },
1905 PM_BLOCK_LOCAL_VARIABLE_NODE => Self::BlockLocalVariableNode { parser, pointer: node.cast::<pm_block_local_variable_node_t>(), marker: PhantomData },
1906 PM_BLOCK_NODE => Self::BlockNode { parser, pointer: node.cast::<pm_block_node_t>(), marker: PhantomData },
1907 PM_BLOCK_PARAMETER_NODE => Self::BlockParameterNode { parser, pointer: node.cast::<pm_block_parameter_node_t>(), marker: PhantomData },
1908 PM_BLOCK_PARAMETERS_NODE => Self::BlockParametersNode { parser, pointer: node.cast::<pm_block_parameters_node_t>(), marker: PhantomData },
1909 PM_BREAK_NODE => Self::BreakNode { parser, pointer: node.cast::<pm_break_node_t>(), marker: PhantomData },
1910 PM_CALL_AND_WRITE_NODE => Self::CallAndWriteNode { parser, pointer: node.cast::<pm_call_and_write_node_t>(), marker: PhantomData },
1911 PM_CALL_NODE => Self::CallNode { parser, pointer: node.cast::<pm_call_node_t>(), marker: PhantomData },
1912 PM_CALL_OPERATOR_WRITE_NODE => Self::CallOperatorWriteNode { parser, pointer: node.cast::<pm_call_operator_write_node_t>(), marker: PhantomData },
1913 PM_CALL_OR_WRITE_NODE => Self::CallOrWriteNode { parser, pointer: node.cast::<pm_call_or_write_node_t>(), marker: PhantomData },
1914 PM_CALL_TARGET_NODE => Self::CallTargetNode { parser, pointer: node.cast::<pm_call_target_node_t>(), marker: PhantomData },
1915 PM_CAPTURE_PATTERN_NODE => Self::CapturePatternNode { parser, pointer: node.cast::<pm_capture_pattern_node_t>(), marker: PhantomData },
1916 PM_CASE_MATCH_NODE => Self::CaseMatchNode { parser, pointer: node.cast::<pm_case_match_node_t>(), marker: PhantomData },
1917 PM_CASE_NODE => Self::CaseNode { parser, pointer: node.cast::<pm_case_node_t>(), marker: PhantomData },
1918 PM_CLASS_NODE => Self::ClassNode { parser, pointer: node.cast::<pm_class_node_t>(), marker: PhantomData },
1919 PM_CLASS_VARIABLE_AND_WRITE_NODE => Self::ClassVariableAndWriteNode { parser, pointer: node.cast::<pm_class_variable_and_write_node_t>(), marker: PhantomData },
1920 PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE => Self::ClassVariableOperatorWriteNode { parser, pointer: node.cast::<pm_class_variable_operator_write_node_t>(), marker: PhantomData },
1921 PM_CLASS_VARIABLE_OR_WRITE_NODE => Self::ClassVariableOrWriteNode { parser, pointer: node.cast::<pm_class_variable_or_write_node_t>(), marker: PhantomData },
1922 PM_CLASS_VARIABLE_READ_NODE => Self::ClassVariableReadNode { parser, pointer: node.cast::<pm_class_variable_read_node_t>(), marker: PhantomData },
1923 PM_CLASS_VARIABLE_TARGET_NODE => Self::ClassVariableTargetNode { parser, pointer: node.cast::<pm_class_variable_target_node_t>(), marker: PhantomData },
1924 PM_CLASS_VARIABLE_WRITE_NODE => Self::ClassVariableWriteNode { parser, pointer: node.cast::<pm_class_variable_write_node_t>(), marker: PhantomData },
1925 PM_CONSTANT_AND_WRITE_NODE => Self::ConstantAndWriteNode { parser, pointer: node.cast::<pm_constant_and_write_node_t>(), marker: PhantomData },
1926 PM_CONSTANT_OPERATOR_WRITE_NODE => Self::ConstantOperatorWriteNode { parser, pointer: node.cast::<pm_constant_operator_write_node_t>(), marker: PhantomData },
1927 PM_CONSTANT_OR_WRITE_NODE => Self::ConstantOrWriteNode { parser, pointer: node.cast::<pm_constant_or_write_node_t>(), marker: PhantomData },
1928 PM_CONSTANT_PATH_AND_WRITE_NODE => Self::ConstantPathAndWriteNode { parser, pointer: node.cast::<pm_constant_path_and_write_node_t>(), marker: PhantomData },
1929 PM_CONSTANT_PATH_NODE => Self::ConstantPathNode { parser, pointer: node.cast::<pm_constant_path_node_t>(), marker: PhantomData },
1930 PM_CONSTANT_PATH_OPERATOR_WRITE_NODE => Self::ConstantPathOperatorWriteNode { parser, pointer: node.cast::<pm_constant_path_operator_write_node_t>(), marker: PhantomData },
1931 PM_CONSTANT_PATH_OR_WRITE_NODE => Self::ConstantPathOrWriteNode { parser, pointer: node.cast::<pm_constant_path_or_write_node_t>(), marker: PhantomData },
1932 PM_CONSTANT_PATH_TARGET_NODE => Self::ConstantPathTargetNode { parser, pointer: node.cast::<pm_constant_path_target_node_t>(), marker: PhantomData },
1933 PM_CONSTANT_PATH_WRITE_NODE => Self::ConstantPathWriteNode { parser, pointer: node.cast::<pm_constant_path_write_node_t>(), marker: PhantomData },
1934 PM_CONSTANT_READ_NODE => Self::ConstantReadNode { parser, pointer: node.cast::<pm_constant_read_node_t>(), marker: PhantomData },
1935 PM_CONSTANT_TARGET_NODE => Self::ConstantTargetNode { parser, pointer: node.cast::<pm_constant_target_node_t>(), marker: PhantomData },
1936 PM_CONSTANT_WRITE_NODE => Self::ConstantWriteNode { parser, pointer: node.cast::<pm_constant_write_node_t>(), marker: PhantomData },
1937 PM_DEF_NODE => Self::DefNode { parser, pointer: node.cast::<pm_def_node_t>(), marker: PhantomData },
1938 PM_DEFINED_NODE => Self::DefinedNode { parser, pointer: node.cast::<pm_defined_node_t>(), marker: PhantomData },
1939 PM_ELSE_NODE => Self::ElseNode { parser, pointer: node.cast::<pm_else_node_t>(), marker: PhantomData },
1940 PM_EMBEDDED_STATEMENTS_NODE => Self::EmbeddedStatementsNode { parser, pointer: node.cast::<pm_embedded_statements_node_t>(), marker: PhantomData },
1941 PM_EMBEDDED_VARIABLE_NODE => Self::EmbeddedVariableNode { parser, pointer: node.cast::<pm_embedded_variable_node_t>(), marker: PhantomData },
1942 PM_ENSURE_NODE => Self::EnsureNode { parser, pointer: node.cast::<pm_ensure_node_t>(), marker: PhantomData },
1943 PM_ERROR_RECOVERY_NODE => Self::ErrorRecoveryNode { parser, pointer: node.cast::<pm_error_recovery_node_t>(), marker: PhantomData },
1944 PM_FALSE_NODE => Self::FalseNode { parser, pointer: node.cast::<pm_false_node_t>(), marker: PhantomData },
1945 PM_FIND_PATTERN_NODE => Self::FindPatternNode { parser, pointer: node.cast::<pm_find_pattern_node_t>(), marker: PhantomData },
1946 PM_FLIP_FLOP_NODE => Self::FlipFlopNode { parser, pointer: node.cast::<pm_flip_flop_node_t>(), marker: PhantomData },
1947 PM_FLOAT_NODE => Self::FloatNode { parser, pointer: node.cast::<pm_float_node_t>(), marker: PhantomData },
1948 PM_FOR_NODE => Self::ForNode { parser, pointer: node.cast::<pm_for_node_t>(), marker: PhantomData },
1949 PM_FORWARDING_ARGUMENTS_NODE => Self::ForwardingArgumentsNode { parser, pointer: node.cast::<pm_forwarding_arguments_node_t>(), marker: PhantomData },
1950 PM_FORWARDING_PARAMETER_NODE => Self::ForwardingParameterNode { parser, pointer: node.cast::<pm_forwarding_parameter_node_t>(), marker: PhantomData },
1951 PM_FORWARDING_SUPER_NODE => Self::ForwardingSuperNode { parser, pointer: node.cast::<pm_forwarding_super_node_t>(), marker: PhantomData },
1952 PM_GLOBAL_VARIABLE_AND_WRITE_NODE => Self::GlobalVariableAndWriteNode { parser, pointer: node.cast::<pm_global_variable_and_write_node_t>(), marker: PhantomData },
1953 PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE => Self::GlobalVariableOperatorWriteNode { parser, pointer: node.cast::<pm_global_variable_operator_write_node_t>(), marker: PhantomData },
1954 PM_GLOBAL_VARIABLE_OR_WRITE_NODE => Self::GlobalVariableOrWriteNode { parser, pointer: node.cast::<pm_global_variable_or_write_node_t>(), marker: PhantomData },
1955 PM_GLOBAL_VARIABLE_READ_NODE => Self::GlobalVariableReadNode { parser, pointer: node.cast::<pm_global_variable_read_node_t>(), marker: PhantomData },
1956 PM_GLOBAL_VARIABLE_TARGET_NODE => Self::GlobalVariableTargetNode { parser, pointer: node.cast::<pm_global_variable_target_node_t>(), marker: PhantomData },
1957 PM_GLOBAL_VARIABLE_WRITE_NODE => Self::GlobalVariableWriteNode { parser, pointer: node.cast::<pm_global_variable_write_node_t>(), marker: PhantomData },
1958 PM_HASH_NODE => Self::HashNode { parser, pointer: node.cast::<pm_hash_node_t>(), marker: PhantomData },
1959 PM_HASH_PATTERN_NODE => Self::HashPatternNode { parser, pointer: node.cast::<pm_hash_pattern_node_t>(), marker: PhantomData },
1960 PM_IF_NODE => Self::IfNode { parser, pointer: node.cast::<pm_if_node_t>(), marker: PhantomData },
1961 PM_IMAGINARY_NODE => Self::ImaginaryNode { parser, pointer: node.cast::<pm_imaginary_node_t>(), marker: PhantomData },
1962 PM_IMPLICIT_NODE => Self::ImplicitNode { parser, pointer: node.cast::<pm_implicit_node_t>(), marker: PhantomData },
1963 PM_IMPLICIT_REST_NODE => Self::ImplicitRestNode { parser, pointer: node.cast::<pm_implicit_rest_node_t>(), marker: PhantomData },
1964 PM_IN_NODE => Self::InNode { parser, pointer: node.cast::<pm_in_node_t>(), marker: PhantomData },
1965 PM_INDEX_AND_WRITE_NODE => Self::IndexAndWriteNode { parser, pointer: node.cast::<pm_index_and_write_node_t>(), marker: PhantomData },
1966 PM_INDEX_OPERATOR_WRITE_NODE => Self::IndexOperatorWriteNode { parser, pointer: node.cast::<pm_index_operator_write_node_t>(), marker: PhantomData },
1967 PM_INDEX_OR_WRITE_NODE => Self::IndexOrWriteNode { parser, pointer: node.cast::<pm_index_or_write_node_t>(), marker: PhantomData },
1968 PM_INDEX_TARGET_NODE => Self::IndexTargetNode { parser, pointer: node.cast::<pm_index_target_node_t>(), marker: PhantomData },
1969 PM_INSTANCE_VARIABLE_AND_WRITE_NODE => Self::InstanceVariableAndWriteNode { parser, pointer: node.cast::<pm_instance_variable_and_write_node_t>(), marker: PhantomData },
1970 PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE => Self::InstanceVariableOperatorWriteNode { parser, pointer: node.cast::<pm_instance_variable_operator_write_node_t>(), marker: PhantomData },
1971 PM_INSTANCE_VARIABLE_OR_WRITE_NODE => Self::InstanceVariableOrWriteNode { parser, pointer: node.cast::<pm_instance_variable_or_write_node_t>(), marker: PhantomData },
1972 PM_INSTANCE_VARIABLE_READ_NODE => Self::InstanceVariableReadNode { parser, pointer: node.cast::<pm_instance_variable_read_node_t>(), marker: PhantomData },
1973 PM_INSTANCE_VARIABLE_TARGET_NODE => Self::InstanceVariableTargetNode { parser, pointer: node.cast::<pm_instance_variable_target_node_t>(), marker: PhantomData },
1974 PM_INSTANCE_VARIABLE_WRITE_NODE => Self::InstanceVariableWriteNode { parser, pointer: node.cast::<pm_instance_variable_write_node_t>(), marker: PhantomData },
1975 PM_INTEGER_NODE => Self::IntegerNode { parser, pointer: node.cast::<pm_integer_node_t>(), marker: PhantomData },
1976 PM_INTERPOLATED_MATCH_LAST_LINE_NODE => Self::InterpolatedMatchLastLineNode { parser, pointer: node.cast::<pm_interpolated_match_last_line_node_t>(), marker: PhantomData },
1977 PM_INTERPOLATED_REGULAR_EXPRESSION_NODE => Self::InterpolatedRegularExpressionNode { parser, pointer: node.cast::<pm_interpolated_regular_expression_node_t>(), marker: PhantomData },
1978 PM_INTERPOLATED_STRING_NODE => Self::InterpolatedStringNode { parser, pointer: node.cast::<pm_interpolated_string_node_t>(), marker: PhantomData },
1979 PM_INTERPOLATED_SYMBOL_NODE => Self::InterpolatedSymbolNode { parser, pointer: node.cast::<pm_interpolated_symbol_node_t>(), marker: PhantomData },
1980 PM_INTERPOLATED_X_STRING_NODE => Self::InterpolatedXStringNode { parser, pointer: node.cast::<pm_interpolated_x_string_node_t>(), marker: PhantomData },
1981 PM_IT_LOCAL_VARIABLE_READ_NODE => Self::ItLocalVariableReadNode { parser, pointer: node.cast::<pm_it_local_variable_read_node_t>(), marker: PhantomData },
1982 PM_IT_PARAMETERS_NODE => Self::ItParametersNode { parser, pointer: node.cast::<pm_it_parameters_node_t>(), marker: PhantomData },
1983 PM_KEYWORD_HASH_NODE => Self::KeywordHashNode { parser, pointer: node.cast::<pm_keyword_hash_node_t>(), marker: PhantomData },
1984 PM_KEYWORD_REST_PARAMETER_NODE => Self::KeywordRestParameterNode { parser, pointer: node.cast::<pm_keyword_rest_parameter_node_t>(), marker: PhantomData },
1985 PM_LAMBDA_NODE => Self::LambdaNode { parser, pointer: node.cast::<pm_lambda_node_t>(), marker: PhantomData },
1986 PM_LOCAL_VARIABLE_AND_WRITE_NODE => Self::LocalVariableAndWriteNode { parser, pointer: node.cast::<pm_local_variable_and_write_node_t>(), marker: PhantomData },
1987 PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE => Self::LocalVariableOperatorWriteNode { parser, pointer: node.cast::<pm_local_variable_operator_write_node_t>(), marker: PhantomData },
1988 PM_LOCAL_VARIABLE_OR_WRITE_NODE => Self::LocalVariableOrWriteNode { parser, pointer: node.cast::<pm_local_variable_or_write_node_t>(), marker: PhantomData },
1989 PM_LOCAL_VARIABLE_READ_NODE => Self::LocalVariableReadNode { parser, pointer: node.cast::<pm_local_variable_read_node_t>(), marker: PhantomData },
1990 PM_LOCAL_VARIABLE_TARGET_NODE => Self::LocalVariableTargetNode { parser, pointer: node.cast::<pm_local_variable_target_node_t>(), marker: PhantomData },
1991 PM_LOCAL_VARIABLE_WRITE_NODE => Self::LocalVariableWriteNode { parser, pointer: node.cast::<pm_local_variable_write_node_t>(), marker: PhantomData },
1992 PM_MATCH_LAST_LINE_NODE => Self::MatchLastLineNode { parser, pointer: node.cast::<pm_match_last_line_node_t>(), marker: PhantomData },
1993 PM_MATCH_PREDICATE_NODE => Self::MatchPredicateNode { parser, pointer: node.cast::<pm_match_predicate_node_t>(), marker: PhantomData },
1994 PM_MATCH_REQUIRED_NODE => Self::MatchRequiredNode { parser, pointer: node.cast::<pm_match_required_node_t>(), marker: PhantomData },
1995 PM_MATCH_WRITE_NODE => Self::MatchWriteNode { parser, pointer: node.cast::<pm_match_write_node_t>(), marker: PhantomData },
1996 PM_MODULE_NODE => Self::ModuleNode { parser, pointer: node.cast::<pm_module_node_t>(), marker: PhantomData },
1997 PM_MULTI_TARGET_NODE => Self::MultiTargetNode { parser, pointer: node.cast::<pm_multi_target_node_t>(), marker: PhantomData },
1998 PM_MULTI_WRITE_NODE => Self::MultiWriteNode { parser, pointer: node.cast::<pm_multi_write_node_t>(), marker: PhantomData },
1999 PM_NEXT_NODE => Self::NextNode { parser, pointer: node.cast::<pm_next_node_t>(), marker: PhantomData },
2000 PM_NIL_NODE => Self::NilNode { parser, pointer: node.cast::<pm_nil_node_t>(), marker: PhantomData },
2001 PM_NO_BLOCK_PARAMETER_NODE => Self::NoBlockParameterNode { parser, pointer: node.cast::<pm_no_block_parameter_node_t>(), marker: PhantomData },
2002 PM_NO_KEYWORDS_PARAMETER_NODE => Self::NoKeywordsParameterNode { parser, pointer: node.cast::<pm_no_keywords_parameter_node_t>(), marker: PhantomData },
2003 PM_NUMBERED_PARAMETERS_NODE => Self::NumberedParametersNode { parser, pointer: node.cast::<pm_numbered_parameters_node_t>(), marker: PhantomData },
2004 PM_NUMBERED_REFERENCE_READ_NODE => Self::NumberedReferenceReadNode { parser, pointer: node.cast::<pm_numbered_reference_read_node_t>(), marker: PhantomData },
2005 PM_OPTIONAL_KEYWORD_PARAMETER_NODE => Self::OptionalKeywordParameterNode { parser, pointer: node.cast::<pm_optional_keyword_parameter_node_t>(), marker: PhantomData },
2006 PM_OPTIONAL_PARAMETER_NODE => Self::OptionalParameterNode { parser, pointer: node.cast::<pm_optional_parameter_node_t>(), marker: PhantomData },
2007 PM_OR_NODE => Self::OrNode { parser, pointer: node.cast::<pm_or_node_t>(), marker: PhantomData },
2008 PM_PARAMETERS_NODE => Self::ParametersNode { parser, pointer: node.cast::<pm_parameters_node_t>(), marker: PhantomData },
2009 PM_PARENTHESES_NODE => Self::ParenthesesNode { parser, pointer: node.cast::<pm_parentheses_node_t>(), marker: PhantomData },
2010 PM_PINNED_EXPRESSION_NODE => Self::PinnedExpressionNode { parser, pointer: node.cast::<pm_pinned_expression_node_t>(), marker: PhantomData },
2011 PM_PINNED_VARIABLE_NODE => Self::PinnedVariableNode { parser, pointer: node.cast::<pm_pinned_variable_node_t>(), marker: PhantomData },
2012 PM_POST_EXECUTION_NODE => Self::PostExecutionNode { parser, pointer: node.cast::<pm_post_execution_node_t>(), marker: PhantomData },
2013 PM_PRE_EXECUTION_NODE => Self::PreExecutionNode { parser, pointer: node.cast::<pm_pre_execution_node_t>(), marker: PhantomData },
2014 PM_PROGRAM_NODE => Self::ProgramNode { parser, pointer: node.cast::<pm_program_node_t>(), marker: PhantomData },
2015 PM_RANGE_NODE => Self::RangeNode { parser, pointer: node.cast::<pm_range_node_t>(), marker: PhantomData },
2016 PM_RATIONAL_NODE => Self::RationalNode { parser, pointer: node.cast::<pm_rational_node_t>(), marker: PhantomData },
2017 PM_REDO_NODE => Self::RedoNode { parser, pointer: node.cast::<pm_redo_node_t>(), marker: PhantomData },
2018 PM_REGULAR_EXPRESSION_NODE => Self::RegularExpressionNode { parser, pointer: node.cast::<pm_regular_expression_node_t>(), marker: PhantomData },
2019 PM_REQUIRED_KEYWORD_PARAMETER_NODE => Self::RequiredKeywordParameterNode { parser, pointer: node.cast::<pm_required_keyword_parameter_node_t>(), marker: PhantomData },
2020 PM_REQUIRED_PARAMETER_NODE => Self::RequiredParameterNode { parser, pointer: node.cast::<pm_required_parameter_node_t>(), marker: PhantomData },
2021 PM_RESCUE_MODIFIER_NODE => Self::RescueModifierNode { parser, pointer: node.cast::<pm_rescue_modifier_node_t>(), marker: PhantomData },
2022 PM_RESCUE_NODE => Self::RescueNode { parser, pointer: node.cast::<pm_rescue_node_t>(), marker: PhantomData },
2023 PM_REST_PARAMETER_NODE => Self::RestParameterNode { parser, pointer: node.cast::<pm_rest_parameter_node_t>(), marker: PhantomData },
2024 PM_RETRY_NODE => Self::RetryNode { parser, pointer: node.cast::<pm_retry_node_t>(), marker: PhantomData },
2025 PM_RETURN_NODE => Self::ReturnNode { parser, pointer: node.cast::<pm_return_node_t>(), marker: PhantomData },
2026 PM_SELF_NODE => Self::SelfNode { parser, pointer: node.cast::<pm_self_node_t>(), marker: PhantomData },
2027 PM_SHAREABLE_CONSTANT_NODE => Self::ShareableConstantNode { parser, pointer: node.cast::<pm_shareable_constant_node_t>(), marker: PhantomData },
2028 PM_SINGLETON_CLASS_NODE => Self::SingletonClassNode { parser, pointer: node.cast::<pm_singleton_class_node_t>(), marker: PhantomData },
2029 PM_SOURCE_ENCODING_NODE => Self::SourceEncodingNode { parser, pointer: node.cast::<pm_source_encoding_node_t>(), marker: PhantomData },
2030 PM_SOURCE_FILE_NODE => Self::SourceFileNode { parser, pointer: node.cast::<pm_source_file_node_t>(), marker: PhantomData },
2031 PM_SOURCE_LINE_NODE => Self::SourceLineNode { parser, pointer: node.cast::<pm_source_line_node_t>(), marker: PhantomData },
2032 PM_SPLAT_NODE => Self::SplatNode { parser, pointer: node.cast::<pm_splat_node_t>(), marker: PhantomData },
2033 PM_STATEMENTS_NODE => Self::StatementsNode { parser, pointer: node.cast::<pm_statements_node_t>(), marker: PhantomData },
2034 PM_STRING_NODE => Self::StringNode { parser, pointer: node.cast::<pm_string_node_t>(), marker: PhantomData },
2035 PM_SUPER_NODE => Self::SuperNode { parser, pointer: node.cast::<pm_super_node_t>(), marker: PhantomData },
2036 PM_SYMBOL_NODE => Self::SymbolNode { parser, pointer: node.cast::<pm_symbol_node_t>(), marker: PhantomData },
2037 PM_TRUE_NODE => Self::TrueNode { parser, pointer: node.cast::<pm_true_node_t>(), marker: PhantomData },
2038 PM_UNDEF_NODE => Self::UndefNode { parser, pointer: node.cast::<pm_undef_node_t>(), marker: PhantomData },
2039 PM_UNLESS_NODE => Self::UnlessNode { parser, pointer: node.cast::<pm_unless_node_t>(), marker: PhantomData },
2040 PM_UNTIL_NODE => Self::UntilNode { parser, pointer: node.cast::<pm_until_node_t>(), marker: PhantomData },
2041 PM_WHEN_NODE => Self::WhenNode { parser, pointer: node.cast::<pm_when_node_t>(), marker: PhantomData },
2042 PM_WHILE_NODE => Self::WhileNode { parser, pointer: node.cast::<pm_while_node_t>(), marker: PhantomData },
2043 PM_X_STRING_NODE => Self::XStringNode { parser, pointer: node.cast::<pm_x_string_node_t>(), marker: PhantomData },
2044 PM_YIELD_NODE => Self::YieldNode { parser, pointer: node.cast::<pm_yield_node_t>(), marker: PhantomData },
2045 _ => panic!("Unknown node type: {}", unsafe { (*node).type_ })
2046 }
2047 }
2048
2049 #[must_use]
2051 pub fn location(&self) -> Location<'pr> {
2052 match *self {
2053 Self::AliasGlobalVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2054 Self::AliasMethodNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2055 Self::AlternationPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2056 Self::AndNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2057 Self::ArgumentsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2058 Self::ArrayNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2059 Self::ArrayPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2060 Self::AssocNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2061 Self::AssocSplatNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2062 Self::BackReferenceReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2063 Self::BeginNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2064 Self::BlockArgumentNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2065 Self::BlockLocalVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2066 Self::BlockNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2067 Self::BlockParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2068 Self::BlockParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2069 Self::BreakNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2070 Self::CallAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2071 Self::CallNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2072 Self::CallOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2073 Self::CallOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2074 Self::CallTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2075 Self::CapturePatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2076 Self::CaseMatchNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2077 Self::CaseNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2078 Self::ClassNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2079 Self::ClassVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2080 Self::ClassVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2081 Self::ClassVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2082 Self::ClassVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2083 Self::ClassVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2084 Self::ClassVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2085 Self::ConstantAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2086 Self::ConstantOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2087 Self::ConstantOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2088 Self::ConstantPathAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2089 Self::ConstantPathNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2090 Self::ConstantPathOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2091 Self::ConstantPathOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2092 Self::ConstantPathTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2093 Self::ConstantPathWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2094 Self::ConstantReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2095 Self::ConstantTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2096 Self::ConstantWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2097 Self::DefNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2098 Self::DefinedNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2099 Self::ElseNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2100 Self::EmbeddedStatementsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2101 Self::EmbeddedVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2102 Self::EnsureNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2103 Self::ErrorRecoveryNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2104 Self::FalseNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2105 Self::FindPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2106 Self::FlipFlopNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2107 Self::FloatNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2108 Self::ForNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2109 Self::ForwardingArgumentsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2110 Self::ForwardingParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2111 Self::ForwardingSuperNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2112 Self::GlobalVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2113 Self::GlobalVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2114 Self::GlobalVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2115 Self::GlobalVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2116 Self::GlobalVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2117 Self::GlobalVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2118 Self::HashNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2119 Self::HashPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2120 Self::IfNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2121 Self::ImaginaryNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2122 Self::ImplicitNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2123 Self::ImplicitRestNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2124 Self::InNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2125 Self::IndexAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2126 Self::IndexOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2127 Self::IndexOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2128 Self::IndexTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2129 Self::InstanceVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2130 Self::InstanceVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2131 Self::InstanceVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2132 Self::InstanceVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2133 Self::InstanceVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2134 Self::InstanceVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2135 Self::IntegerNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2136 Self::InterpolatedMatchLastLineNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2137 Self::InterpolatedRegularExpressionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2138 Self::InterpolatedStringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2139 Self::InterpolatedSymbolNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2140 Self::InterpolatedXStringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2141 Self::ItLocalVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2142 Self::ItParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2143 Self::KeywordHashNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2144 Self::KeywordRestParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2145 Self::LambdaNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2146 Self::LocalVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2147 Self::LocalVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2148 Self::LocalVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2149 Self::LocalVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2150 Self::LocalVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2151 Self::LocalVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2152 Self::MatchLastLineNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2153 Self::MatchPredicateNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2154 Self::MatchRequiredNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2155 Self::MatchWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2156 Self::ModuleNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2157 Self::MultiTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2158 Self::MultiWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2159 Self::NextNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2160 Self::NilNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2161 Self::NoBlockParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2162 Self::NoKeywordsParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2163 Self::NumberedParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2164 Self::NumberedReferenceReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2165 Self::OptionalKeywordParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2166 Self::OptionalParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2167 Self::OrNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2168 Self::ParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2169 Self::ParenthesesNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2170 Self::PinnedExpressionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2171 Self::PinnedVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2172 Self::PostExecutionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2173 Self::PreExecutionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2174 Self::ProgramNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2175 Self::RangeNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2176 Self::RationalNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2177 Self::RedoNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2178 Self::RegularExpressionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2179 Self::RequiredKeywordParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2180 Self::RequiredParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2181 Self::RescueModifierNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2182 Self::RescueNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2183 Self::RestParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2184 Self::RetryNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2185 Self::ReturnNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2186 Self::SelfNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2187 Self::ShareableConstantNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2188 Self::SingletonClassNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2189 Self::SourceEncodingNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2190 Self::SourceFileNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2191 Self::SourceLineNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2192 Self::SplatNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2193 Self::StatementsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2194 Self::StringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2195 Self::SuperNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2196 Self::SymbolNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2197 Self::TrueNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2198 Self::UndefNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2199 Self::UnlessNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2200 Self::UntilNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2201 Self::WhenNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2202 Self::WhileNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2203 Self::XStringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2204 Self::YieldNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
2205 }
2206 }
2207
2208 #[must_use]
2210 pub const fn as_alias_global_variable_node(&self) -> Option<AliasGlobalVariableNode<'pr>> {
2211 match *self {
2212 Self::AliasGlobalVariableNode { parser, pointer, marker } => Some(AliasGlobalVariableNode { parser, pointer, marker }),
2213 _ => None
2214 }
2215 }
2216 #[must_use]
2218 pub const fn as_alias_method_node(&self) -> Option<AliasMethodNode<'pr>> {
2219 match *self {
2220 Self::AliasMethodNode { parser, pointer, marker } => Some(AliasMethodNode { parser, pointer, marker }),
2221 _ => None
2222 }
2223 }
2224 #[must_use]
2226 pub const fn as_alternation_pattern_node(&self) -> Option<AlternationPatternNode<'pr>> {
2227 match *self {
2228 Self::AlternationPatternNode { parser, pointer, marker } => Some(AlternationPatternNode { parser, pointer, marker }),
2229 _ => None
2230 }
2231 }
2232 #[must_use]
2234 pub const fn as_and_node(&self) -> Option<AndNode<'pr>> {
2235 match *self {
2236 Self::AndNode { parser, pointer, marker } => Some(AndNode { parser, pointer, marker }),
2237 _ => None
2238 }
2239 }
2240 #[must_use]
2242 pub const fn as_arguments_node(&self) -> Option<ArgumentsNode<'pr>> {
2243 match *self {
2244 Self::ArgumentsNode { parser, pointer, marker } => Some(ArgumentsNode { parser, pointer, marker }),
2245 _ => None
2246 }
2247 }
2248 #[must_use]
2250 pub const fn as_array_node(&self) -> Option<ArrayNode<'pr>> {
2251 match *self {
2252 Self::ArrayNode { parser, pointer, marker } => Some(ArrayNode { parser, pointer, marker }),
2253 _ => None
2254 }
2255 }
2256 #[must_use]
2258 pub const fn as_array_pattern_node(&self) -> Option<ArrayPatternNode<'pr>> {
2259 match *self {
2260 Self::ArrayPatternNode { parser, pointer, marker } => Some(ArrayPatternNode { parser, pointer, marker }),
2261 _ => None
2262 }
2263 }
2264 #[must_use]
2266 pub const fn as_assoc_node(&self) -> Option<AssocNode<'pr>> {
2267 match *self {
2268 Self::AssocNode { parser, pointer, marker } => Some(AssocNode { parser, pointer, marker }),
2269 _ => None
2270 }
2271 }
2272 #[must_use]
2274 pub const fn as_assoc_splat_node(&self) -> Option<AssocSplatNode<'pr>> {
2275 match *self {
2276 Self::AssocSplatNode { parser, pointer, marker } => Some(AssocSplatNode { parser, pointer, marker }),
2277 _ => None
2278 }
2279 }
2280 #[must_use]
2282 pub const fn as_back_reference_read_node(&self) -> Option<BackReferenceReadNode<'pr>> {
2283 match *self {
2284 Self::BackReferenceReadNode { parser, pointer, marker } => Some(BackReferenceReadNode { parser, pointer, marker }),
2285 _ => None
2286 }
2287 }
2288 #[must_use]
2290 pub const fn as_begin_node(&self) -> Option<BeginNode<'pr>> {
2291 match *self {
2292 Self::BeginNode { parser, pointer, marker } => Some(BeginNode { parser, pointer, marker }),
2293 _ => None
2294 }
2295 }
2296 #[must_use]
2298 pub const fn as_block_argument_node(&self) -> Option<BlockArgumentNode<'pr>> {
2299 match *self {
2300 Self::BlockArgumentNode { parser, pointer, marker } => Some(BlockArgumentNode { parser, pointer, marker }),
2301 _ => None
2302 }
2303 }
2304 #[must_use]
2306 pub const fn as_block_local_variable_node(&self) -> Option<BlockLocalVariableNode<'pr>> {
2307 match *self {
2308 Self::BlockLocalVariableNode { parser, pointer, marker } => Some(BlockLocalVariableNode { parser, pointer, marker }),
2309 _ => None
2310 }
2311 }
2312 #[must_use]
2314 pub const fn as_block_node(&self) -> Option<BlockNode<'pr>> {
2315 match *self {
2316 Self::BlockNode { parser, pointer, marker } => Some(BlockNode { parser, pointer, marker }),
2317 _ => None
2318 }
2319 }
2320 #[must_use]
2322 pub const fn as_block_parameter_node(&self) -> Option<BlockParameterNode<'pr>> {
2323 match *self {
2324 Self::BlockParameterNode { parser, pointer, marker } => Some(BlockParameterNode { parser, pointer, marker }),
2325 _ => None
2326 }
2327 }
2328 #[must_use]
2330 pub const fn as_block_parameters_node(&self) -> Option<BlockParametersNode<'pr>> {
2331 match *self {
2332 Self::BlockParametersNode { parser, pointer, marker } => Some(BlockParametersNode { parser, pointer, marker }),
2333 _ => None
2334 }
2335 }
2336 #[must_use]
2338 pub const fn as_break_node(&self) -> Option<BreakNode<'pr>> {
2339 match *self {
2340 Self::BreakNode { parser, pointer, marker } => Some(BreakNode { parser, pointer, marker }),
2341 _ => None
2342 }
2343 }
2344 #[must_use]
2346 pub const fn as_call_and_write_node(&self) -> Option<CallAndWriteNode<'pr>> {
2347 match *self {
2348 Self::CallAndWriteNode { parser, pointer, marker } => Some(CallAndWriteNode { parser, pointer, marker }),
2349 _ => None
2350 }
2351 }
2352 #[must_use]
2354 pub const fn as_call_node(&self) -> Option<CallNode<'pr>> {
2355 match *self {
2356 Self::CallNode { parser, pointer, marker } => Some(CallNode { parser, pointer, marker }),
2357 _ => None
2358 }
2359 }
2360 #[must_use]
2362 pub const fn as_call_operator_write_node(&self) -> Option<CallOperatorWriteNode<'pr>> {
2363 match *self {
2364 Self::CallOperatorWriteNode { parser, pointer, marker } => Some(CallOperatorWriteNode { parser, pointer, marker }),
2365 _ => None
2366 }
2367 }
2368 #[must_use]
2370 pub const fn as_call_or_write_node(&self) -> Option<CallOrWriteNode<'pr>> {
2371 match *self {
2372 Self::CallOrWriteNode { parser, pointer, marker } => Some(CallOrWriteNode { parser, pointer, marker }),
2373 _ => None
2374 }
2375 }
2376 #[must_use]
2378 pub const fn as_call_target_node(&self) -> Option<CallTargetNode<'pr>> {
2379 match *self {
2380 Self::CallTargetNode { parser, pointer, marker } => Some(CallTargetNode { parser, pointer, marker }),
2381 _ => None
2382 }
2383 }
2384 #[must_use]
2386 pub const fn as_capture_pattern_node(&self) -> Option<CapturePatternNode<'pr>> {
2387 match *self {
2388 Self::CapturePatternNode { parser, pointer, marker } => Some(CapturePatternNode { parser, pointer, marker }),
2389 _ => None
2390 }
2391 }
2392 #[must_use]
2394 pub const fn as_case_match_node(&self) -> Option<CaseMatchNode<'pr>> {
2395 match *self {
2396 Self::CaseMatchNode { parser, pointer, marker } => Some(CaseMatchNode { parser, pointer, marker }),
2397 _ => None
2398 }
2399 }
2400 #[must_use]
2402 pub const fn as_case_node(&self) -> Option<CaseNode<'pr>> {
2403 match *self {
2404 Self::CaseNode { parser, pointer, marker } => Some(CaseNode { parser, pointer, marker }),
2405 _ => None
2406 }
2407 }
2408 #[must_use]
2410 pub const fn as_class_node(&self) -> Option<ClassNode<'pr>> {
2411 match *self {
2412 Self::ClassNode { parser, pointer, marker } => Some(ClassNode { parser, pointer, marker }),
2413 _ => None
2414 }
2415 }
2416 #[must_use]
2418 pub const fn as_class_variable_and_write_node(&self) -> Option<ClassVariableAndWriteNode<'pr>> {
2419 match *self {
2420 Self::ClassVariableAndWriteNode { parser, pointer, marker } => Some(ClassVariableAndWriteNode { parser, pointer, marker }),
2421 _ => None
2422 }
2423 }
2424 #[must_use]
2426 pub const fn as_class_variable_operator_write_node(&self) -> Option<ClassVariableOperatorWriteNode<'pr>> {
2427 match *self {
2428 Self::ClassVariableOperatorWriteNode { parser, pointer, marker } => Some(ClassVariableOperatorWriteNode { parser, pointer, marker }),
2429 _ => None
2430 }
2431 }
2432 #[must_use]
2434 pub const fn as_class_variable_or_write_node(&self) -> Option<ClassVariableOrWriteNode<'pr>> {
2435 match *self {
2436 Self::ClassVariableOrWriteNode { parser, pointer, marker } => Some(ClassVariableOrWriteNode { parser, pointer, marker }),
2437 _ => None
2438 }
2439 }
2440 #[must_use]
2442 pub const fn as_class_variable_read_node(&self) -> Option<ClassVariableReadNode<'pr>> {
2443 match *self {
2444 Self::ClassVariableReadNode { parser, pointer, marker } => Some(ClassVariableReadNode { parser, pointer, marker }),
2445 _ => None
2446 }
2447 }
2448 #[must_use]
2450 pub const fn as_class_variable_target_node(&self) -> Option<ClassVariableTargetNode<'pr>> {
2451 match *self {
2452 Self::ClassVariableTargetNode { parser, pointer, marker } => Some(ClassVariableTargetNode { parser, pointer, marker }),
2453 _ => None
2454 }
2455 }
2456 #[must_use]
2458 pub const fn as_class_variable_write_node(&self) -> Option<ClassVariableWriteNode<'pr>> {
2459 match *self {
2460 Self::ClassVariableWriteNode { parser, pointer, marker } => Some(ClassVariableWriteNode { parser, pointer, marker }),
2461 _ => None
2462 }
2463 }
2464 #[must_use]
2466 pub const fn as_constant_and_write_node(&self) -> Option<ConstantAndWriteNode<'pr>> {
2467 match *self {
2468 Self::ConstantAndWriteNode { parser, pointer, marker } => Some(ConstantAndWriteNode { parser, pointer, marker }),
2469 _ => None
2470 }
2471 }
2472 #[must_use]
2474 pub const fn as_constant_operator_write_node(&self) -> Option<ConstantOperatorWriteNode<'pr>> {
2475 match *self {
2476 Self::ConstantOperatorWriteNode { parser, pointer, marker } => Some(ConstantOperatorWriteNode { parser, pointer, marker }),
2477 _ => None
2478 }
2479 }
2480 #[must_use]
2482 pub const fn as_constant_or_write_node(&self) -> Option<ConstantOrWriteNode<'pr>> {
2483 match *self {
2484 Self::ConstantOrWriteNode { parser, pointer, marker } => Some(ConstantOrWriteNode { parser, pointer, marker }),
2485 _ => None
2486 }
2487 }
2488 #[must_use]
2490 pub const fn as_constant_path_and_write_node(&self) -> Option<ConstantPathAndWriteNode<'pr>> {
2491 match *self {
2492 Self::ConstantPathAndWriteNode { parser, pointer, marker } => Some(ConstantPathAndWriteNode { parser, pointer, marker }),
2493 _ => None
2494 }
2495 }
2496 #[must_use]
2498 pub const fn as_constant_path_node(&self) -> Option<ConstantPathNode<'pr>> {
2499 match *self {
2500 Self::ConstantPathNode { parser, pointer, marker } => Some(ConstantPathNode { parser, pointer, marker }),
2501 _ => None
2502 }
2503 }
2504 #[must_use]
2506 pub const fn as_constant_path_operator_write_node(&self) -> Option<ConstantPathOperatorWriteNode<'pr>> {
2507 match *self {
2508 Self::ConstantPathOperatorWriteNode { parser, pointer, marker } => Some(ConstantPathOperatorWriteNode { parser, pointer, marker }),
2509 _ => None
2510 }
2511 }
2512 #[must_use]
2514 pub const fn as_constant_path_or_write_node(&self) -> Option<ConstantPathOrWriteNode<'pr>> {
2515 match *self {
2516 Self::ConstantPathOrWriteNode { parser, pointer, marker } => Some(ConstantPathOrWriteNode { parser, pointer, marker }),
2517 _ => None
2518 }
2519 }
2520 #[must_use]
2522 pub const fn as_constant_path_target_node(&self) -> Option<ConstantPathTargetNode<'pr>> {
2523 match *self {
2524 Self::ConstantPathTargetNode { parser, pointer, marker } => Some(ConstantPathTargetNode { parser, pointer, marker }),
2525 _ => None
2526 }
2527 }
2528 #[must_use]
2530 pub const fn as_constant_path_write_node(&self) -> Option<ConstantPathWriteNode<'pr>> {
2531 match *self {
2532 Self::ConstantPathWriteNode { parser, pointer, marker } => Some(ConstantPathWriteNode { parser, pointer, marker }),
2533 _ => None
2534 }
2535 }
2536 #[must_use]
2538 pub const fn as_constant_read_node(&self) -> Option<ConstantReadNode<'pr>> {
2539 match *self {
2540 Self::ConstantReadNode { parser, pointer, marker } => Some(ConstantReadNode { parser, pointer, marker }),
2541 _ => None
2542 }
2543 }
2544 #[must_use]
2546 pub const fn as_constant_target_node(&self) -> Option<ConstantTargetNode<'pr>> {
2547 match *self {
2548 Self::ConstantTargetNode { parser, pointer, marker } => Some(ConstantTargetNode { parser, pointer, marker }),
2549 _ => None
2550 }
2551 }
2552 #[must_use]
2554 pub const fn as_constant_write_node(&self) -> Option<ConstantWriteNode<'pr>> {
2555 match *self {
2556 Self::ConstantWriteNode { parser, pointer, marker } => Some(ConstantWriteNode { parser, pointer, marker }),
2557 _ => None
2558 }
2559 }
2560 #[must_use]
2562 pub const fn as_def_node(&self) -> Option<DefNode<'pr>> {
2563 match *self {
2564 Self::DefNode { parser, pointer, marker } => Some(DefNode { parser, pointer, marker }),
2565 _ => None
2566 }
2567 }
2568 #[must_use]
2570 pub const fn as_defined_node(&self) -> Option<DefinedNode<'pr>> {
2571 match *self {
2572 Self::DefinedNode { parser, pointer, marker } => Some(DefinedNode { parser, pointer, marker }),
2573 _ => None
2574 }
2575 }
2576 #[must_use]
2578 pub const fn as_else_node(&self) -> Option<ElseNode<'pr>> {
2579 match *self {
2580 Self::ElseNode { parser, pointer, marker } => Some(ElseNode { parser, pointer, marker }),
2581 _ => None
2582 }
2583 }
2584 #[must_use]
2586 pub const fn as_embedded_statements_node(&self) -> Option<EmbeddedStatementsNode<'pr>> {
2587 match *self {
2588 Self::EmbeddedStatementsNode { parser, pointer, marker } => Some(EmbeddedStatementsNode { parser, pointer, marker }),
2589 _ => None
2590 }
2591 }
2592 #[must_use]
2594 pub const fn as_embedded_variable_node(&self) -> Option<EmbeddedVariableNode<'pr>> {
2595 match *self {
2596 Self::EmbeddedVariableNode { parser, pointer, marker } => Some(EmbeddedVariableNode { parser, pointer, marker }),
2597 _ => None
2598 }
2599 }
2600 #[must_use]
2602 pub const fn as_ensure_node(&self) -> Option<EnsureNode<'pr>> {
2603 match *self {
2604 Self::EnsureNode { parser, pointer, marker } => Some(EnsureNode { parser, pointer, marker }),
2605 _ => None
2606 }
2607 }
2608 #[must_use]
2610 pub const fn as_error_recovery_node(&self) -> Option<ErrorRecoveryNode<'pr>> {
2611 match *self {
2612 Self::ErrorRecoveryNode { parser, pointer, marker } => Some(ErrorRecoveryNode { parser, pointer, marker }),
2613 _ => None
2614 }
2615 }
2616 #[must_use]
2618 pub const fn as_false_node(&self) -> Option<FalseNode<'pr>> {
2619 match *self {
2620 Self::FalseNode { parser, pointer, marker } => Some(FalseNode { parser, pointer, marker }),
2621 _ => None
2622 }
2623 }
2624 #[must_use]
2626 pub const fn as_find_pattern_node(&self) -> Option<FindPatternNode<'pr>> {
2627 match *self {
2628 Self::FindPatternNode { parser, pointer, marker } => Some(FindPatternNode { parser, pointer, marker }),
2629 _ => None
2630 }
2631 }
2632 #[must_use]
2634 pub const fn as_flip_flop_node(&self) -> Option<FlipFlopNode<'pr>> {
2635 match *self {
2636 Self::FlipFlopNode { parser, pointer, marker } => Some(FlipFlopNode { parser, pointer, marker }),
2637 _ => None
2638 }
2639 }
2640 #[must_use]
2642 pub const fn as_float_node(&self) -> Option<FloatNode<'pr>> {
2643 match *self {
2644 Self::FloatNode { parser, pointer, marker } => Some(FloatNode { parser, pointer, marker }),
2645 _ => None
2646 }
2647 }
2648 #[must_use]
2650 pub const fn as_for_node(&self) -> Option<ForNode<'pr>> {
2651 match *self {
2652 Self::ForNode { parser, pointer, marker } => Some(ForNode { parser, pointer, marker }),
2653 _ => None
2654 }
2655 }
2656 #[must_use]
2658 pub const fn as_forwarding_arguments_node(&self) -> Option<ForwardingArgumentsNode<'pr>> {
2659 match *self {
2660 Self::ForwardingArgumentsNode { parser, pointer, marker } => Some(ForwardingArgumentsNode { parser, pointer, marker }),
2661 _ => None
2662 }
2663 }
2664 #[must_use]
2666 pub const fn as_forwarding_parameter_node(&self) -> Option<ForwardingParameterNode<'pr>> {
2667 match *self {
2668 Self::ForwardingParameterNode { parser, pointer, marker } => Some(ForwardingParameterNode { parser, pointer, marker }),
2669 _ => None
2670 }
2671 }
2672 #[must_use]
2674 pub const fn as_forwarding_super_node(&self) -> Option<ForwardingSuperNode<'pr>> {
2675 match *self {
2676 Self::ForwardingSuperNode { parser, pointer, marker } => Some(ForwardingSuperNode { parser, pointer, marker }),
2677 _ => None
2678 }
2679 }
2680 #[must_use]
2682 pub const fn as_global_variable_and_write_node(&self) -> Option<GlobalVariableAndWriteNode<'pr>> {
2683 match *self {
2684 Self::GlobalVariableAndWriteNode { parser, pointer, marker } => Some(GlobalVariableAndWriteNode { parser, pointer, marker }),
2685 _ => None
2686 }
2687 }
2688 #[must_use]
2690 pub const fn as_global_variable_operator_write_node(&self) -> Option<GlobalVariableOperatorWriteNode<'pr>> {
2691 match *self {
2692 Self::GlobalVariableOperatorWriteNode { parser, pointer, marker } => Some(GlobalVariableOperatorWriteNode { parser, pointer, marker }),
2693 _ => None
2694 }
2695 }
2696 #[must_use]
2698 pub const fn as_global_variable_or_write_node(&self) -> Option<GlobalVariableOrWriteNode<'pr>> {
2699 match *self {
2700 Self::GlobalVariableOrWriteNode { parser, pointer, marker } => Some(GlobalVariableOrWriteNode { parser, pointer, marker }),
2701 _ => None
2702 }
2703 }
2704 #[must_use]
2706 pub const fn as_global_variable_read_node(&self) -> Option<GlobalVariableReadNode<'pr>> {
2707 match *self {
2708 Self::GlobalVariableReadNode { parser, pointer, marker } => Some(GlobalVariableReadNode { parser, pointer, marker }),
2709 _ => None
2710 }
2711 }
2712 #[must_use]
2714 pub const fn as_global_variable_target_node(&self) -> Option<GlobalVariableTargetNode<'pr>> {
2715 match *self {
2716 Self::GlobalVariableTargetNode { parser, pointer, marker } => Some(GlobalVariableTargetNode { parser, pointer, marker }),
2717 _ => None
2718 }
2719 }
2720 #[must_use]
2722 pub const fn as_global_variable_write_node(&self) -> Option<GlobalVariableWriteNode<'pr>> {
2723 match *self {
2724 Self::GlobalVariableWriteNode { parser, pointer, marker } => Some(GlobalVariableWriteNode { parser, pointer, marker }),
2725 _ => None
2726 }
2727 }
2728 #[must_use]
2730 pub const fn as_hash_node(&self) -> Option<HashNode<'pr>> {
2731 match *self {
2732 Self::HashNode { parser, pointer, marker } => Some(HashNode { parser, pointer, marker }),
2733 _ => None
2734 }
2735 }
2736 #[must_use]
2738 pub const fn as_hash_pattern_node(&self) -> Option<HashPatternNode<'pr>> {
2739 match *self {
2740 Self::HashPatternNode { parser, pointer, marker } => Some(HashPatternNode { parser, pointer, marker }),
2741 _ => None
2742 }
2743 }
2744 #[must_use]
2746 pub const fn as_if_node(&self) -> Option<IfNode<'pr>> {
2747 match *self {
2748 Self::IfNode { parser, pointer, marker } => Some(IfNode { parser, pointer, marker }),
2749 _ => None
2750 }
2751 }
2752 #[must_use]
2754 pub const fn as_imaginary_node(&self) -> Option<ImaginaryNode<'pr>> {
2755 match *self {
2756 Self::ImaginaryNode { parser, pointer, marker } => Some(ImaginaryNode { parser, pointer, marker }),
2757 _ => None
2758 }
2759 }
2760 #[must_use]
2762 pub const fn as_implicit_node(&self) -> Option<ImplicitNode<'pr>> {
2763 match *self {
2764 Self::ImplicitNode { parser, pointer, marker } => Some(ImplicitNode { parser, pointer, marker }),
2765 _ => None
2766 }
2767 }
2768 #[must_use]
2770 pub const fn as_implicit_rest_node(&self) -> Option<ImplicitRestNode<'pr>> {
2771 match *self {
2772 Self::ImplicitRestNode { parser, pointer, marker } => Some(ImplicitRestNode { parser, pointer, marker }),
2773 _ => None
2774 }
2775 }
2776 #[must_use]
2778 pub const fn as_in_node(&self) -> Option<InNode<'pr>> {
2779 match *self {
2780 Self::InNode { parser, pointer, marker } => Some(InNode { parser, pointer, marker }),
2781 _ => None
2782 }
2783 }
2784 #[must_use]
2786 pub const fn as_index_and_write_node(&self) -> Option<IndexAndWriteNode<'pr>> {
2787 match *self {
2788 Self::IndexAndWriteNode { parser, pointer, marker } => Some(IndexAndWriteNode { parser, pointer, marker }),
2789 _ => None
2790 }
2791 }
2792 #[must_use]
2794 pub const fn as_index_operator_write_node(&self) -> Option<IndexOperatorWriteNode<'pr>> {
2795 match *self {
2796 Self::IndexOperatorWriteNode { parser, pointer, marker } => Some(IndexOperatorWriteNode { parser, pointer, marker }),
2797 _ => None
2798 }
2799 }
2800 #[must_use]
2802 pub const fn as_index_or_write_node(&self) -> Option<IndexOrWriteNode<'pr>> {
2803 match *self {
2804 Self::IndexOrWriteNode { parser, pointer, marker } => Some(IndexOrWriteNode { parser, pointer, marker }),
2805 _ => None
2806 }
2807 }
2808 #[must_use]
2810 pub const fn as_index_target_node(&self) -> Option<IndexTargetNode<'pr>> {
2811 match *self {
2812 Self::IndexTargetNode { parser, pointer, marker } => Some(IndexTargetNode { parser, pointer, marker }),
2813 _ => None
2814 }
2815 }
2816 #[must_use]
2818 pub const fn as_instance_variable_and_write_node(&self) -> Option<InstanceVariableAndWriteNode<'pr>> {
2819 match *self {
2820 Self::InstanceVariableAndWriteNode { parser, pointer, marker } => Some(InstanceVariableAndWriteNode { parser, pointer, marker }),
2821 _ => None
2822 }
2823 }
2824 #[must_use]
2826 pub const fn as_instance_variable_operator_write_node(&self) -> Option<InstanceVariableOperatorWriteNode<'pr>> {
2827 match *self {
2828 Self::InstanceVariableOperatorWriteNode { parser, pointer, marker } => Some(InstanceVariableOperatorWriteNode { parser, pointer, marker }),
2829 _ => None
2830 }
2831 }
2832 #[must_use]
2834 pub const fn as_instance_variable_or_write_node(&self) -> Option<InstanceVariableOrWriteNode<'pr>> {
2835 match *self {
2836 Self::InstanceVariableOrWriteNode { parser, pointer, marker } => Some(InstanceVariableOrWriteNode { parser, pointer, marker }),
2837 _ => None
2838 }
2839 }
2840 #[must_use]
2842 pub const fn as_instance_variable_read_node(&self) -> Option<InstanceVariableReadNode<'pr>> {
2843 match *self {
2844 Self::InstanceVariableReadNode { parser, pointer, marker } => Some(InstanceVariableReadNode { parser, pointer, marker }),
2845 _ => None
2846 }
2847 }
2848 #[must_use]
2850 pub const fn as_instance_variable_target_node(&self) -> Option<InstanceVariableTargetNode<'pr>> {
2851 match *self {
2852 Self::InstanceVariableTargetNode { parser, pointer, marker } => Some(InstanceVariableTargetNode { parser, pointer, marker }),
2853 _ => None
2854 }
2855 }
2856 #[must_use]
2858 pub const fn as_instance_variable_write_node(&self) -> Option<InstanceVariableWriteNode<'pr>> {
2859 match *self {
2860 Self::InstanceVariableWriteNode { parser, pointer, marker } => Some(InstanceVariableWriteNode { parser, pointer, marker }),
2861 _ => None
2862 }
2863 }
2864 #[must_use]
2866 pub const fn as_integer_node(&self) -> Option<IntegerNode<'pr>> {
2867 match *self {
2868 Self::IntegerNode { parser, pointer, marker } => Some(IntegerNode { parser, pointer, marker }),
2869 _ => None
2870 }
2871 }
2872 #[must_use]
2874 pub const fn as_interpolated_match_last_line_node(&self) -> Option<InterpolatedMatchLastLineNode<'pr>> {
2875 match *self {
2876 Self::InterpolatedMatchLastLineNode { parser, pointer, marker } => Some(InterpolatedMatchLastLineNode { parser, pointer, marker }),
2877 _ => None
2878 }
2879 }
2880 #[must_use]
2882 pub const fn as_interpolated_regular_expression_node(&self) -> Option<InterpolatedRegularExpressionNode<'pr>> {
2883 match *self {
2884 Self::InterpolatedRegularExpressionNode { parser, pointer, marker } => Some(InterpolatedRegularExpressionNode { parser, pointer, marker }),
2885 _ => None
2886 }
2887 }
2888 #[must_use]
2890 pub const fn as_interpolated_string_node(&self) -> Option<InterpolatedStringNode<'pr>> {
2891 match *self {
2892 Self::InterpolatedStringNode { parser, pointer, marker } => Some(InterpolatedStringNode { parser, pointer, marker }),
2893 _ => None
2894 }
2895 }
2896 #[must_use]
2898 pub const fn as_interpolated_symbol_node(&self) -> Option<InterpolatedSymbolNode<'pr>> {
2899 match *self {
2900 Self::InterpolatedSymbolNode { parser, pointer, marker } => Some(InterpolatedSymbolNode { parser, pointer, marker }),
2901 _ => None
2902 }
2903 }
2904 #[must_use]
2906 pub const fn as_interpolated_x_string_node(&self) -> Option<InterpolatedXStringNode<'pr>> {
2907 match *self {
2908 Self::InterpolatedXStringNode { parser, pointer, marker } => Some(InterpolatedXStringNode { parser, pointer, marker }),
2909 _ => None
2910 }
2911 }
2912 #[must_use]
2914 pub const fn as_it_local_variable_read_node(&self) -> Option<ItLocalVariableReadNode<'pr>> {
2915 match *self {
2916 Self::ItLocalVariableReadNode { parser, pointer, marker } => Some(ItLocalVariableReadNode { parser, pointer, marker }),
2917 _ => None
2918 }
2919 }
2920 #[must_use]
2922 pub const fn as_it_parameters_node(&self) -> Option<ItParametersNode<'pr>> {
2923 match *self {
2924 Self::ItParametersNode { parser, pointer, marker } => Some(ItParametersNode { parser, pointer, marker }),
2925 _ => None
2926 }
2927 }
2928 #[must_use]
2930 pub const fn as_keyword_hash_node(&self) -> Option<KeywordHashNode<'pr>> {
2931 match *self {
2932 Self::KeywordHashNode { parser, pointer, marker } => Some(KeywordHashNode { parser, pointer, marker }),
2933 _ => None
2934 }
2935 }
2936 #[must_use]
2938 pub const fn as_keyword_rest_parameter_node(&self) -> Option<KeywordRestParameterNode<'pr>> {
2939 match *self {
2940 Self::KeywordRestParameterNode { parser, pointer, marker } => Some(KeywordRestParameterNode { parser, pointer, marker }),
2941 _ => None
2942 }
2943 }
2944 #[must_use]
2946 pub const fn as_lambda_node(&self) -> Option<LambdaNode<'pr>> {
2947 match *self {
2948 Self::LambdaNode { parser, pointer, marker } => Some(LambdaNode { parser, pointer, marker }),
2949 _ => None
2950 }
2951 }
2952 #[must_use]
2954 pub const fn as_local_variable_and_write_node(&self) -> Option<LocalVariableAndWriteNode<'pr>> {
2955 match *self {
2956 Self::LocalVariableAndWriteNode { parser, pointer, marker } => Some(LocalVariableAndWriteNode { parser, pointer, marker }),
2957 _ => None
2958 }
2959 }
2960 #[must_use]
2962 pub const fn as_local_variable_operator_write_node(&self) -> Option<LocalVariableOperatorWriteNode<'pr>> {
2963 match *self {
2964 Self::LocalVariableOperatorWriteNode { parser, pointer, marker } => Some(LocalVariableOperatorWriteNode { parser, pointer, marker }),
2965 _ => None
2966 }
2967 }
2968 #[must_use]
2970 pub const fn as_local_variable_or_write_node(&self) -> Option<LocalVariableOrWriteNode<'pr>> {
2971 match *self {
2972 Self::LocalVariableOrWriteNode { parser, pointer, marker } => Some(LocalVariableOrWriteNode { parser, pointer, marker }),
2973 _ => None
2974 }
2975 }
2976 #[must_use]
2978 pub const fn as_local_variable_read_node(&self) -> Option<LocalVariableReadNode<'pr>> {
2979 match *self {
2980 Self::LocalVariableReadNode { parser, pointer, marker } => Some(LocalVariableReadNode { parser, pointer, marker }),
2981 _ => None
2982 }
2983 }
2984 #[must_use]
2986 pub const fn as_local_variable_target_node(&self) -> Option<LocalVariableTargetNode<'pr>> {
2987 match *self {
2988 Self::LocalVariableTargetNode { parser, pointer, marker } => Some(LocalVariableTargetNode { parser, pointer, marker }),
2989 _ => None
2990 }
2991 }
2992 #[must_use]
2994 pub const fn as_local_variable_write_node(&self) -> Option<LocalVariableWriteNode<'pr>> {
2995 match *self {
2996 Self::LocalVariableWriteNode { parser, pointer, marker } => Some(LocalVariableWriteNode { parser, pointer, marker }),
2997 _ => None
2998 }
2999 }
3000 #[must_use]
3002 pub const fn as_match_last_line_node(&self) -> Option<MatchLastLineNode<'pr>> {
3003 match *self {
3004 Self::MatchLastLineNode { parser, pointer, marker } => Some(MatchLastLineNode { parser, pointer, marker }),
3005 _ => None
3006 }
3007 }
3008 #[must_use]
3010 pub const fn as_match_predicate_node(&self) -> Option<MatchPredicateNode<'pr>> {
3011 match *self {
3012 Self::MatchPredicateNode { parser, pointer, marker } => Some(MatchPredicateNode { parser, pointer, marker }),
3013 _ => None
3014 }
3015 }
3016 #[must_use]
3018 pub const fn as_match_required_node(&self) -> Option<MatchRequiredNode<'pr>> {
3019 match *self {
3020 Self::MatchRequiredNode { parser, pointer, marker } => Some(MatchRequiredNode { parser, pointer, marker }),
3021 _ => None
3022 }
3023 }
3024 #[must_use]
3026 pub const fn as_match_write_node(&self) -> Option<MatchWriteNode<'pr>> {
3027 match *self {
3028 Self::MatchWriteNode { parser, pointer, marker } => Some(MatchWriteNode { parser, pointer, marker }),
3029 _ => None
3030 }
3031 }
3032 #[must_use]
3034 pub const fn as_module_node(&self) -> Option<ModuleNode<'pr>> {
3035 match *self {
3036 Self::ModuleNode { parser, pointer, marker } => Some(ModuleNode { parser, pointer, marker }),
3037 _ => None
3038 }
3039 }
3040 #[must_use]
3042 pub const fn as_multi_target_node(&self) -> Option<MultiTargetNode<'pr>> {
3043 match *self {
3044 Self::MultiTargetNode { parser, pointer, marker } => Some(MultiTargetNode { parser, pointer, marker }),
3045 _ => None
3046 }
3047 }
3048 #[must_use]
3050 pub const fn as_multi_write_node(&self) -> Option<MultiWriteNode<'pr>> {
3051 match *self {
3052 Self::MultiWriteNode { parser, pointer, marker } => Some(MultiWriteNode { parser, pointer, marker }),
3053 _ => None
3054 }
3055 }
3056 #[must_use]
3058 pub const fn as_next_node(&self) -> Option<NextNode<'pr>> {
3059 match *self {
3060 Self::NextNode { parser, pointer, marker } => Some(NextNode { parser, pointer, marker }),
3061 _ => None
3062 }
3063 }
3064 #[must_use]
3066 pub const fn as_nil_node(&self) -> Option<NilNode<'pr>> {
3067 match *self {
3068 Self::NilNode { parser, pointer, marker } => Some(NilNode { parser, pointer, marker }),
3069 _ => None
3070 }
3071 }
3072 #[must_use]
3074 pub const fn as_no_block_parameter_node(&self) -> Option<NoBlockParameterNode<'pr>> {
3075 match *self {
3076 Self::NoBlockParameterNode { parser, pointer, marker } => Some(NoBlockParameterNode { parser, pointer, marker }),
3077 _ => None
3078 }
3079 }
3080 #[must_use]
3082 pub const fn as_no_keywords_parameter_node(&self) -> Option<NoKeywordsParameterNode<'pr>> {
3083 match *self {
3084 Self::NoKeywordsParameterNode { parser, pointer, marker } => Some(NoKeywordsParameterNode { parser, pointer, marker }),
3085 _ => None
3086 }
3087 }
3088 #[must_use]
3090 pub const fn as_numbered_parameters_node(&self) -> Option<NumberedParametersNode<'pr>> {
3091 match *self {
3092 Self::NumberedParametersNode { parser, pointer, marker } => Some(NumberedParametersNode { parser, pointer, marker }),
3093 _ => None
3094 }
3095 }
3096 #[must_use]
3098 pub const fn as_numbered_reference_read_node(&self) -> Option<NumberedReferenceReadNode<'pr>> {
3099 match *self {
3100 Self::NumberedReferenceReadNode { parser, pointer, marker } => Some(NumberedReferenceReadNode { parser, pointer, marker }),
3101 _ => None
3102 }
3103 }
3104 #[must_use]
3106 pub const fn as_optional_keyword_parameter_node(&self) -> Option<OptionalKeywordParameterNode<'pr>> {
3107 match *self {
3108 Self::OptionalKeywordParameterNode { parser, pointer, marker } => Some(OptionalKeywordParameterNode { parser, pointer, marker }),
3109 _ => None
3110 }
3111 }
3112 #[must_use]
3114 pub const fn as_optional_parameter_node(&self) -> Option<OptionalParameterNode<'pr>> {
3115 match *self {
3116 Self::OptionalParameterNode { parser, pointer, marker } => Some(OptionalParameterNode { parser, pointer, marker }),
3117 _ => None
3118 }
3119 }
3120 #[must_use]
3122 pub const fn as_or_node(&self) -> Option<OrNode<'pr>> {
3123 match *self {
3124 Self::OrNode { parser, pointer, marker } => Some(OrNode { parser, pointer, marker }),
3125 _ => None
3126 }
3127 }
3128 #[must_use]
3130 pub const fn as_parameters_node(&self) -> Option<ParametersNode<'pr>> {
3131 match *self {
3132 Self::ParametersNode { parser, pointer, marker } => Some(ParametersNode { parser, pointer, marker }),
3133 _ => None
3134 }
3135 }
3136 #[must_use]
3138 pub const fn as_parentheses_node(&self) -> Option<ParenthesesNode<'pr>> {
3139 match *self {
3140 Self::ParenthesesNode { parser, pointer, marker } => Some(ParenthesesNode { parser, pointer, marker }),
3141 _ => None
3142 }
3143 }
3144 #[must_use]
3146 pub const fn as_pinned_expression_node(&self) -> Option<PinnedExpressionNode<'pr>> {
3147 match *self {
3148 Self::PinnedExpressionNode { parser, pointer, marker } => Some(PinnedExpressionNode { parser, pointer, marker }),
3149 _ => None
3150 }
3151 }
3152 #[must_use]
3154 pub const fn as_pinned_variable_node(&self) -> Option<PinnedVariableNode<'pr>> {
3155 match *self {
3156 Self::PinnedVariableNode { parser, pointer, marker } => Some(PinnedVariableNode { parser, pointer, marker }),
3157 _ => None
3158 }
3159 }
3160 #[must_use]
3162 pub const fn as_post_execution_node(&self) -> Option<PostExecutionNode<'pr>> {
3163 match *self {
3164 Self::PostExecutionNode { parser, pointer, marker } => Some(PostExecutionNode { parser, pointer, marker }),
3165 _ => None
3166 }
3167 }
3168 #[must_use]
3170 pub const fn as_pre_execution_node(&self) -> Option<PreExecutionNode<'pr>> {
3171 match *self {
3172 Self::PreExecutionNode { parser, pointer, marker } => Some(PreExecutionNode { parser, pointer, marker }),
3173 _ => None
3174 }
3175 }
3176 #[must_use]
3178 pub const fn as_program_node(&self) -> Option<ProgramNode<'pr>> {
3179 match *self {
3180 Self::ProgramNode { parser, pointer, marker } => Some(ProgramNode { parser, pointer, marker }),
3181 _ => None
3182 }
3183 }
3184 #[must_use]
3186 pub const fn as_range_node(&self) -> Option<RangeNode<'pr>> {
3187 match *self {
3188 Self::RangeNode { parser, pointer, marker } => Some(RangeNode { parser, pointer, marker }),
3189 _ => None
3190 }
3191 }
3192 #[must_use]
3194 pub const fn as_rational_node(&self) -> Option<RationalNode<'pr>> {
3195 match *self {
3196 Self::RationalNode { parser, pointer, marker } => Some(RationalNode { parser, pointer, marker }),
3197 _ => None
3198 }
3199 }
3200 #[must_use]
3202 pub const fn as_redo_node(&self) -> Option<RedoNode<'pr>> {
3203 match *self {
3204 Self::RedoNode { parser, pointer, marker } => Some(RedoNode { parser, pointer, marker }),
3205 _ => None
3206 }
3207 }
3208 #[must_use]
3210 pub const fn as_regular_expression_node(&self) -> Option<RegularExpressionNode<'pr>> {
3211 match *self {
3212 Self::RegularExpressionNode { parser, pointer, marker } => Some(RegularExpressionNode { parser, pointer, marker }),
3213 _ => None
3214 }
3215 }
3216 #[must_use]
3218 pub const fn as_required_keyword_parameter_node(&self) -> Option<RequiredKeywordParameterNode<'pr>> {
3219 match *self {
3220 Self::RequiredKeywordParameterNode { parser, pointer, marker } => Some(RequiredKeywordParameterNode { parser, pointer, marker }),
3221 _ => None
3222 }
3223 }
3224 #[must_use]
3226 pub const fn as_required_parameter_node(&self) -> Option<RequiredParameterNode<'pr>> {
3227 match *self {
3228 Self::RequiredParameterNode { parser, pointer, marker } => Some(RequiredParameterNode { parser, pointer, marker }),
3229 _ => None
3230 }
3231 }
3232 #[must_use]
3234 pub const fn as_rescue_modifier_node(&self) -> Option<RescueModifierNode<'pr>> {
3235 match *self {
3236 Self::RescueModifierNode { parser, pointer, marker } => Some(RescueModifierNode { parser, pointer, marker }),
3237 _ => None
3238 }
3239 }
3240 #[must_use]
3242 pub const fn as_rescue_node(&self) -> Option<RescueNode<'pr>> {
3243 match *self {
3244 Self::RescueNode { parser, pointer, marker } => Some(RescueNode { parser, pointer, marker }),
3245 _ => None
3246 }
3247 }
3248 #[must_use]
3250 pub const fn as_rest_parameter_node(&self) -> Option<RestParameterNode<'pr>> {
3251 match *self {
3252 Self::RestParameterNode { parser, pointer, marker } => Some(RestParameterNode { parser, pointer, marker }),
3253 _ => None
3254 }
3255 }
3256 #[must_use]
3258 pub const fn as_retry_node(&self) -> Option<RetryNode<'pr>> {
3259 match *self {
3260 Self::RetryNode { parser, pointer, marker } => Some(RetryNode { parser, pointer, marker }),
3261 _ => None
3262 }
3263 }
3264 #[must_use]
3266 pub const fn as_return_node(&self) -> Option<ReturnNode<'pr>> {
3267 match *self {
3268 Self::ReturnNode { parser, pointer, marker } => Some(ReturnNode { parser, pointer, marker }),
3269 _ => None
3270 }
3271 }
3272 #[must_use]
3274 pub const fn as_self_node(&self) -> Option<SelfNode<'pr>> {
3275 match *self {
3276 Self::SelfNode { parser, pointer, marker } => Some(SelfNode { parser, pointer, marker }),
3277 _ => None
3278 }
3279 }
3280 #[must_use]
3282 pub const fn as_shareable_constant_node(&self) -> Option<ShareableConstantNode<'pr>> {
3283 match *self {
3284 Self::ShareableConstantNode { parser, pointer, marker } => Some(ShareableConstantNode { parser, pointer, marker }),
3285 _ => None
3286 }
3287 }
3288 #[must_use]
3290 pub const fn as_singleton_class_node(&self) -> Option<SingletonClassNode<'pr>> {
3291 match *self {
3292 Self::SingletonClassNode { parser, pointer, marker } => Some(SingletonClassNode { parser, pointer, marker }),
3293 _ => None
3294 }
3295 }
3296 #[must_use]
3298 pub const fn as_source_encoding_node(&self) -> Option<SourceEncodingNode<'pr>> {
3299 match *self {
3300 Self::SourceEncodingNode { parser, pointer, marker } => Some(SourceEncodingNode { parser, pointer, marker }),
3301 _ => None
3302 }
3303 }
3304 #[must_use]
3306 pub const fn as_source_file_node(&self) -> Option<SourceFileNode<'pr>> {
3307 match *self {
3308 Self::SourceFileNode { parser, pointer, marker } => Some(SourceFileNode { parser, pointer, marker }),
3309 _ => None
3310 }
3311 }
3312 #[must_use]
3314 pub const fn as_source_line_node(&self) -> Option<SourceLineNode<'pr>> {
3315 match *self {
3316 Self::SourceLineNode { parser, pointer, marker } => Some(SourceLineNode { parser, pointer, marker }),
3317 _ => None
3318 }
3319 }
3320 #[must_use]
3322 pub const fn as_splat_node(&self) -> Option<SplatNode<'pr>> {
3323 match *self {
3324 Self::SplatNode { parser, pointer, marker } => Some(SplatNode { parser, pointer, marker }),
3325 _ => None
3326 }
3327 }
3328 #[must_use]
3330 pub const fn as_statements_node(&self) -> Option<StatementsNode<'pr>> {
3331 match *self {
3332 Self::StatementsNode { parser, pointer, marker } => Some(StatementsNode { parser, pointer, marker }),
3333 _ => None
3334 }
3335 }
3336 #[must_use]
3338 pub const fn as_string_node(&self) -> Option<StringNode<'pr>> {
3339 match *self {
3340 Self::StringNode { parser, pointer, marker } => Some(StringNode { parser, pointer, marker }),
3341 _ => None
3342 }
3343 }
3344 #[must_use]
3346 pub const fn as_super_node(&self) -> Option<SuperNode<'pr>> {
3347 match *self {
3348 Self::SuperNode { parser, pointer, marker } => Some(SuperNode { parser, pointer, marker }),
3349 _ => None
3350 }
3351 }
3352 #[must_use]
3354 pub const fn as_symbol_node(&self) -> Option<SymbolNode<'pr>> {
3355 match *self {
3356 Self::SymbolNode { parser, pointer, marker } => Some(SymbolNode { parser, pointer, marker }),
3357 _ => None
3358 }
3359 }
3360 #[must_use]
3362 pub const fn as_true_node(&self) -> Option<TrueNode<'pr>> {
3363 match *self {
3364 Self::TrueNode { parser, pointer, marker } => Some(TrueNode { parser, pointer, marker }),
3365 _ => None
3366 }
3367 }
3368 #[must_use]
3370 pub const fn as_undef_node(&self) -> Option<UndefNode<'pr>> {
3371 match *self {
3372 Self::UndefNode { parser, pointer, marker } => Some(UndefNode { parser, pointer, marker }),
3373 _ => None
3374 }
3375 }
3376 #[must_use]
3378 pub const fn as_unless_node(&self) -> Option<UnlessNode<'pr>> {
3379 match *self {
3380 Self::UnlessNode { parser, pointer, marker } => Some(UnlessNode { parser, pointer, marker }),
3381 _ => None
3382 }
3383 }
3384 #[must_use]
3386 pub const fn as_until_node(&self) -> Option<UntilNode<'pr>> {
3387 match *self {
3388 Self::UntilNode { parser, pointer, marker } => Some(UntilNode { parser, pointer, marker }),
3389 _ => None
3390 }
3391 }
3392 #[must_use]
3394 pub const fn as_when_node(&self) -> Option<WhenNode<'pr>> {
3395 match *self {
3396 Self::WhenNode { parser, pointer, marker } => Some(WhenNode { parser, pointer, marker }),
3397 _ => None
3398 }
3399 }
3400 #[must_use]
3402 pub const fn as_while_node(&self) -> Option<WhileNode<'pr>> {
3403 match *self {
3404 Self::WhileNode { parser, pointer, marker } => Some(WhileNode { parser, pointer, marker }),
3405 _ => None
3406 }
3407 }
3408 #[must_use]
3410 pub const fn as_x_string_node(&self) -> Option<XStringNode<'pr>> {
3411 match *self {
3412 Self::XStringNode { parser, pointer, marker } => Some(XStringNode { parser, pointer, marker }),
3413 _ => None
3414 }
3415 }
3416 #[must_use]
3418 pub const fn as_yield_node(&self) -> Option<YieldNode<'pr>> {
3419 match *self {
3420 Self::YieldNode { parser, pointer, marker } => Some(YieldNode { parser, pointer, marker }),
3421 _ => None
3422 }
3423 }
3424}
3425
3426impl std::fmt::Debug for Node<'_> {
3427 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3428 match *self {
3429 Self::AliasGlobalVariableNode { parser, pointer, marker } => write!(f, "{:?}", AliasGlobalVariableNode { parser, pointer, marker }),
3430 Self::AliasMethodNode { parser, pointer, marker } => write!(f, "{:?}", AliasMethodNode { parser, pointer, marker }),
3431 Self::AlternationPatternNode { parser, pointer, marker } => write!(f, "{:?}", AlternationPatternNode { parser, pointer, marker }),
3432 Self::AndNode { parser, pointer, marker } => write!(f, "{:?}", AndNode { parser, pointer, marker }),
3433 Self::ArgumentsNode { parser, pointer, marker } => write!(f, "{:?}", ArgumentsNode { parser, pointer, marker }),
3434 Self::ArrayNode { parser, pointer, marker } => write!(f, "{:?}", ArrayNode { parser, pointer, marker }),
3435 Self::ArrayPatternNode { parser, pointer, marker } => write!(f, "{:?}", ArrayPatternNode { parser, pointer, marker }),
3436 Self::AssocNode { parser, pointer, marker } => write!(f, "{:?}", AssocNode { parser, pointer, marker }),
3437 Self::AssocSplatNode { parser, pointer, marker } => write!(f, "{:?}", AssocSplatNode { parser, pointer, marker }),
3438 Self::BackReferenceReadNode { parser, pointer, marker } => write!(f, "{:?}", BackReferenceReadNode { parser, pointer, marker }),
3439 Self::BeginNode { parser, pointer, marker } => write!(f, "{:?}", BeginNode { parser, pointer, marker }),
3440 Self::BlockArgumentNode { parser, pointer, marker } => write!(f, "{:?}", BlockArgumentNode { parser, pointer, marker }),
3441 Self::BlockLocalVariableNode { parser, pointer, marker } => write!(f, "{:?}", BlockLocalVariableNode { parser, pointer, marker }),
3442 Self::BlockNode { parser, pointer, marker } => write!(f, "{:?}", BlockNode { parser, pointer, marker }),
3443 Self::BlockParameterNode { parser, pointer, marker } => write!(f, "{:?}", BlockParameterNode { parser, pointer, marker }),
3444 Self::BlockParametersNode { parser, pointer, marker } => write!(f, "{:?}", BlockParametersNode { parser, pointer, marker }),
3445 Self::BreakNode { parser, pointer, marker } => write!(f, "{:?}", BreakNode { parser, pointer, marker }),
3446 Self::CallAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", CallAndWriteNode { parser, pointer, marker }),
3447 Self::CallNode { parser, pointer, marker } => write!(f, "{:?}", CallNode { parser, pointer, marker }),
3448 Self::CallOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", CallOperatorWriteNode { parser, pointer, marker }),
3449 Self::CallOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", CallOrWriteNode { parser, pointer, marker }),
3450 Self::CallTargetNode { parser, pointer, marker } => write!(f, "{:?}", CallTargetNode { parser, pointer, marker }),
3451 Self::CapturePatternNode { parser, pointer, marker } => write!(f, "{:?}", CapturePatternNode { parser, pointer, marker }),
3452 Self::CaseMatchNode { parser, pointer, marker } => write!(f, "{:?}", CaseMatchNode { parser, pointer, marker }),
3453 Self::CaseNode { parser, pointer, marker } => write!(f, "{:?}", CaseNode { parser, pointer, marker }),
3454 Self::ClassNode { parser, pointer, marker } => write!(f, "{:?}", ClassNode { parser, pointer, marker }),
3455 Self::ClassVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableAndWriteNode { parser, pointer, marker }),
3456 Self::ClassVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableOperatorWriteNode { parser, pointer, marker }),
3457 Self::ClassVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableOrWriteNode { parser, pointer, marker }),
3458 Self::ClassVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableReadNode { parser, pointer, marker }),
3459 Self::ClassVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableTargetNode { parser, pointer, marker }),
3460 Self::ClassVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableWriteNode { parser, pointer, marker }),
3461 Self::ConstantAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantAndWriteNode { parser, pointer, marker }),
3462 Self::ConstantOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantOperatorWriteNode { parser, pointer, marker }),
3463 Self::ConstantOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantOrWriteNode { parser, pointer, marker }),
3464 Self::ConstantPathAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathAndWriteNode { parser, pointer, marker }),
3465 Self::ConstantPathNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathNode { parser, pointer, marker }),
3466 Self::ConstantPathOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathOperatorWriteNode { parser, pointer, marker }),
3467 Self::ConstantPathOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathOrWriteNode { parser, pointer, marker }),
3468 Self::ConstantPathTargetNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathTargetNode { parser, pointer, marker }),
3469 Self::ConstantPathWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathWriteNode { parser, pointer, marker }),
3470 Self::ConstantReadNode { parser, pointer, marker } => write!(f, "{:?}", ConstantReadNode { parser, pointer, marker }),
3471 Self::ConstantTargetNode { parser, pointer, marker } => write!(f, "{:?}", ConstantTargetNode { parser, pointer, marker }),
3472 Self::ConstantWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantWriteNode { parser, pointer, marker }),
3473 Self::DefNode { parser, pointer, marker } => write!(f, "{:?}", DefNode { parser, pointer, marker }),
3474 Self::DefinedNode { parser, pointer, marker } => write!(f, "{:?}", DefinedNode { parser, pointer, marker }),
3475 Self::ElseNode { parser, pointer, marker } => write!(f, "{:?}", ElseNode { parser, pointer, marker }),
3476 Self::EmbeddedStatementsNode { parser, pointer, marker } => write!(f, "{:?}", EmbeddedStatementsNode { parser, pointer, marker }),
3477 Self::EmbeddedVariableNode { parser, pointer, marker } => write!(f, "{:?}", EmbeddedVariableNode { parser, pointer, marker }),
3478 Self::EnsureNode { parser, pointer, marker } => write!(f, "{:?}", EnsureNode { parser, pointer, marker }),
3479 Self::ErrorRecoveryNode { parser, pointer, marker } => write!(f, "{:?}", ErrorRecoveryNode { parser, pointer, marker }),
3480 Self::FalseNode { parser, pointer, marker } => write!(f, "{:?}", FalseNode { parser, pointer, marker }),
3481 Self::FindPatternNode { parser, pointer, marker } => write!(f, "{:?}", FindPatternNode { parser, pointer, marker }),
3482 Self::FlipFlopNode { parser, pointer, marker } => write!(f, "{:?}", FlipFlopNode { parser, pointer, marker }),
3483 Self::FloatNode { parser, pointer, marker } => write!(f, "{:?}", FloatNode { parser, pointer, marker }),
3484 Self::ForNode { parser, pointer, marker } => write!(f, "{:?}", ForNode { parser, pointer, marker }),
3485 Self::ForwardingArgumentsNode { parser, pointer, marker } => write!(f, "{:?}", ForwardingArgumentsNode { parser, pointer, marker }),
3486 Self::ForwardingParameterNode { parser, pointer, marker } => write!(f, "{:?}", ForwardingParameterNode { parser, pointer, marker }),
3487 Self::ForwardingSuperNode { parser, pointer, marker } => write!(f, "{:?}", ForwardingSuperNode { parser, pointer, marker }),
3488 Self::GlobalVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableAndWriteNode { parser, pointer, marker }),
3489 Self::GlobalVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableOperatorWriteNode { parser, pointer, marker }),
3490 Self::GlobalVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableOrWriteNode { parser, pointer, marker }),
3491 Self::GlobalVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableReadNode { parser, pointer, marker }),
3492 Self::GlobalVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableTargetNode { parser, pointer, marker }),
3493 Self::GlobalVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableWriteNode { parser, pointer, marker }),
3494 Self::HashNode { parser, pointer, marker } => write!(f, "{:?}", HashNode { parser, pointer, marker }),
3495 Self::HashPatternNode { parser, pointer, marker } => write!(f, "{:?}", HashPatternNode { parser, pointer, marker }),
3496 Self::IfNode { parser, pointer, marker } => write!(f, "{:?}", IfNode { parser, pointer, marker }),
3497 Self::ImaginaryNode { parser, pointer, marker } => write!(f, "{:?}", ImaginaryNode { parser, pointer, marker }),
3498 Self::ImplicitNode { parser, pointer, marker } => write!(f, "{:?}", ImplicitNode { parser, pointer, marker }),
3499 Self::ImplicitRestNode { parser, pointer, marker } => write!(f, "{:?}", ImplicitRestNode { parser, pointer, marker }),
3500 Self::InNode { parser, pointer, marker } => write!(f, "{:?}", InNode { parser, pointer, marker }),
3501 Self::IndexAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", IndexAndWriteNode { parser, pointer, marker }),
3502 Self::IndexOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", IndexOperatorWriteNode { parser, pointer, marker }),
3503 Self::IndexOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", IndexOrWriteNode { parser, pointer, marker }),
3504 Self::IndexTargetNode { parser, pointer, marker } => write!(f, "{:?}", IndexTargetNode { parser, pointer, marker }),
3505 Self::InstanceVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableAndWriteNode { parser, pointer, marker }),
3506 Self::InstanceVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableOperatorWriteNode { parser, pointer, marker }),
3507 Self::InstanceVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableOrWriteNode { parser, pointer, marker }),
3508 Self::InstanceVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableReadNode { parser, pointer, marker }),
3509 Self::InstanceVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableTargetNode { parser, pointer, marker }),
3510 Self::InstanceVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableWriteNode { parser, pointer, marker }),
3511 Self::IntegerNode { parser, pointer, marker } => write!(f, "{:?}", IntegerNode { parser, pointer, marker }),
3512 Self::InterpolatedMatchLastLineNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedMatchLastLineNode { parser, pointer, marker }),
3513 Self::InterpolatedRegularExpressionNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedRegularExpressionNode { parser, pointer, marker }),
3514 Self::InterpolatedStringNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedStringNode { parser, pointer, marker }),
3515 Self::InterpolatedSymbolNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedSymbolNode { parser, pointer, marker }),
3516 Self::InterpolatedXStringNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedXStringNode { parser, pointer, marker }),
3517 Self::ItLocalVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", ItLocalVariableReadNode { parser, pointer, marker }),
3518 Self::ItParametersNode { parser, pointer, marker } => write!(f, "{:?}", ItParametersNode { parser, pointer, marker }),
3519 Self::KeywordHashNode { parser, pointer, marker } => write!(f, "{:?}", KeywordHashNode { parser, pointer, marker }),
3520 Self::KeywordRestParameterNode { parser, pointer, marker } => write!(f, "{:?}", KeywordRestParameterNode { parser, pointer, marker }),
3521 Self::LambdaNode { parser, pointer, marker } => write!(f, "{:?}", LambdaNode { parser, pointer, marker }),
3522 Self::LocalVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableAndWriteNode { parser, pointer, marker }),
3523 Self::LocalVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableOperatorWriteNode { parser, pointer, marker }),
3524 Self::LocalVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableOrWriteNode { parser, pointer, marker }),
3525 Self::LocalVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableReadNode { parser, pointer, marker }),
3526 Self::LocalVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableTargetNode { parser, pointer, marker }),
3527 Self::LocalVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableWriteNode { parser, pointer, marker }),
3528 Self::MatchLastLineNode { parser, pointer, marker } => write!(f, "{:?}", MatchLastLineNode { parser, pointer, marker }),
3529 Self::MatchPredicateNode { parser, pointer, marker } => write!(f, "{:?}", MatchPredicateNode { parser, pointer, marker }),
3530 Self::MatchRequiredNode { parser, pointer, marker } => write!(f, "{:?}", MatchRequiredNode { parser, pointer, marker }),
3531 Self::MatchWriteNode { parser, pointer, marker } => write!(f, "{:?}", MatchWriteNode { parser, pointer, marker }),
3532 Self::ModuleNode { parser, pointer, marker } => write!(f, "{:?}", ModuleNode { parser, pointer, marker }),
3533 Self::MultiTargetNode { parser, pointer, marker } => write!(f, "{:?}", MultiTargetNode { parser, pointer, marker }),
3534 Self::MultiWriteNode { parser, pointer, marker } => write!(f, "{:?}", MultiWriteNode { parser, pointer, marker }),
3535 Self::NextNode { parser, pointer, marker } => write!(f, "{:?}", NextNode { parser, pointer, marker }),
3536 Self::NilNode { parser, pointer, marker } => write!(f, "{:?}", NilNode { parser, pointer, marker }),
3537 Self::NoBlockParameterNode { parser, pointer, marker } => write!(f, "{:?}", NoBlockParameterNode { parser, pointer, marker }),
3538 Self::NoKeywordsParameterNode { parser, pointer, marker } => write!(f, "{:?}", NoKeywordsParameterNode { parser, pointer, marker }),
3539 Self::NumberedParametersNode { parser, pointer, marker } => write!(f, "{:?}", NumberedParametersNode { parser, pointer, marker }),
3540 Self::NumberedReferenceReadNode { parser, pointer, marker } => write!(f, "{:?}", NumberedReferenceReadNode { parser, pointer, marker }),
3541 Self::OptionalKeywordParameterNode { parser, pointer, marker } => write!(f, "{:?}", OptionalKeywordParameterNode { parser, pointer, marker }),
3542 Self::OptionalParameterNode { parser, pointer, marker } => write!(f, "{:?}", OptionalParameterNode { parser, pointer, marker }),
3543 Self::OrNode { parser, pointer, marker } => write!(f, "{:?}", OrNode { parser, pointer, marker }),
3544 Self::ParametersNode { parser, pointer, marker } => write!(f, "{:?}", ParametersNode { parser, pointer, marker }),
3545 Self::ParenthesesNode { parser, pointer, marker } => write!(f, "{:?}", ParenthesesNode { parser, pointer, marker }),
3546 Self::PinnedExpressionNode { parser, pointer, marker } => write!(f, "{:?}", PinnedExpressionNode { parser, pointer, marker }),
3547 Self::PinnedVariableNode { parser, pointer, marker } => write!(f, "{:?}", PinnedVariableNode { parser, pointer, marker }),
3548 Self::PostExecutionNode { parser, pointer, marker } => write!(f, "{:?}", PostExecutionNode { parser, pointer, marker }),
3549 Self::PreExecutionNode { parser, pointer, marker } => write!(f, "{:?}", PreExecutionNode { parser, pointer, marker }),
3550 Self::ProgramNode { parser, pointer, marker } => write!(f, "{:?}", ProgramNode { parser, pointer, marker }),
3551 Self::RangeNode { parser, pointer, marker } => write!(f, "{:?}", RangeNode { parser, pointer, marker }),
3552 Self::RationalNode { parser, pointer, marker } => write!(f, "{:?}", RationalNode { parser, pointer, marker }),
3553 Self::RedoNode { parser, pointer, marker } => write!(f, "{:?}", RedoNode { parser, pointer, marker }),
3554 Self::RegularExpressionNode { parser, pointer, marker } => write!(f, "{:?}", RegularExpressionNode { parser, pointer, marker }),
3555 Self::RequiredKeywordParameterNode { parser, pointer, marker } => write!(f, "{:?}", RequiredKeywordParameterNode { parser, pointer, marker }),
3556 Self::RequiredParameterNode { parser, pointer, marker } => write!(f, "{:?}", RequiredParameterNode { parser, pointer, marker }),
3557 Self::RescueModifierNode { parser, pointer, marker } => write!(f, "{:?}", RescueModifierNode { parser, pointer, marker }),
3558 Self::RescueNode { parser, pointer, marker } => write!(f, "{:?}", RescueNode { parser, pointer, marker }),
3559 Self::RestParameterNode { parser, pointer, marker } => write!(f, "{:?}", RestParameterNode { parser, pointer, marker }),
3560 Self::RetryNode { parser, pointer, marker } => write!(f, "{:?}", RetryNode { parser, pointer, marker }),
3561 Self::ReturnNode { parser, pointer, marker } => write!(f, "{:?}", ReturnNode { parser, pointer, marker }),
3562 Self::SelfNode { parser, pointer, marker } => write!(f, "{:?}", SelfNode { parser, pointer, marker }),
3563 Self::ShareableConstantNode { parser, pointer, marker } => write!(f, "{:?}", ShareableConstantNode { parser, pointer, marker }),
3564 Self::SingletonClassNode { parser, pointer, marker } => write!(f, "{:?}", SingletonClassNode { parser, pointer, marker }),
3565 Self::SourceEncodingNode { parser, pointer, marker } => write!(f, "{:?}", SourceEncodingNode { parser, pointer, marker }),
3566 Self::SourceFileNode { parser, pointer, marker } => write!(f, "{:?}", SourceFileNode { parser, pointer, marker }),
3567 Self::SourceLineNode { parser, pointer, marker } => write!(f, "{:?}", SourceLineNode { parser, pointer, marker }),
3568 Self::SplatNode { parser, pointer, marker } => write!(f, "{:?}", SplatNode { parser, pointer, marker }),
3569 Self::StatementsNode { parser, pointer, marker } => write!(f, "{:?}", StatementsNode { parser, pointer, marker }),
3570 Self::StringNode { parser, pointer, marker } => write!(f, "{:?}", StringNode { parser, pointer, marker }),
3571 Self::SuperNode { parser, pointer, marker } => write!(f, "{:?}", SuperNode { parser, pointer, marker }),
3572 Self::SymbolNode { parser, pointer, marker } => write!(f, "{:?}", SymbolNode { parser, pointer, marker }),
3573 Self::TrueNode { parser, pointer, marker } => write!(f, "{:?}", TrueNode { parser, pointer, marker }),
3574 Self::UndefNode { parser, pointer, marker } => write!(f, "{:?}", UndefNode { parser, pointer, marker }),
3575 Self::UnlessNode { parser, pointer, marker } => write!(f, "{:?}", UnlessNode { parser, pointer, marker }),
3576 Self::UntilNode { parser, pointer, marker } => write!(f, "{:?}", UntilNode { parser, pointer, marker }),
3577 Self::WhenNode { parser, pointer, marker } => write!(f, "{:?}", WhenNode { parser, pointer, marker }),
3578 Self::WhileNode { parser, pointer, marker } => write!(f, "{:?}", WhileNode { parser, pointer, marker }),
3579 Self::XStringNode { parser, pointer, marker } => write!(f, "{:?}", XStringNode { parser, pointer, marker }),
3580 Self::YieldNode { parser, pointer, marker } => write!(f, "{:?}", YieldNode { parser, pointer, marker }),
3581 }
3582 }
3583}
3584
3585pub struct AliasGlobalVariableNode<'pr> {
3592 parser: *const pm_parser_t,
3594
3595 pointer: *mut pm_alias_global_variable_node_t,
3597
3598 marker: PhantomData<&'pr mut pm_alias_global_variable_node_t>
3600}
3601
3602impl<'pr> AliasGlobalVariableNode<'pr> {
3603 #[must_use]
3605 pub const fn as_node(&self) -> Node<'pr> {
3606 Node::AliasGlobalVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
3607 }
3608
3609 #[must_use]
3611 pub fn location(&self) -> Location<'pr> {
3612 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
3613 Location::new(self.parser, unsafe { &(*pointer) })
3614 }
3615
3616 #[must_use]
3618 pub fn flags(&self) -> pm_node_flags_t {
3619 unsafe { (*self.pointer).base.flags }
3620 }
3621
3622 #[must_use]
3624 pub fn new_name(&self) -> Node<'pr> {
3625 let node: *mut pm_node_t = unsafe { (*self.pointer).new_name };
3626 Node::new(self.parser, node)
3627 }
3628
3629 #[must_use]
3631 pub fn old_name(&self) -> Node<'pr> {
3632 let node: *mut pm_node_t = unsafe { (*self.pointer).old_name };
3633 Node::new(self.parser, node)
3634 }
3635
3636 #[must_use]
3638 pub fn keyword_loc(&self) -> Location<'pr> {
3639 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
3640 Location::new(self.parser, unsafe { &(*pointer) })
3641 }
3642}
3643
3644impl std::fmt::Debug for AliasGlobalVariableNode<'_> {
3645 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3646 write!(f, "AliasGlobalVariableNode({:?}, {:?}, {:?})", self.new_name(), self.old_name(), self.keyword_loc())
3647 }
3648}
3649
3650pub struct AliasMethodNode<'pr> {
3657 parser: *const pm_parser_t,
3659
3660 pointer: *mut pm_alias_method_node_t,
3662
3663 marker: PhantomData<&'pr mut pm_alias_method_node_t>
3665}
3666
3667impl<'pr> AliasMethodNode<'pr> {
3668 #[must_use]
3670 pub const fn as_node(&self) -> Node<'pr> {
3671 Node::AliasMethodNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
3672 }
3673
3674 #[must_use]
3676 pub fn location(&self) -> Location<'pr> {
3677 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
3678 Location::new(self.parser, unsafe { &(*pointer) })
3679 }
3680
3681 #[must_use]
3683 pub fn flags(&self) -> pm_node_flags_t {
3684 unsafe { (*self.pointer).base.flags }
3685 }
3686
3687 #[must_use]
3689 pub fn new_name(&self) -> Node<'pr> {
3690 let node: *mut pm_node_t = unsafe { (*self.pointer).new_name };
3691 Node::new(self.parser, node)
3692 }
3693
3694 #[must_use]
3696 pub fn old_name(&self) -> Node<'pr> {
3697 let node: *mut pm_node_t = unsafe { (*self.pointer).old_name };
3698 Node::new(self.parser, node)
3699 }
3700
3701 #[must_use]
3703 pub fn keyword_loc(&self) -> Location<'pr> {
3704 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
3705 Location::new(self.parser, unsafe { &(*pointer) })
3706 }
3707}
3708
3709impl std::fmt::Debug for AliasMethodNode<'_> {
3710 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3711 write!(f, "AliasMethodNode({:?}, {:?}, {:?})", self.new_name(), self.old_name(), self.keyword_loc())
3712 }
3713}
3714
3715pub struct AlternationPatternNode<'pr> {
3722 parser: *const pm_parser_t,
3724
3725 pointer: *mut pm_alternation_pattern_node_t,
3727
3728 marker: PhantomData<&'pr mut pm_alternation_pattern_node_t>
3730}
3731
3732impl<'pr> AlternationPatternNode<'pr> {
3733 #[must_use]
3735 pub const fn as_node(&self) -> Node<'pr> {
3736 Node::AlternationPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
3737 }
3738
3739 #[must_use]
3741 pub fn location(&self) -> Location<'pr> {
3742 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
3743 Location::new(self.parser, unsafe { &(*pointer) })
3744 }
3745
3746 #[must_use]
3748 pub fn flags(&self) -> pm_node_flags_t {
3749 unsafe { (*self.pointer).base.flags }
3750 }
3751
3752 #[must_use]
3754 pub fn left(&self) -> Node<'pr> {
3755 let node: *mut pm_node_t = unsafe { (*self.pointer).left };
3756 Node::new(self.parser, node)
3757 }
3758
3759 #[must_use]
3761 pub fn right(&self) -> Node<'pr> {
3762 let node: *mut pm_node_t = unsafe { (*self.pointer).right };
3763 Node::new(self.parser, node)
3764 }
3765
3766 #[must_use]
3768 pub fn operator_loc(&self) -> Location<'pr> {
3769 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
3770 Location::new(self.parser, unsafe { &(*pointer) })
3771 }
3772}
3773
3774impl std::fmt::Debug for AlternationPatternNode<'_> {
3775 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3776 write!(f, "AlternationPatternNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
3777 }
3778}
3779
3780pub struct AndNode<'pr> {
3787 parser: *const pm_parser_t,
3789
3790 pointer: *mut pm_and_node_t,
3792
3793 marker: PhantomData<&'pr mut pm_and_node_t>
3795}
3796
3797impl<'pr> AndNode<'pr> {
3798 #[must_use]
3800 pub const fn as_node(&self) -> Node<'pr> {
3801 Node::AndNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
3802 }
3803
3804 #[must_use]
3806 pub fn location(&self) -> Location<'pr> {
3807 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
3808 Location::new(self.parser, unsafe { &(*pointer) })
3809 }
3810
3811 #[must_use]
3813 pub fn flags(&self) -> pm_node_flags_t {
3814 unsafe { (*self.pointer).base.flags }
3815 }
3816
3817 #[must_use]
3819 pub fn left(&self) -> Node<'pr> {
3820 let node: *mut pm_node_t = unsafe { (*self.pointer).left };
3821 Node::new(self.parser, node)
3822 }
3823
3824 #[must_use]
3826 pub fn right(&self) -> Node<'pr> {
3827 let node: *mut pm_node_t = unsafe { (*self.pointer).right };
3828 Node::new(self.parser, node)
3829 }
3830
3831 #[must_use]
3833 pub fn operator_loc(&self) -> Location<'pr> {
3834 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
3835 Location::new(self.parser, unsafe { &(*pointer) })
3836 }
3837}
3838
3839impl std::fmt::Debug for AndNode<'_> {
3840 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3841 write!(f, "AndNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
3842 }
3843}
3844
3845pub struct ArgumentsNode<'pr> {
3852 parser: *const pm_parser_t,
3854
3855 pointer: *mut pm_arguments_node_t,
3857
3858 marker: PhantomData<&'pr mut pm_arguments_node_t>
3860}
3861
3862impl<'pr> ArgumentsNode<'pr> {
3863 #[must_use]
3865 pub const fn as_node(&self) -> Node<'pr> {
3866 Node::ArgumentsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
3867 }
3868
3869 #[must_use]
3871 pub fn location(&self) -> Location<'pr> {
3872 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
3873 Location::new(self.parser, unsafe { &(*pointer) })
3874 }
3875
3876 #[must_use]
3878 pub fn flags(&self) -> pm_node_flags_t {
3879 unsafe { (*self.pointer).base.flags }
3880 }
3881
3882 #[must_use]
3884 pub fn is_contains_forwarding(&self) -> bool {
3885 (self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING) != 0
3886 }
3887
3888 #[must_use]
3890 pub fn is_contains_keywords(&self) -> bool {
3891 (self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS) != 0
3892 }
3893
3894 #[must_use]
3896 pub fn is_contains_keyword_splat(&self) -> bool {
3897 (self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT) != 0
3898 }
3899
3900 #[must_use]
3902 pub fn is_contains_splat(&self) -> bool {
3903 (self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT) != 0
3904 }
3905
3906 #[must_use]
3908 pub fn is_contains_multiple_splats(&self) -> bool {
3909 (self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS) != 0
3910 }
3911
3912 #[must_use]
3914 pub fn arguments(&self) -> NodeList<'pr> {
3915 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).arguments };
3916 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
3917 }
3918}
3919
3920impl std::fmt::Debug for ArgumentsNode<'_> {
3921 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
3922 write!(f, "ArgumentsNode({:?})", self.arguments())
3923 }
3924}
3925
3926pub struct ArrayNode<'pr> {
3933 parser: *const pm_parser_t,
3935
3936 pointer: *mut pm_array_node_t,
3938
3939 marker: PhantomData<&'pr mut pm_array_node_t>
3941}
3942
3943impl<'pr> ArrayNode<'pr> {
3944 #[must_use]
3946 pub const fn as_node(&self) -> Node<'pr> {
3947 Node::ArrayNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
3948 }
3949
3950 #[must_use]
3952 pub fn location(&self) -> Location<'pr> {
3953 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
3954 Location::new(self.parser, unsafe { &(*pointer) })
3955 }
3956
3957 #[must_use]
3959 pub fn flags(&self) -> pm_node_flags_t {
3960 unsafe { (*self.pointer).base.flags }
3961 }
3962
3963 #[must_use]
3965 pub fn is_contains_splat(&self) -> bool {
3966 (self.flags() & PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT) != 0
3967 }
3968
3969 #[must_use]
3971 pub fn elements(&self) -> NodeList<'pr> {
3972 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).elements };
3973 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
3974 }
3975
3976 #[must_use]
3978 pub fn opening_loc(&self) -> Option<Location<'pr>> {
3979 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
3980 let length = unsafe { (*pointer).length };
3981 if length == 0 {
3982 None
3983 } else {
3984 Some(Location::new(self.parser, unsafe { &(*pointer) }))
3985 }
3986 }
3987
3988 #[must_use]
3990 pub fn closing_loc(&self) -> Option<Location<'pr>> {
3991 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
3992 let length = unsafe { (*pointer).length };
3993 if length == 0 {
3994 None
3995 } else {
3996 Some(Location::new(self.parser, unsafe { &(*pointer) }))
3997 }
3998 }
3999}
4000
4001impl std::fmt::Debug for ArrayNode<'_> {
4002 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4003 write!(f, "ArrayNode({:?}, {:?}, {:?})", self.elements(), self.opening_loc(), self.closing_loc())
4004 }
4005}
4006
4007pub struct ArrayPatternNode<'pr> {
4034 parser: *const pm_parser_t,
4036
4037 pointer: *mut pm_array_pattern_node_t,
4039
4040 marker: PhantomData<&'pr mut pm_array_pattern_node_t>
4042}
4043
4044impl<'pr> ArrayPatternNode<'pr> {
4045 #[must_use]
4047 pub const fn as_node(&self) -> Node<'pr> {
4048 Node::ArrayPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4049 }
4050
4051 #[must_use]
4053 pub fn location(&self) -> Location<'pr> {
4054 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4055 Location::new(self.parser, unsafe { &(*pointer) })
4056 }
4057
4058 #[must_use]
4060 pub fn flags(&self) -> pm_node_flags_t {
4061 unsafe { (*self.pointer).base.flags }
4062 }
4063
4064 #[must_use]
4066 pub fn constant(&self) -> Option<Node<'pr>> {
4067 let node: *mut pm_node_t = unsafe { (*self.pointer).constant };
4068 if node.is_null() {
4069 None
4070 } else {
4071 Some(Node::new(self.parser, node))
4072 }
4073 }
4074
4075 #[must_use]
4077 pub fn requireds(&self) -> NodeList<'pr> {
4078 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).requireds };
4079 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
4080 }
4081
4082 #[must_use]
4084 pub fn rest(&self) -> Option<Node<'pr>> {
4085 let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
4086 if node.is_null() {
4087 None
4088 } else {
4089 Some(Node::new(self.parser, node))
4090 }
4091 }
4092
4093 #[must_use]
4095 pub fn posts(&self) -> NodeList<'pr> {
4096 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).posts };
4097 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
4098 }
4099
4100 #[must_use]
4102 pub fn opening_loc(&self) -> Option<Location<'pr>> {
4103 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
4104 let length = unsafe { (*pointer).length };
4105 if length == 0 {
4106 None
4107 } else {
4108 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4109 }
4110 }
4111
4112 #[must_use]
4114 pub fn closing_loc(&self) -> Option<Location<'pr>> {
4115 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
4116 let length = unsafe { (*pointer).length };
4117 if length == 0 {
4118 None
4119 } else {
4120 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4121 }
4122 }
4123}
4124
4125impl std::fmt::Debug for ArrayPatternNode<'_> {
4126 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4127 write!(f, "ArrayPatternNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.constant(), self.requireds(), self.rest(), self.posts(), self.opening_loc(), self.closing_loc())
4128 }
4129}
4130
4131pub struct AssocNode<'pr> {
4138 parser: *const pm_parser_t,
4140
4141 pointer: *mut pm_assoc_node_t,
4143
4144 marker: PhantomData<&'pr mut pm_assoc_node_t>
4146}
4147
4148impl<'pr> AssocNode<'pr> {
4149 #[must_use]
4151 pub const fn as_node(&self) -> Node<'pr> {
4152 Node::AssocNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4153 }
4154
4155 #[must_use]
4157 pub fn location(&self) -> Location<'pr> {
4158 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4159 Location::new(self.parser, unsafe { &(*pointer) })
4160 }
4161
4162 #[must_use]
4164 pub fn flags(&self) -> pm_node_flags_t {
4165 unsafe { (*self.pointer).base.flags }
4166 }
4167
4168 #[must_use]
4170 pub fn key(&self) -> Node<'pr> {
4171 let node: *mut pm_node_t = unsafe { (*self.pointer).key };
4172 Node::new(self.parser, node)
4173 }
4174
4175 #[must_use]
4177 pub fn value(&self) -> Node<'pr> {
4178 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
4179 Node::new(self.parser, node)
4180 }
4181
4182 #[must_use]
4184 pub fn operator_loc(&self) -> Option<Location<'pr>> {
4185 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
4186 let length = unsafe { (*pointer).length };
4187 if length == 0 {
4188 None
4189 } else {
4190 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4191 }
4192 }
4193}
4194
4195impl std::fmt::Debug for AssocNode<'_> {
4196 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4197 write!(f, "AssocNode({:?}, {:?}, {:?})", self.key(), self.value(), self.operator_loc())
4198 }
4199}
4200
4201pub struct AssocSplatNode<'pr> {
4208 parser: *const pm_parser_t,
4210
4211 pointer: *mut pm_assoc_splat_node_t,
4213
4214 marker: PhantomData<&'pr mut pm_assoc_splat_node_t>
4216}
4217
4218impl<'pr> AssocSplatNode<'pr> {
4219 #[must_use]
4221 pub const fn as_node(&self) -> Node<'pr> {
4222 Node::AssocSplatNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4223 }
4224
4225 #[must_use]
4227 pub fn location(&self) -> Location<'pr> {
4228 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4229 Location::new(self.parser, unsafe { &(*pointer) })
4230 }
4231
4232 #[must_use]
4234 pub fn flags(&self) -> pm_node_flags_t {
4235 unsafe { (*self.pointer).base.flags }
4236 }
4237
4238 #[must_use]
4240 pub fn value(&self) -> Option<Node<'pr>> {
4241 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
4242 if node.is_null() {
4243 None
4244 } else {
4245 Some(Node::new(self.parser, node))
4246 }
4247 }
4248
4249 #[must_use]
4251 pub fn operator_loc(&self) -> Location<'pr> {
4252 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
4253 Location::new(self.parser, unsafe { &(*pointer) })
4254 }
4255}
4256
4257impl std::fmt::Debug for AssocSplatNode<'_> {
4258 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4259 write!(f, "AssocSplatNode({:?}, {:?})", self.value(), self.operator_loc())
4260 }
4261}
4262
4263pub struct BackReferenceReadNode<'pr> {
4270 parser: *const pm_parser_t,
4272
4273 pointer: *mut pm_back_reference_read_node_t,
4275
4276 marker: PhantomData<&'pr mut pm_back_reference_read_node_t>
4278}
4279
4280impl<'pr> BackReferenceReadNode<'pr> {
4281 #[must_use]
4283 pub const fn as_node(&self) -> Node<'pr> {
4284 Node::BackReferenceReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4285 }
4286
4287 #[must_use]
4289 pub fn location(&self) -> Location<'pr> {
4290 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4291 Location::new(self.parser, unsafe { &(*pointer) })
4292 }
4293
4294 #[must_use]
4296 pub fn flags(&self) -> pm_node_flags_t {
4297 unsafe { (*self.pointer).base.flags }
4298 }
4299
4300 #[must_use]
4302 pub fn name(&self) -> ConstantId<'pr> {
4303 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
4304 }
4305}
4306
4307impl std::fmt::Debug for BackReferenceReadNode<'_> {
4308 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4309 write!(f, "BackReferenceReadNode({:?})", self.name())
4310 }
4311}
4312
4313pub struct BeginNode<'pr> {
4322 parser: *const pm_parser_t,
4324
4325 pointer: *mut pm_begin_node_t,
4327
4328 marker: PhantomData<&'pr mut pm_begin_node_t>
4330}
4331
4332impl<'pr> BeginNode<'pr> {
4333 #[must_use]
4335 pub const fn as_node(&self) -> Node<'pr> {
4336 Node::BeginNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4337 }
4338
4339 #[must_use]
4341 pub fn location(&self) -> Location<'pr> {
4342 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4343 Location::new(self.parser, unsafe { &(*pointer) })
4344 }
4345
4346 #[must_use]
4348 pub fn flags(&self) -> pm_node_flags_t {
4349 unsafe { (*self.pointer).base.flags }
4350 }
4351
4352 #[must_use]
4354 pub fn begin_keyword_loc(&self) -> Option<Location<'pr>> {
4355 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).begin_keyword_loc };
4356 let length = unsafe { (*pointer).length };
4357 if length == 0 {
4358 None
4359 } else {
4360 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4361 }
4362 }
4363
4364 #[must_use]
4366 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
4367 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
4368 if node.is_null() {
4369 None
4370 } else {
4371 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
4372 }
4373 }
4374
4375 #[must_use]
4377 pub fn rescue_clause(&self) -> Option<RescueNode<'pr>> {
4378 let node: *mut pm_rescue_node_t = unsafe { (*self.pointer).rescue_clause };
4379 if node.is_null() {
4380 None
4381 } else {
4382 Some(RescueNode { parser: self.parser, pointer: node, marker: PhantomData })
4383 }
4384 }
4385
4386 #[must_use]
4388 pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
4389 let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
4390 if node.is_null() {
4391 None
4392 } else {
4393 Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
4394 }
4395 }
4396
4397 #[must_use]
4399 pub fn ensure_clause(&self) -> Option<EnsureNode<'pr>> {
4400 let node: *mut pm_ensure_node_t = unsafe { (*self.pointer).ensure_clause };
4401 if node.is_null() {
4402 None
4403 } else {
4404 Some(EnsureNode { parser: self.parser, pointer: node, marker: PhantomData })
4405 }
4406 }
4407
4408 #[must_use]
4410 pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
4411 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
4412 let length = unsafe { (*pointer).length };
4413 if length == 0 {
4414 None
4415 } else {
4416 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4417 }
4418 }
4419}
4420
4421impl std::fmt::Debug for BeginNode<'_> {
4422 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4423 write!(f, "BeginNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.begin_keyword_loc(), self.statements(), self.rescue_clause(), self.else_clause(), self.ensure_clause(), self.end_keyword_loc())
4424 }
4425}
4426
4427pub struct BlockArgumentNode<'pr> {
4434 parser: *const pm_parser_t,
4436
4437 pointer: *mut pm_block_argument_node_t,
4439
4440 marker: PhantomData<&'pr mut pm_block_argument_node_t>
4442}
4443
4444impl<'pr> BlockArgumentNode<'pr> {
4445 #[must_use]
4447 pub const fn as_node(&self) -> Node<'pr> {
4448 Node::BlockArgumentNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4449 }
4450
4451 #[must_use]
4453 pub fn location(&self) -> Location<'pr> {
4454 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4455 Location::new(self.parser, unsafe { &(*pointer) })
4456 }
4457
4458 #[must_use]
4460 pub fn flags(&self) -> pm_node_flags_t {
4461 unsafe { (*self.pointer).base.flags }
4462 }
4463
4464 #[must_use]
4466 pub fn expression(&self) -> Option<Node<'pr>> {
4467 let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
4468 if node.is_null() {
4469 None
4470 } else {
4471 Some(Node::new(self.parser, node))
4472 }
4473 }
4474
4475 #[must_use]
4477 pub fn operator_loc(&self) -> Location<'pr> {
4478 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
4479 Location::new(self.parser, unsafe { &(*pointer) })
4480 }
4481}
4482
4483impl std::fmt::Debug for BlockArgumentNode<'_> {
4484 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4485 write!(f, "BlockArgumentNode({:?}, {:?})", self.expression(), self.operator_loc())
4486 }
4487}
4488
4489pub struct BlockLocalVariableNode<'pr> {
4496 parser: *const pm_parser_t,
4498
4499 pointer: *mut pm_block_local_variable_node_t,
4501
4502 marker: PhantomData<&'pr mut pm_block_local_variable_node_t>
4504}
4505
4506impl<'pr> BlockLocalVariableNode<'pr> {
4507 #[must_use]
4509 pub const fn as_node(&self) -> Node<'pr> {
4510 Node::BlockLocalVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4511 }
4512
4513 #[must_use]
4515 pub fn location(&self) -> Location<'pr> {
4516 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4517 Location::new(self.parser, unsafe { &(*pointer) })
4518 }
4519
4520 #[must_use]
4522 pub fn flags(&self) -> pm_node_flags_t {
4523 unsafe { (*self.pointer).base.flags }
4524 }
4525
4526 #[must_use]
4528 pub fn is_repeated_parameter(&self) -> bool {
4529 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
4530 }
4531
4532 #[must_use]
4534 pub fn name(&self) -> ConstantId<'pr> {
4535 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
4536 }
4537}
4538
4539impl std::fmt::Debug for BlockLocalVariableNode<'_> {
4540 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4541 write!(f, "BlockLocalVariableNode({:?})", self.name())
4542 }
4543}
4544
4545pub struct BlockNode<'pr> {
4552 parser: *const pm_parser_t,
4554
4555 pointer: *mut pm_block_node_t,
4557
4558 marker: PhantomData<&'pr mut pm_block_node_t>
4560}
4561
4562impl<'pr> BlockNode<'pr> {
4563 #[must_use]
4565 pub const fn as_node(&self) -> Node<'pr> {
4566 Node::BlockNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4567 }
4568
4569 #[must_use]
4571 pub fn location(&self) -> Location<'pr> {
4572 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4573 Location::new(self.parser, unsafe { &(*pointer) })
4574 }
4575
4576 #[must_use]
4578 pub fn flags(&self) -> pm_node_flags_t {
4579 unsafe { (*self.pointer).base.flags }
4580 }
4581
4582 #[must_use]
4584 pub fn locals(&self) -> ConstantList<'pr> {
4585 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
4586 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
4587 }
4588
4589 #[must_use]
4591 pub fn parameters(&self) -> Option<Node<'pr>> {
4592 let node: *mut pm_node_t = unsafe { (*self.pointer).parameters };
4593 if node.is_null() {
4594 None
4595 } else {
4596 Some(Node::new(self.parser, node))
4597 }
4598 }
4599
4600 #[must_use]
4602 pub fn body(&self) -> Option<Node<'pr>> {
4603 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
4604 if node.is_null() {
4605 None
4606 } else {
4607 Some(Node::new(self.parser, node))
4608 }
4609 }
4610
4611 #[must_use]
4613 pub fn opening_loc(&self) -> Location<'pr> {
4614 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
4615 Location::new(self.parser, unsafe { &(*pointer) })
4616 }
4617
4618 #[must_use]
4620 pub fn closing_loc(&self) -> Location<'pr> {
4621 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
4622 Location::new(self.parser, unsafe { &(*pointer) })
4623 }
4624}
4625
4626impl std::fmt::Debug for BlockNode<'_> {
4627 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4628 write!(f, "BlockNode({:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.parameters(), self.body(), self.opening_loc(), self.closing_loc())
4629 }
4630}
4631
4632pub struct BlockParameterNode<'pr> {
4640 parser: *const pm_parser_t,
4642
4643 pointer: *mut pm_block_parameter_node_t,
4645
4646 marker: PhantomData<&'pr mut pm_block_parameter_node_t>
4648}
4649
4650impl<'pr> BlockParameterNode<'pr> {
4651 #[must_use]
4653 pub const fn as_node(&self) -> Node<'pr> {
4654 Node::BlockParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4655 }
4656
4657 #[must_use]
4659 pub fn location(&self) -> Location<'pr> {
4660 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4661 Location::new(self.parser, unsafe { &(*pointer) })
4662 }
4663
4664 #[must_use]
4666 pub fn flags(&self) -> pm_node_flags_t {
4667 unsafe { (*self.pointer).base.flags }
4668 }
4669
4670 #[must_use]
4672 pub fn is_repeated_parameter(&self) -> bool {
4673 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
4674 }
4675
4676 #[must_use]
4678 pub fn name(&self) -> Option<ConstantId<'pr>> {
4679 let id = unsafe { (*self.pointer).name };
4680 if id == 0 {
4681 None
4682 } else {
4683 Some(ConstantId::new(self.parser, id))
4684 }
4685 }
4686
4687 #[must_use]
4689 pub fn name_loc(&self) -> Option<Location<'pr>> {
4690 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
4691 let length = unsafe { (*pointer).length };
4692 if length == 0 {
4693 None
4694 } else {
4695 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4696 }
4697 }
4698
4699 #[must_use]
4701 pub fn operator_loc(&self) -> Location<'pr> {
4702 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
4703 Location::new(self.parser, unsafe { &(*pointer) })
4704 }
4705}
4706
4707impl std::fmt::Debug for BlockParameterNode<'_> {
4708 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4709 write!(f, "BlockParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc())
4710 }
4711}
4712
4713pub struct BlockParametersNode<'pr> {
4726 parser: *const pm_parser_t,
4728
4729 pointer: *mut pm_block_parameters_node_t,
4731
4732 marker: PhantomData<&'pr mut pm_block_parameters_node_t>
4734}
4735
4736impl<'pr> BlockParametersNode<'pr> {
4737 #[must_use]
4739 pub const fn as_node(&self) -> Node<'pr> {
4740 Node::BlockParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4741 }
4742
4743 #[must_use]
4745 pub fn location(&self) -> Location<'pr> {
4746 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4747 Location::new(self.parser, unsafe { &(*pointer) })
4748 }
4749
4750 #[must_use]
4752 pub fn flags(&self) -> pm_node_flags_t {
4753 unsafe { (*self.pointer).base.flags }
4754 }
4755
4756 #[must_use]
4758 pub fn parameters(&self) -> Option<ParametersNode<'pr>> {
4759 let node: *mut pm_parameters_node_t = unsafe { (*self.pointer).parameters };
4760 if node.is_null() {
4761 None
4762 } else {
4763 Some(ParametersNode { parser: self.parser, pointer: node, marker: PhantomData })
4764 }
4765 }
4766
4767 #[must_use]
4769 pub fn locals(&self) -> NodeList<'pr> {
4770 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).locals };
4771 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
4772 }
4773
4774 #[must_use]
4776 pub fn opening_loc(&self) -> Option<Location<'pr>> {
4777 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
4778 let length = unsafe { (*pointer).length };
4779 if length == 0 {
4780 None
4781 } else {
4782 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4783 }
4784 }
4785
4786 #[must_use]
4788 pub fn closing_loc(&self) -> Option<Location<'pr>> {
4789 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
4790 let length = unsafe { (*pointer).length };
4791 if length == 0 {
4792 None
4793 } else {
4794 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4795 }
4796 }
4797}
4798
4799impl std::fmt::Debug for BlockParametersNode<'_> {
4800 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4801 write!(f, "BlockParametersNode({:?}, {:?}, {:?}, {:?})", self.parameters(), self.locals(), self.opening_loc(), self.closing_loc())
4802 }
4803}
4804
4805pub struct BreakNode<'pr> {
4812 parser: *const pm_parser_t,
4814
4815 pointer: *mut pm_break_node_t,
4817
4818 marker: PhantomData<&'pr mut pm_break_node_t>
4820}
4821
4822impl<'pr> BreakNode<'pr> {
4823 #[must_use]
4825 pub const fn as_node(&self) -> Node<'pr> {
4826 Node::BreakNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4827 }
4828
4829 #[must_use]
4831 pub fn location(&self) -> Location<'pr> {
4832 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4833 Location::new(self.parser, unsafe { &(*pointer) })
4834 }
4835
4836 #[must_use]
4838 pub fn flags(&self) -> pm_node_flags_t {
4839 unsafe { (*self.pointer).base.flags }
4840 }
4841
4842 #[must_use]
4844 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
4845 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
4846 if node.is_null() {
4847 None
4848 } else {
4849 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
4850 }
4851 }
4852
4853 #[must_use]
4855 pub fn keyword_loc(&self) -> Location<'pr> {
4856 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
4857 Location::new(self.parser, unsafe { &(*pointer) })
4858 }
4859}
4860
4861impl std::fmt::Debug for BreakNode<'_> {
4862 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4863 write!(f, "BreakNode({:?}, {:?})", self.arguments(), self.keyword_loc())
4864 }
4865}
4866
4867pub struct CallAndWriteNode<'pr> {
4874 parser: *const pm_parser_t,
4876
4877 pointer: *mut pm_call_and_write_node_t,
4879
4880 marker: PhantomData<&'pr mut pm_call_and_write_node_t>
4882}
4883
4884impl<'pr> CallAndWriteNode<'pr> {
4885 #[must_use]
4887 pub const fn as_node(&self) -> Node<'pr> {
4888 Node::CallAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
4889 }
4890
4891 #[must_use]
4893 pub fn location(&self) -> Location<'pr> {
4894 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
4895 Location::new(self.parser, unsafe { &(*pointer) })
4896 }
4897
4898 #[must_use]
4900 pub fn flags(&self) -> pm_node_flags_t {
4901 unsafe { (*self.pointer).base.flags }
4902 }
4903
4904 #[must_use]
4906 pub fn is_safe_navigation(&self) -> bool {
4907 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
4908 }
4909
4910 #[must_use]
4912 pub fn is_variable_call(&self) -> bool {
4913 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
4914 }
4915
4916 #[must_use]
4918 pub fn is_attribute_write(&self) -> bool {
4919 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
4920 }
4921
4922 #[must_use]
4924 pub fn is_ignore_visibility(&self) -> bool {
4925 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
4926 }
4927
4928 #[must_use]
4930 pub fn receiver(&self) -> Option<Node<'pr>> {
4931 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
4932 if node.is_null() {
4933 None
4934 } else {
4935 Some(Node::new(self.parser, node))
4936 }
4937 }
4938
4939 #[must_use]
4941 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
4942 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
4943 let length = unsafe { (*pointer).length };
4944 if length == 0 {
4945 None
4946 } else {
4947 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4948 }
4949 }
4950
4951 #[must_use]
4953 pub fn message_loc(&self) -> Option<Location<'pr>> {
4954 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).message_loc };
4955 let length = unsafe { (*pointer).length };
4956 if length == 0 {
4957 None
4958 } else {
4959 Some(Location::new(self.parser, unsafe { &(*pointer) }))
4960 }
4961 }
4962
4963 #[must_use]
4965 pub fn read_name(&self) -> ConstantId<'pr> {
4966 ConstantId::new(self.parser, unsafe { (*self.pointer).read_name })
4967 }
4968
4969 #[must_use]
4971 pub fn write_name(&self) -> ConstantId<'pr> {
4972 ConstantId::new(self.parser, unsafe { (*self.pointer).write_name })
4973 }
4974
4975 #[must_use]
4977 pub fn operator_loc(&self) -> Location<'pr> {
4978 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
4979 Location::new(self.parser, unsafe { &(*pointer) })
4980 }
4981
4982 #[must_use]
4984 pub fn value(&self) -> Node<'pr> {
4985 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
4986 Node::new(self.parser, node)
4987 }
4988}
4989
4990impl std::fmt::Debug for CallAndWriteNode<'_> {
4991 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
4992 write!(f, "CallAndWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.message_loc(), self.read_name(), self.write_name(), self.operator_loc(), self.value())
4993 }
4994}
4995
4996pub struct CallNode<'pr> {
5028 parser: *const pm_parser_t,
5030
5031 pointer: *mut pm_call_node_t,
5033
5034 marker: PhantomData<&'pr mut pm_call_node_t>
5036}
5037
5038impl<'pr> CallNode<'pr> {
5039 #[must_use]
5041 pub const fn as_node(&self) -> Node<'pr> {
5042 Node::CallNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5043 }
5044
5045 #[must_use]
5047 pub fn location(&self) -> Location<'pr> {
5048 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5049 Location::new(self.parser, unsafe { &(*pointer) })
5050 }
5051
5052 #[must_use]
5054 pub fn flags(&self) -> pm_node_flags_t {
5055 unsafe { (*self.pointer).base.flags }
5056 }
5057
5058 #[must_use]
5060 pub fn is_safe_navigation(&self) -> bool {
5061 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
5062 }
5063
5064 #[must_use]
5066 pub fn is_variable_call(&self) -> bool {
5067 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
5068 }
5069
5070 #[must_use]
5072 pub fn is_attribute_write(&self) -> bool {
5073 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
5074 }
5075
5076 #[must_use]
5078 pub fn is_ignore_visibility(&self) -> bool {
5079 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
5080 }
5081
5082 #[must_use]
5084 pub fn receiver(&self) -> Option<Node<'pr>> {
5085 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
5086 if node.is_null() {
5087 None
5088 } else {
5089 Some(Node::new(self.parser, node))
5090 }
5091 }
5092
5093 #[must_use]
5095 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
5096 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
5097 let length = unsafe { (*pointer).length };
5098 if length == 0 {
5099 None
5100 } else {
5101 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5102 }
5103 }
5104
5105 #[must_use]
5107 pub fn name(&self) -> ConstantId<'pr> {
5108 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
5109 }
5110
5111 #[must_use]
5113 pub fn message_loc(&self) -> Option<Location<'pr>> {
5114 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).message_loc };
5115 let length = unsafe { (*pointer).length };
5116 if length == 0 {
5117 None
5118 } else {
5119 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5120 }
5121 }
5122
5123 #[must_use]
5125 pub fn opening_loc(&self) -> Option<Location<'pr>> {
5126 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
5127 let length = unsafe { (*pointer).length };
5128 if length == 0 {
5129 None
5130 } else {
5131 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5132 }
5133 }
5134
5135 #[must_use]
5137 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
5138 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
5139 if node.is_null() {
5140 None
5141 } else {
5142 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
5143 }
5144 }
5145
5146 #[must_use]
5148 pub fn closing_loc(&self) -> Option<Location<'pr>> {
5149 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
5150 let length = unsafe { (*pointer).length };
5151 if length == 0 {
5152 None
5153 } else {
5154 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5155 }
5156 }
5157
5158 #[must_use]
5160 pub fn equal_loc(&self) -> Option<Location<'pr>> {
5161 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).equal_loc };
5162 let length = unsafe { (*pointer).length };
5163 if length == 0 {
5164 None
5165 } else {
5166 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5167 }
5168 }
5169
5170 #[must_use]
5172 pub fn block(&self) -> Option<Node<'pr>> {
5173 let node: *mut pm_node_t = unsafe { (*self.pointer).block };
5174 if node.is_null() {
5175 None
5176 } else {
5177 Some(Node::new(self.parser, node))
5178 }
5179 }
5180}
5181
5182impl std::fmt::Debug for CallNode<'_> {
5183 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5184 write!(f, "CallNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.name(), self.message_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.equal_loc(), self.block())
5185 }
5186}
5187
5188pub struct CallOperatorWriteNode<'pr> {
5195 parser: *const pm_parser_t,
5197
5198 pointer: *mut pm_call_operator_write_node_t,
5200
5201 marker: PhantomData<&'pr mut pm_call_operator_write_node_t>
5203}
5204
5205impl<'pr> CallOperatorWriteNode<'pr> {
5206 #[must_use]
5208 pub const fn as_node(&self) -> Node<'pr> {
5209 Node::CallOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5210 }
5211
5212 #[must_use]
5214 pub fn location(&self) -> Location<'pr> {
5215 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5216 Location::new(self.parser, unsafe { &(*pointer) })
5217 }
5218
5219 #[must_use]
5221 pub fn flags(&self) -> pm_node_flags_t {
5222 unsafe { (*self.pointer).base.flags }
5223 }
5224
5225 #[must_use]
5227 pub fn is_safe_navigation(&self) -> bool {
5228 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
5229 }
5230
5231 #[must_use]
5233 pub fn is_variable_call(&self) -> bool {
5234 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
5235 }
5236
5237 #[must_use]
5239 pub fn is_attribute_write(&self) -> bool {
5240 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
5241 }
5242
5243 #[must_use]
5245 pub fn is_ignore_visibility(&self) -> bool {
5246 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
5247 }
5248
5249 #[must_use]
5251 pub fn receiver(&self) -> Option<Node<'pr>> {
5252 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
5253 if node.is_null() {
5254 None
5255 } else {
5256 Some(Node::new(self.parser, node))
5257 }
5258 }
5259
5260 #[must_use]
5262 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
5263 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
5264 let length = unsafe { (*pointer).length };
5265 if length == 0 {
5266 None
5267 } else {
5268 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5269 }
5270 }
5271
5272 #[must_use]
5274 pub fn message_loc(&self) -> Option<Location<'pr>> {
5275 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).message_loc };
5276 let length = unsafe { (*pointer).length };
5277 if length == 0 {
5278 None
5279 } else {
5280 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5281 }
5282 }
5283
5284 #[must_use]
5286 pub fn read_name(&self) -> ConstantId<'pr> {
5287 ConstantId::new(self.parser, unsafe { (*self.pointer).read_name })
5288 }
5289
5290 #[must_use]
5292 pub fn write_name(&self) -> ConstantId<'pr> {
5293 ConstantId::new(self.parser, unsafe { (*self.pointer).write_name })
5294 }
5295
5296 #[must_use]
5298 pub fn binary_operator(&self) -> ConstantId<'pr> {
5299 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
5300 }
5301
5302 #[must_use]
5304 pub fn binary_operator_loc(&self) -> Location<'pr> {
5305 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
5306 Location::new(self.parser, unsafe { &(*pointer) })
5307 }
5308
5309 #[must_use]
5311 pub fn value(&self) -> Node<'pr> {
5312 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
5313 Node::new(self.parser, node)
5314 }
5315}
5316
5317impl std::fmt::Debug for CallOperatorWriteNode<'_> {
5318 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5319 write!(f, "CallOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.message_loc(), self.read_name(), self.write_name(), self.binary_operator(), self.binary_operator_loc(), self.value())
5320 }
5321}
5322
5323pub struct CallOrWriteNode<'pr> {
5330 parser: *const pm_parser_t,
5332
5333 pointer: *mut pm_call_or_write_node_t,
5335
5336 marker: PhantomData<&'pr mut pm_call_or_write_node_t>
5338}
5339
5340impl<'pr> CallOrWriteNode<'pr> {
5341 #[must_use]
5343 pub const fn as_node(&self) -> Node<'pr> {
5344 Node::CallOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5345 }
5346
5347 #[must_use]
5349 pub fn location(&self) -> Location<'pr> {
5350 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5351 Location::new(self.parser, unsafe { &(*pointer) })
5352 }
5353
5354 #[must_use]
5356 pub fn flags(&self) -> pm_node_flags_t {
5357 unsafe { (*self.pointer).base.flags }
5358 }
5359
5360 #[must_use]
5362 pub fn is_safe_navigation(&self) -> bool {
5363 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
5364 }
5365
5366 #[must_use]
5368 pub fn is_variable_call(&self) -> bool {
5369 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
5370 }
5371
5372 #[must_use]
5374 pub fn is_attribute_write(&self) -> bool {
5375 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
5376 }
5377
5378 #[must_use]
5380 pub fn is_ignore_visibility(&self) -> bool {
5381 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
5382 }
5383
5384 #[must_use]
5386 pub fn receiver(&self) -> Option<Node<'pr>> {
5387 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
5388 if node.is_null() {
5389 None
5390 } else {
5391 Some(Node::new(self.parser, node))
5392 }
5393 }
5394
5395 #[must_use]
5397 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
5398 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
5399 let length = unsafe { (*pointer).length };
5400 if length == 0 {
5401 None
5402 } else {
5403 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5404 }
5405 }
5406
5407 #[must_use]
5409 pub fn message_loc(&self) -> Option<Location<'pr>> {
5410 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).message_loc };
5411 let length = unsafe { (*pointer).length };
5412 if length == 0 {
5413 None
5414 } else {
5415 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5416 }
5417 }
5418
5419 #[must_use]
5421 pub fn read_name(&self) -> ConstantId<'pr> {
5422 ConstantId::new(self.parser, unsafe { (*self.pointer).read_name })
5423 }
5424
5425 #[must_use]
5427 pub fn write_name(&self) -> ConstantId<'pr> {
5428 ConstantId::new(self.parser, unsafe { (*self.pointer).write_name })
5429 }
5430
5431 #[must_use]
5433 pub fn operator_loc(&self) -> Location<'pr> {
5434 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
5435 Location::new(self.parser, unsafe { &(*pointer) })
5436 }
5437
5438 #[must_use]
5440 pub fn value(&self) -> Node<'pr> {
5441 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
5442 Node::new(self.parser, node)
5443 }
5444}
5445
5446impl std::fmt::Debug for CallOrWriteNode<'_> {
5447 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5448 write!(f, "CallOrWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.message_loc(), self.read_name(), self.write_name(), self.operator_loc(), self.value())
5449 }
5450}
5451
5452pub struct CallTargetNode<'pr> {
5471 parser: *const pm_parser_t,
5473
5474 pointer: *mut pm_call_target_node_t,
5476
5477 marker: PhantomData<&'pr mut pm_call_target_node_t>
5479}
5480
5481impl<'pr> CallTargetNode<'pr> {
5482 #[must_use]
5484 pub const fn as_node(&self) -> Node<'pr> {
5485 Node::CallTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5486 }
5487
5488 #[must_use]
5490 pub fn location(&self) -> Location<'pr> {
5491 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5492 Location::new(self.parser, unsafe { &(*pointer) })
5493 }
5494
5495 #[must_use]
5497 pub fn flags(&self) -> pm_node_flags_t {
5498 unsafe { (*self.pointer).base.flags }
5499 }
5500
5501 #[must_use]
5503 pub fn is_safe_navigation(&self) -> bool {
5504 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
5505 }
5506
5507 #[must_use]
5509 pub fn is_variable_call(&self) -> bool {
5510 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
5511 }
5512
5513 #[must_use]
5515 pub fn is_attribute_write(&self) -> bool {
5516 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
5517 }
5518
5519 #[must_use]
5521 pub fn is_ignore_visibility(&self) -> bool {
5522 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
5523 }
5524
5525 #[must_use]
5527 pub fn receiver(&self) -> Node<'pr> {
5528 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
5529 Node::new(self.parser, node)
5530 }
5531
5532 #[must_use]
5534 pub fn call_operator_loc(&self) -> Location<'pr> {
5535 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
5536 Location::new(self.parser, unsafe { &(*pointer) })
5537 }
5538
5539 #[must_use]
5541 pub fn name(&self) -> ConstantId<'pr> {
5542 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
5543 }
5544
5545 #[must_use]
5547 pub fn message_loc(&self) -> Location<'pr> {
5548 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).message_loc };
5549 Location::new(self.parser, unsafe { &(*pointer) })
5550 }
5551}
5552
5553impl std::fmt::Debug for CallTargetNode<'_> {
5554 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5555 write!(f, "CallTargetNode({:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.name(), self.message_loc())
5556 }
5557}
5558
5559pub struct CapturePatternNode<'pr> {
5566 parser: *const pm_parser_t,
5568
5569 pointer: *mut pm_capture_pattern_node_t,
5571
5572 marker: PhantomData<&'pr mut pm_capture_pattern_node_t>
5574}
5575
5576impl<'pr> CapturePatternNode<'pr> {
5577 #[must_use]
5579 pub const fn as_node(&self) -> Node<'pr> {
5580 Node::CapturePatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5581 }
5582
5583 #[must_use]
5585 pub fn location(&self) -> Location<'pr> {
5586 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5587 Location::new(self.parser, unsafe { &(*pointer) })
5588 }
5589
5590 #[must_use]
5592 pub fn flags(&self) -> pm_node_flags_t {
5593 unsafe { (*self.pointer).base.flags }
5594 }
5595
5596 #[must_use]
5598 pub fn value(&self) -> Node<'pr> {
5599 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
5600 Node::new(self.parser, node)
5601 }
5602
5603 #[must_use]
5605 pub fn target(&self) -> LocalVariableTargetNode<'pr> {
5606 let node: *mut pm_local_variable_target_node_t = unsafe { (*self.pointer).target };
5607 LocalVariableTargetNode { parser: self.parser, pointer: node, marker: PhantomData }
5608 }
5609
5610 #[must_use]
5612 pub fn operator_loc(&self) -> Location<'pr> {
5613 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
5614 Location::new(self.parser, unsafe { &(*pointer) })
5615 }
5616}
5617
5618impl std::fmt::Debug for CapturePatternNode<'_> {
5619 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5620 write!(f, "CapturePatternNode({:?}, {:?}, {:?})", self.value(), self.target(), self.operator_loc())
5621 }
5622}
5623
5624pub struct CaseMatchNode<'pr> {
5633 parser: *const pm_parser_t,
5635
5636 pointer: *mut pm_case_match_node_t,
5638
5639 marker: PhantomData<&'pr mut pm_case_match_node_t>
5641}
5642
5643impl<'pr> CaseMatchNode<'pr> {
5644 #[must_use]
5646 pub const fn as_node(&self) -> Node<'pr> {
5647 Node::CaseMatchNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5648 }
5649
5650 #[must_use]
5652 pub fn location(&self) -> Location<'pr> {
5653 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5654 Location::new(self.parser, unsafe { &(*pointer) })
5655 }
5656
5657 #[must_use]
5659 pub fn flags(&self) -> pm_node_flags_t {
5660 unsafe { (*self.pointer).base.flags }
5661 }
5662
5663 #[must_use]
5665 pub fn predicate(&self) -> Option<Node<'pr>> {
5666 let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
5667 if node.is_null() {
5668 None
5669 } else {
5670 Some(Node::new(self.parser, node))
5671 }
5672 }
5673
5674 #[must_use]
5676 pub fn conditions(&self) -> NodeList<'pr> {
5677 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).conditions };
5678 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
5679 }
5680
5681 #[must_use]
5683 pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
5684 let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
5685 if node.is_null() {
5686 None
5687 } else {
5688 Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
5689 }
5690 }
5691
5692 #[must_use]
5694 pub fn case_keyword_loc(&self) -> Location<'pr> {
5695 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).case_keyword_loc };
5696 Location::new(self.parser, unsafe { &(*pointer) })
5697 }
5698
5699 #[must_use]
5701 pub fn end_keyword_loc(&self) -> Location<'pr> {
5702 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
5703 Location::new(self.parser, unsafe { &(*pointer) })
5704 }
5705}
5706
5707impl std::fmt::Debug for CaseMatchNode<'_> {
5708 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5709 write!(f, "CaseMatchNode({:?}, {:?}, {:?}, {:?}, {:?})", self.predicate(), self.conditions(), self.else_clause(), self.case_keyword_loc(), self.end_keyword_loc())
5710 }
5711}
5712
5713pub struct CaseNode<'pr> {
5722 parser: *const pm_parser_t,
5724
5725 pointer: *mut pm_case_node_t,
5727
5728 marker: PhantomData<&'pr mut pm_case_node_t>
5730}
5731
5732impl<'pr> CaseNode<'pr> {
5733 #[must_use]
5735 pub const fn as_node(&self) -> Node<'pr> {
5736 Node::CaseNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5737 }
5738
5739 #[must_use]
5741 pub fn location(&self) -> Location<'pr> {
5742 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5743 Location::new(self.parser, unsafe { &(*pointer) })
5744 }
5745
5746 #[must_use]
5748 pub fn flags(&self) -> pm_node_flags_t {
5749 unsafe { (*self.pointer).base.flags }
5750 }
5751
5752 #[must_use]
5754 pub fn predicate(&self) -> Option<Node<'pr>> {
5755 let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
5756 if node.is_null() {
5757 None
5758 } else {
5759 Some(Node::new(self.parser, node))
5760 }
5761 }
5762
5763 #[must_use]
5765 pub fn conditions(&self) -> NodeList<'pr> {
5766 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).conditions };
5767 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
5768 }
5769
5770 #[must_use]
5772 pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
5773 let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
5774 if node.is_null() {
5775 None
5776 } else {
5777 Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
5778 }
5779 }
5780
5781 #[must_use]
5783 pub fn case_keyword_loc(&self) -> Location<'pr> {
5784 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).case_keyword_loc };
5785 Location::new(self.parser, unsafe { &(*pointer) })
5786 }
5787
5788 #[must_use]
5790 pub fn end_keyword_loc(&self) -> Location<'pr> {
5791 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
5792 Location::new(self.parser, unsafe { &(*pointer) })
5793 }
5794}
5795
5796impl std::fmt::Debug for CaseNode<'_> {
5797 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5798 write!(f, "CaseNode({:?}, {:?}, {:?}, {:?}, {:?})", self.predicate(), self.conditions(), self.else_clause(), self.case_keyword_loc(), self.end_keyword_loc())
5799 }
5800}
5801
5802pub struct ClassNode<'pr> {
5809 parser: *const pm_parser_t,
5811
5812 pointer: *mut pm_class_node_t,
5814
5815 marker: PhantomData<&'pr mut pm_class_node_t>
5817}
5818
5819impl<'pr> ClassNode<'pr> {
5820 #[must_use]
5822 pub const fn as_node(&self) -> Node<'pr> {
5823 Node::ClassNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5824 }
5825
5826 #[must_use]
5828 pub fn location(&self) -> Location<'pr> {
5829 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5830 Location::new(self.parser, unsafe { &(*pointer) })
5831 }
5832
5833 #[must_use]
5835 pub fn flags(&self) -> pm_node_flags_t {
5836 unsafe { (*self.pointer).base.flags }
5837 }
5838
5839 #[must_use]
5841 pub fn locals(&self) -> ConstantList<'pr> {
5842 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
5843 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
5844 }
5845
5846 #[must_use]
5848 pub fn class_keyword_loc(&self) -> Location<'pr> {
5849 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).class_keyword_loc };
5850 Location::new(self.parser, unsafe { &(*pointer) })
5851 }
5852
5853 #[must_use]
5855 pub fn constant_path(&self) -> Node<'pr> {
5856 let node: *mut pm_node_t = unsafe { (*self.pointer).constant_path };
5857 Node::new(self.parser, node)
5858 }
5859
5860 #[must_use]
5862 pub fn inheritance_operator_loc(&self) -> Option<Location<'pr>> {
5863 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).inheritance_operator_loc };
5864 let length = unsafe { (*pointer).length };
5865 if length == 0 {
5866 None
5867 } else {
5868 Some(Location::new(self.parser, unsafe { &(*pointer) }))
5869 }
5870 }
5871
5872 #[must_use]
5874 pub fn superclass(&self) -> Option<Node<'pr>> {
5875 let node: *mut pm_node_t = unsafe { (*self.pointer).superclass };
5876 if node.is_null() {
5877 None
5878 } else {
5879 Some(Node::new(self.parser, node))
5880 }
5881 }
5882
5883 #[must_use]
5885 pub fn body(&self) -> Option<Node<'pr>> {
5886 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
5887 if node.is_null() {
5888 None
5889 } else {
5890 Some(Node::new(self.parser, node))
5891 }
5892 }
5893
5894 #[must_use]
5896 pub fn end_keyword_loc(&self) -> Location<'pr> {
5897 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
5898 Location::new(self.parser, unsafe { &(*pointer) })
5899 }
5900
5901 #[must_use]
5903 pub fn name(&self) -> ConstantId<'pr> {
5904 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
5905 }
5906}
5907
5908impl std::fmt::Debug for ClassNode<'_> {
5909 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5910 write!(f, "ClassNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.class_keyword_loc(), self.constant_path(), self.inheritance_operator_loc(), self.superclass(), self.body(), self.end_keyword_loc(), self.name())
5911 }
5912}
5913
5914pub struct ClassVariableAndWriteNode<'pr> {
5921 parser: *const pm_parser_t,
5923
5924 pointer: *mut pm_class_variable_and_write_node_t,
5926
5927 marker: PhantomData<&'pr mut pm_class_variable_and_write_node_t>
5929}
5930
5931impl<'pr> ClassVariableAndWriteNode<'pr> {
5932 #[must_use]
5934 pub const fn as_node(&self) -> Node<'pr> {
5935 Node::ClassVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
5936 }
5937
5938 #[must_use]
5940 pub fn location(&self) -> Location<'pr> {
5941 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
5942 Location::new(self.parser, unsafe { &(*pointer) })
5943 }
5944
5945 #[must_use]
5947 pub fn flags(&self) -> pm_node_flags_t {
5948 unsafe { (*self.pointer).base.flags }
5949 }
5950
5951 #[must_use]
5953 pub fn name(&self) -> ConstantId<'pr> {
5954 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
5955 }
5956
5957 #[must_use]
5959 pub fn name_loc(&self) -> Location<'pr> {
5960 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
5961 Location::new(self.parser, unsafe { &(*pointer) })
5962 }
5963
5964 #[must_use]
5966 pub fn operator_loc(&self) -> Location<'pr> {
5967 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
5968 Location::new(self.parser, unsafe { &(*pointer) })
5969 }
5970
5971 #[must_use]
5973 pub fn value(&self) -> Node<'pr> {
5974 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
5975 Node::new(self.parser, node)
5976 }
5977}
5978
5979impl std::fmt::Debug for ClassVariableAndWriteNode<'_> {
5980 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
5981 write!(f, "ClassVariableAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
5982 }
5983}
5984
5985pub struct ClassVariableOperatorWriteNode<'pr> {
5992 parser: *const pm_parser_t,
5994
5995 pointer: *mut pm_class_variable_operator_write_node_t,
5997
5998 marker: PhantomData<&'pr mut pm_class_variable_operator_write_node_t>
6000}
6001
6002impl<'pr> ClassVariableOperatorWriteNode<'pr> {
6003 #[must_use]
6005 pub const fn as_node(&self) -> Node<'pr> {
6006 Node::ClassVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6007 }
6008
6009 #[must_use]
6011 pub fn location(&self) -> Location<'pr> {
6012 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6013 Location::new(self.parser, unsafe { &(*pointer) })
6014 }
6015
6016 #[must_use]
6018 pub fn flags(&self) -> pm_node_flags_t {
6019 unsafe { (*self.pointer).base.flags }
6020 }
6021
6022 #[must_use]
6024 pub fn name(&self) -> ConstantId<'pr> {
6025 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6026 }
6027
6028 #[must_use]
6030 pub fn name_loc(&self) -> Location<'pr> {
6031 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6032 Location::new(self.parser, unsafe { &(*pointer) })
6033 }
6034
6035 #[must_use]
6037 pub fn binary_operator_loc(&self) -> Location<'pr> {
6038 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
6039 Location::new(self.parser, unsafe { &(*pointer) })
6040 }
6041
6042 #[must_use]
6044 pub fn value(&self) -> Node<'pr> {
6045 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6046 Node::new(self.parser, node)
6047 }
6048
6049 #[must_use]
6051 pub fn binary_operator(&self) -> ConstantId<'pr> {
6052 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
6053 }
6054}
6055
6056impl std::fmt::Debug for ClassVariableOperatorWriteNode<'_> {
6057 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6058 write!(f, "ClassVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
6059 }
6060}
6061
6062pub struct ClassVariableOrWriteNode<'pr> {
6069 parser: *const pm_parser_t,
6071
6072 pointer: *mut pm_class_variable_or_write_node_t,
6074
6075 marker: PhantomData<&'pr mut pm_class_variable_or_write_node_t>
6077}
6078
6079impl<'pr> ClassVariableOrWriteNode<'pr> {
6080 #[must_use]
6082 pub const fn as_node(&self) -> Node<'pr> {
6083 Node::ClassVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6084 }
6085
6086 #[must_use]
6088 pub fn location(&self) -> Location<'pr> {
6089 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6090 Location::new(self.parser, unsafe { &(*pointer) })
6091 }
6092
6093 #[must_use]
6095 pub fn flags(&self) -> pm_node_flags_t {
6096 unsafe { (*self.pointer).base.flags }
6097 }
6098
6099 #[must_use]
6101 pub fn name(&self) -> ConstantId<'pr> {
6102 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6103 }
6104
6105 #[must_use]
6107 pub fn name_loc(&self) -> Location<'pr> {
6108 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6109 Location::new(self.parser, unsafe { &(*pointer) })
6110 }
6111
6112 #[must_use]
6114 pub fn operator_loc(&self) -> Location<'pr> {
6115 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6116 Location::new(self.parser, unsafe { &(*pointer) })
6117 }
6118
6119 #[must_use]
6121 pub fn value(&self) -> Node<'pr> {
6122 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6123 Node::new(self.parser, node)
6124 }
6125}
6126
6127impl std::fmt::Debug for ClassVariableOrWriteNode<'_> {
6128 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6129 write!(f, "ClassVariableOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
6130 }
6131}
6132
6133pub struct ClassVariableReadNode<'pr> {
6140 parser: *const pm_parser_t,
6142
6143 pointer: *mut pm_class_variable_read_node_t,
6145
6146 marker: PhantomData<&'pr mut pm_class_variable_read_node_t>
6148}
6149
6150impl<'pr> ClassVariableReadNode<'pr> {
6151 #[must_use]
6153 pub const fn as_node(&self) -> Node<'pr> {
6154 Node::ClassVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6155 }
6156
6157 #[must_use]
6159 pub fn location(&self) -> Location<'pr> {
6160 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6161 Location::new(self.parser, unsafe { &(*pointer) })
6162 }
6163
6164 #[must_use]
6166 pub fn flags(&self) -> pm_node_flags_t {
6167 unsafe { (*self.pointer).base.flags }
6168 }
6169
6170 #[must_use]
6172 pub fn name(&self) -> ConstantId<'pr> {
6173 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6174 }
6175}
6176
6177impl std::fmt::Debug for ClassVariableReadNode<'_> {
6178 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6179 write!(f, "ClassVariableReadNode({:?})", self.name())
6180 }
6181}
6182
6183pub struct ClassVariableTargetNode<'pr> {
6190 parser: *const pm_parser_t,
6192
6193 pointer: *mut pm_class_variable_target_node_t,
6195
6196 marker: PhantomData<&'pr mut pm_class_variable_target_node_t>
6198}
6199
6200impl<'pr> ClassVariableTargetNode<'pr> {
6201 #[must_use]
6203 pub const fn as_node(&self) -> Node<'pr> {
6204 Node::ClassVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6205 }
6206
6207 #[must_use]
6209 pub fn location(&self) -> Location<'pr> {
6210 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6211 Location::new(self.parser, unsafe { &(*pointer) })
6212 }
6213
6214 #[must_use]
6216 pub fn flags(&self) -> pm_node_flags_t {
6217 unsafe { (*self.pointer).base.flags }
6218 }
6219
6220 #[must_use]
6222 pub fn name(&self) -> ConstantId<'pr> {
6223 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6224 }
6225}
6226
6227impl std::fmt::Debug for ClassVariableTargetNode<'_> {
6228 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6229 write!(f, "ClassVariableTargetNode({:?})", self.name())
6230 }
6231}
6232
6233pub struct ClassVariableWriteNode<'pr> {
6240 parser: *const pm_parser_t,
6242
6243 pointer: *mut pm_class_variable_write_node_t,
6245
6246 marker: PhantomData<&'pr mut pm_class_variable_write_node_t>
6248}
6249
6250impl<'pr> ClassVariableWriteNode<'pr> {
6251 #[must_use]
6253 pub const fn as_node(&self) -> Node<'pr> {
6254 Node::ClassVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6255 }
6256
6257 #[must_use]
6259 pub fn location(&self) -> Location<'pr> {
6260 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6261 Location::new(self.parser, unsafe { &(*pointer) })
6262 }
6263
6264 #[must_use]
6266 pub fn flags(&self) -> pm_node_flags_t {
6267 unsafe { (*self.pointer).base.flags }
6268 }
6269
6270 #[must_use]
6272 pub fn name(&self) -> ConstantId<'pr> {
6273 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6274 }
6275
6276 #[must_use]
6278 pub fn name_loc(&self) -> Location<'pr> {
6279 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6280 Location::new(self.parser, unsafe { &(*pointer) })
6281 }
6282
6283 #[must_use]
6285 pub fn value(&self) -> Node<'pr> {
6286 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6287 Node::new(self.parser, node)
6288 }
6289
6290 #[must_use]
6292 pub fn operator_loc(&self) -> Location<'pr> {
6293 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6294 Location::new(self.parser, unsafe { &(*pointer) })
6295 }
6296}
6297
6298impl std::fmt::Debug for ClassVariableWriteNode<'_> {
6299 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6300 write!(f, "ClassVariableWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
6301 }
6302}
6303
6304pub struct ConstantAndWriteNode<'pr> {
6311 parser: *const pm_parser_t,
6313
6314 pointer: *mut pm_constant_and_write_node_t,
6316
6317 marker: PhantomData<&'pr mut pm_constant_and_write_node_t>
6319}
6320
6321impl<'pr> ConstantAndWriteNode<'pr> {
6322 #[must_use]
6324 pub const fn as_node(&self) -> Node<'pr> {
6325 Node::ConstantAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6326 }
6327
6328 #[must_use]
6330 pub fn location(&self) -> Location<'pr> {
6331 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6332 Location::new(self.parser, unsafe { &(*pointer) })
6333 }
6334
6335 #[must_use]
6337 pub fn flags(&self) -> pm_node_flags_t {
6338 unsafe { (*self.pointer).base.flags }
6339 }
6340
6341 #[must_use]
6343 pub fn name(&self) -> ConstantId<'pr> {
6344 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6345 }
6346
6347 #[must_use]
6349 pub fn name_loc(&self) -> Location<'pr> {
6350 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6351 Location::new(self.parser, unsafe { &(*pointer) })
6352 }
6353
6354 #[must_use]
6356 pub fn operator_loc(&self) -> Location<'pr> {
6357 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6358 Location::new(self.parser, unsafe { &(*pointer) })
6359 }
6360
6361 #[must_use]
6363 pub fn value(&self) -> Node<'pr> {
6364 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6365 Node::new(self.parser, node)
6366 }
6367}
6368
6369impl std::fmt::Debug for ConstantAndWriteNode<'_> {
6370 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6371 write!(f, "ConstantAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
6372 }
6373}
6374
6375pub struct ConstantOperatorWriteNode<'pr> {
6382 parser: *const pm_parser_t,
6384
6385 pointer: *mut pm_constant_operator_write_node_t,
6387
6388 marker: PhantomData<&'pr mut pm_constant_operator_write_node_t>
6390}
6391
6392impl<'pr> ConstantOperatorWriteNode<'pr> {
6393 #[must_use]
6395 pub const fn as_node(&self) -> Node<'pr> {
6396 Node::ConstantOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6397 }
6398
6399 #[must_use]
6401 pub fn location(&self) -> Location<'pr> {
6402 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6403 Location::new(self.parser, unsafe { &(*pointer) })
6404 }
6405
6406 #[must_use]
6408 pub fn flags(&self) -> pm_node_flags_t {
6409 unsafe { (*self.pointer).base.flags }
6410 }
6411
6412 #[must_use]
6414 pub fn name(&self) -> ConstantId<'pr> {
6415 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6416 }
6417
6418 #[must_use]
6420 pub fn name_loc(&self) -> Location<'pr> {
6421 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6422 Location::new(self.parser, unsafe { &(*pointer) })
6423 }
6424
6425 #[must_use]
6427 pub fn binary_operator_loc(&self) -> Location<'pr> {
6428 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
6429 Location::new(self.parser, unsafe { &(*pointer) })
6430 }
6431
6432 #[must_use]
6434 pub fn value(&self) -> Node<'pr> {
6435 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6436 Node::new(self.parser, node)
6437 }
6438
6439 #[must_use]
6441 pub fn binary_operator(&self) -> ConstantId<'pr> {
6442 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
6443 }
6444}
6445
6446impl std::fmt::Debug for ConstantOperatorWriteNode<'_> {
6447 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6448 write!(f, "ConstantOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
6449 }
6450}
6451
6452pub struct ConstantOrWriteNode<'pr> {
6459 parser: *const pm_parser_t,
6461
6462 pointer: *mut pm_constant_or_write_node_t,
6464
6465 marker: PhantomData<&'pr mut pm_constant_or_write_node_t>
6467}
6468
6469impl<'pr> ConstantOrWriteNode<'pr> {
6470 #[must_use]
6472 pub const fn as_node(&self) -> Node<'pr> {
6473 Node::ConstantOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6474 }
6475
6476 #[must_use]
6478 pub fn location(&self) -> Location<'pr> {
6479 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6480 Location::new(self.parser, unsafe { &(*pointer) })
6481 }
6482
6483 #[must_use]
6485 pub fn flags(&self) -> pm_node_flags_t {
6486 unsafe { (*self.pointer).base.flags }
6487 }
6488
6489 #[must_use]
6491 pub fn name(&self) -> ConstantId<'pr> {
6492 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
6493 }
6494
6495 #[must_use]
6497 pub fn name_loc(&self) -> Location<'pr> {
6498 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6499 Location::new(self.parser, unsafe { &(*pointer) })
6500 }
6501
6502 #[must_use]
6504 pub fn operator_loc(&self) -> Location<'pr> {
6505 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6506 Location::new(self.parser, unsafe { &(*pointer) })
6507 }
6508
6509 #[must_use]
6511 pub fn value(&self) -> Node<'pr> {
6512 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6513 Node::new(self.parser, node)
6514 }
6515}
6516
6517impl std::fmt::Debug for ConstantOrWriteNode<'_> {
6518 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6519 write!(f, "ConstantOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
6520 }
6521}
6522
6523pub struct ConstantPathAndWriteNode<'pr> {
6530 parser: *const pm_parser_t,
6532
6533 pointer: *mut pm_constant_path_and_write_node_t,
6535
6536 marker: PhantomData<&'pr mut pm_constant_path_and_write_node_t>
6538}
6539
6540impl<'pr> ConstantPathAndWriteNode<'pr> {
6541 #[must_use]
6543 pub const fn as_node(&self) -> Node<'pr> {
6544 Node::ConstantPathAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6545 }
6546
6547 #[must_use]
6549 pub fn location(&self) -> Location<'pr> {
6550 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6551 Location::new(self.parser, unsafe { &(*pointer) })
6552 }
6553
6554 #[must_use]
6556 pub fn flags(&self) -> pm_node_flags_t {
6557 unsafe { (*self.pointer).base.flags }
6558 }
6559
6560 #[must_use]
6562 pub fn target(&self) -> ConstantPathNode<'pr> {
6563 let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
6564 ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
6565 }
6566
6567 #[must_use]
6569 pub fn operator_loc(&self) -> Location<'pr> {
6570 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6571 Location::new(self.parser, unsafe { &(*pointer) })
6572 }
6573
6574 #[must_use]
6576 pub fn value(&self) -> Node<'pr> {
6577 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6578 Node::new(self.parser, node)
6579 }
6580}
6581
6582impl std::fmt::Debug for ConstantPathAndWriteNode<'_> {
6583 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6584 write!(f, "ConstantPathAndWriteNode({:?}, {:?}, {:?})", self.target(), self.operator_loc(), self.value())
6585 }
6586}
6587
6588pub struct ConstantPathNode<'pr> {
6595 parser: *const pm_parser_t,
6597
6598 pointer: *mut pm_constant_path_node_t,
6600
6601 marker: PhantomData<&'pr mut pm_constant_path_node_t>
6603}
6604
6605impl<'pr> ConstantPathNode<'pr> {
6606 #[must_use]
6608 pub const fn as_node(&self) -> Node<'pr> {
6609 Node::ConstantPathNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6610 }
6611
6612 #[must_use]
6614 pub fn location(&self) -> Location<'pr> {
6615 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6616 Location::new(self.parser, unsafe { &(*pointer) })
6617 }
6618
6619 #[must_use]
6621 pub fn flags(&self) -> pm_node_flags_t {
6622 unsafe { (*self.pointer).base.flags }
6623 }
6624
6625 #[must_use]
6627 pub fn parent(&self) -> Option<Node<'pr>> {
6628 let node: *mut pm_node_t = unsafe { (*self.pointer).parent };
6629 if node.is_null() {
6630 None
6631 } else {
6632 Some(Node::new(self.parser, node))
6633 }
6634 }
6635
6636 #[must_use]
6638 pub fn name(&self) -> Option<ConstantId<'pr>> {
6639 let id = unsafe { (*self.pointer).name };
6640 if id == 0 {
6641 None
6642 } else {
6643 Some(ConstantId::new(self.parser, id))
6644 }
6645 }
6646
6647 #[must_use]
6649 pub fn delimiter_loc(&self) -> Location<'pr> {
6650 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).delimiter_loc };
6651 Location::new(self.parser, unsafe { &(*pointer) })
6652 }
6653
6654 #[must_use]
6656 pub fn name_loc(&self) -> Location<'pr> {
6657 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6658 Location::new(self.parser, unsafe { &(*pointer) })
6659 }
6660}
6661
6662impl std::fmt::Debug for ConstantPathNode<'_> {
6663 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6664 write!(f, "ConstantPathNode({:?}, {:?}, {:?}, {:?})", self.parent(), self.name(), self.delimiter_loc(), self.name_loc())
6665 }
6666}
6667
6668pub struct ConstantPathOperatorWriteNode<'pr> {
6675 parser: *const pm_parser_t,
6677
6678 pointer: *mut pm_constant_path_operator_write_node_t,
6680
6681 marker: PhantomData<&'pr mut pm_constant_path_operator_write_node_t>
6683}
6684
6685impl<'pr> ConstantPathOperatorWriteNode<'pr> {
6686 #[must_use]
6688 pub const fn as_node(&self) -> Node<'pr> {
6689 Node::ConstantPathOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6690 }
6691
6692 #[must_use]
6694 pub fn location(&self) -> Location<'pr> {
6695 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6696 Location::new(self.parser, unsafe { &(*pointer) })
6697 }
6698
6699 #[must_use]
6701 pub fn flags(&self) -> pm_node_flags_t {
6702 unsafe { (*self.pointer).base.flags }
6703 }
6704
6705 #[must_use]
6707 pub fn target(&self) -> ConstantPathNode<'pr> {
6708 let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
6709 ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
6710 }
6711
6712 #[must_use]
6714 pub fn binary_operator_loc(&self) -> Location<'pr> {
6715 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
6716 Location::new(self.parser, unsafe { &(*pointer) })
6717 }
6718
6719 #[must_use]
6721 pub fn value(&self) -> Node<'pr> {
6722 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6723 Node::new(self.parser, node)
6724 }
6725
6726 #[must_use]
6728 pub fn binary_operator(&self) -> ConstantId<'pr> {
6729 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
6730 }
6731}
6732
6733impl std::fmt::Debug for ConstantPathOperatorWriteNode<'_> {
6734 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6735 write!(f, "ConstantPathOperatorWriteNode({:?}, {:?}, {:?}, {:?})", self.target(), self.binary_operator_loc(), self.value(), self.binary_operator())
6736 }
6737}
6738
6739pub struct ConstantPathOrWriteNode<'pr> {
6746 parser: *const pm_parser_t,
6748
6749 pointer: *mut pm_constant_path_or_write_node_t,
6751
6752 marker: PhantomData<&'pr mut pm_constant_path_or_write_node_t>
6754}
6755
6756impl<'pr> ConstantPathOrWriteNode<'pr> {
6757 #[must_use]
6759 pub const fn as_node(&self) -> Node<'pr> {
6760 Node::ConstantPathOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6761 }
6762
6763 #[must_use]
6765 pub fn location(&self) -> Location<'pr> {
6766 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6767 Location::new(self.parser, unsafe { &(*pointer) })
6768 }
6769
6770 #[must_use]
6772 pub fn flags(&self) -> pm_node_flags_t {
6773 unsafe { (*self.pointer).base.flags }
6774 }
6775
6776 #[must_use]
6778 pub fn target(&self) -> ConstantPathNode<'pr> {
6779 let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
6780 ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
6781 }
6782
6783 #[must_use]
6785 pub fn operator_loc(&self) -> Location<'pr> {
6786 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6787 Location::new(self.parser, unsafe { &(*pointer) })
6788 }
6789
6790 #[must_use]
6792 pub fn value(&self) -> Node<'pr> {
6793 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6794 Node::new(self.parser, node)
6795 }
6796}
6797
6798impl std::fmt::Debug for ConstantPathOrWriteNode<'_> {
6799 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6800 write!(f, "ConstantPathOrWriteNode({:?}, {:?}, {:?})", self.target(), self.operator_loc(), self.value())
6801 }
6802}
6803
6804pub struct ConstantPathTargetNode<'pr> {
6811 parser: *const pm_parser_t,
6813
6814 pointer: *mut pm_constant_path_target_node_t,
6816
6817 marker: PhantomData<&'pr mut pm_constant_path_target_node_t>
6819}
6820
6821impl<'pr> ConstantPathTargetNode<'pr> {
6822 #[must_use]
6824 pub const fn as_node(&self) -> Node<'pr> {
6825 Node::ConstantPathTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6826 }
6827
6828 #[must_use]
6830 pub fn location(&self) -> Location<'pr> {
6831 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6832 Location::new(self.parser, unsafe { &(*pointer) })
6833 }
6834
6835 #[must_use]
6837 pub fn flags(&self) -> pm_node_flags_t {
6838 unsafe { (*self.pointer).base.flags }
6839 }
6840
6841 #[must_use]
6843 pub fn parent(&self) -> Option<Node<'pr>> {
6844 let node: *mut pm_node_t = unsafe { (*self.pointer).parent };
6845 if node.is_null() {
6846 None
6847 } else {
6848 Some(Node::new(self.parser, node))
6849 }
6850 }
6851
6852 #[must_use]
6854 pub fn name(&self) -> Option<ConstantId<'pr>> {
6855 let id = unsafe { (*self.pointer).name };
6856 if id == 0 {
6857 None
6858 } else {
6859 Some(ConstantId::new(self.parser, id))
6860 }
6861 }
6862
6863 #[must_use]
6865 pub fn delimiter_loc(&self) -> Location<'pr> {
6866 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).delimiter_loc };
6867 Location::new(self.parser, unsafe { &(*pointer) })
6868 }
6869
6870 #[must_use]
6872 pub fn name_loc(&self) -> Location<'pr> {
6873 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
6874 Location::new(self.parser, unsafe { &(*pointer) })
6875 }
6876}
6877
6878impl std::fmt::Debug for ConstantPathTargetNode<'_> {
6879 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6880 write!(f, "ConstantPathTargetNode({:?}, {:?}, {:?}, {:?})", self.parent(), self.name(), self.delimiter_loc(), self.name_loc())
6881 }
6882}
6883
6884pub struct ConstantPathWriteNode<'pr> {
6901 parser: *const pm_parser_t,
6903
6904 pointer: *mut pm_constant_path_write_node_t,
6906
6907 marker: PhantomData<&'pr mut pm_constant_path_write_node_t>
6909}
6910
6911impl<'pr> ConstantPathWriteNode<'pr> {
6912 #[must_use]
6914 pub const fn as_node(&self) -> Node<'pr> {
6915 Node::ConstantPathWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6916 }
6917
6918 #[must_use]
6920 pub fn location(&self) -> Location<'pr> {
6921 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6922 Location::new(self.parser, unsafe { &(*pointer) })
6923 }
6924
6925 #[must_use]
6927 pub fn flags(&self) -> pm_node_flags_t {
6928 unsafe { (*self.pointer).base.flags }
6929 }
6930
6931 #[must_use]
6933 pub fn target(&self) -> ConstantPathNode<'pr> {
6934 let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
6935 ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
6936 }
6937
6938 #[must_use]
6940 pub fn operator_loc(&self) -> Location<'pr> {
6941 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
6942 Location::new(self.parser, unsafe { &(*pointer) })
6943 }
6944
6945 #[must_use]
6947 pub fn value(&self) -> Node<'pr> {
6948 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
6949 Node::new(self.parser, node)
6950 }
6951}
6952
6953impl std::fmt::Debug for ConstantPathWriteNode<'_> {
6954 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
6955 write!(f, "ConstantPathWriteNode({:?}, {:?}, {:?})", self.target(), self.operator_loc(), self.value())
6956 }
6957}
6958
6959pub struct ConstantReadNode<'pr> {
6966 parser: *const pm_parser_t,
6968
6969 pointer: *mut pm_constant_read_node_t,
6971
6972 marker: PhantomData<&'pr mut pm_constant_read_node_t>
6974}
6975
6976impl<'pr> ConstantReadNode<'pr> {
6977 #[must_use]
6979 pub const fn as_node(&self) -> Node<'pr> {
6980 Node::ConstantReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
6981 }
6982
6983 #[must_use]
6985 pub fn location(&self) -> Location<'pr> {
6986 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
6987 Location::new(self.parser, unsafe { &(*pointer) })
6988 }
6989
6990 #[must_use]
6992 pub fn flags(&self) -> pm_node_flags_t {
6993 unsafe { (*self.pointer).base.flags }
6994 }
6995
6996 #[must_use]
6998 pub fn name(&self) -> ConstantId<'pr> {
6999 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
7000 }
7001}
7002
7003impl std::fmt::Debug for ConstantReadNode<'_> {
7004 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7005 write!(f, "ConstantReadNode({:?})", self.name())
7006 }
7007}
7008
7009pub struct ConstantTargetNode<'pr> {
7016 parser: *const pm_parser_t,
7018
7019 pointer: *mut pm_constant_target_node_t,
7021
7022 marker: PhantomData<&'pr mut pm_constant_target_node_t>
7024}
7025
7026impl<'pr> ConstantTargetNode<'pr> {
7027 #[must_use]
7029 pub const fn as_node(&self) -> Node<'pr> {
7030 Node::ConstantTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7031 }
7032
7033 #[must_use]
7035 pub fn location(&self) -> Location<'pr> {
7036 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7037 Location::new(self.parser, unsafe { &(*pointer) })
7038 }
7039
7040 #[must_use]
7042 pub fn flags(&self) -> pm_node_flags_t {
7043 unsafe { (*self.pointer).base.flags }
7044 }
7045
7046 #[must_use]
7048 pub fn name(&self) -> ConstantId<'pr> {
7049 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
7050 }
7051}
7052
7053impl std::fmt::Debug for ConstantTargetNode<'_> {
7054 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7055 write!(f, "ConstantTargetNode({:?})", self.name())
7056 }
7057}
7058
7059pub struct ConstantWriteNode<'pr> {
7066 parser: *const pm_parser_t,
7068
7069 pointer: *mut pm_constant_write_node_t,
7071
7072 marker: PhantomData<&'pr mut pm_constant_write_node_t>
7074}
7075
7076impl<'pr> ConstantWriteNode<'pr> {
7077 #[must_use]
7079 pub const fn as_node(&self) -> Node<'pr> {
7080 Node::ConstantWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7081 }
7082
7083 #[must_use]
7085 pub fn location(&self) -> Location<'pr> {
7086 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7087 Location::new(self.parser, unsafe { &(*pointer) })
7088 }
7089
7090 #[must_use]
7092 pub fn flags(&self) -> pm_node_flags_t {
7093 unsafe { (*self.pointer).base.flags }
7094 }
7095
7096 #[must_use]
7098 pub fn name(&self) -> ConstantId<'pr> {
7099 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
7100 }
7101
7102 #[must_use]
7104 pub fn name_loc(&self) -> Location<'pr> {
7105 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
7106 Location::new(self.parser, unsafe { &(*pointer) })
7107 }
7108
7109 #[must_use]
7111 pub fn value(&self) -> Node<'pr> {
7112 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
7113 Node::new(self.parser, node)
7114 }
7115
7116 #[must_use]
7118 pub fn operator_loc(&self) -> Location<'pr> {
7119 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
7120 Location::new(self.parser, unsafe { &(*pointer) })
7121 }
7122}
7123
7124impl std::fmt::Debug for ConstantWriteNode<'_> {
7125 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7126 write!(f, "ConstantWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
7127 }
7128}
7129
7130pub struct DefNode<'pr> {
7138 parser: *const pm_parser_t,
7140
7141 pointer: *mut pm_def_node_t,
7143
7144 marker: PhantomData<&'pr mut pm_def_node_t>
7146}
7147
7148impl<'pr> DefNode<'pr> {
7149 #[must_use]
7151 pub const fn as_node(&self) -> Node<'pr> {
7152 Node::DefNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7153 }
7154
7155 #[must_use]
7157 pub fn location(&self) -> Location<'pr> {
7158 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7159 Location::new(self.parser, unsafe { &(*pointer) })
7160 }
7161
7162 #[must_use]
7164 pub fn flags(&self) -> pm_node_flags_t {
7165 unsafe { (*self.pointer).base.flags }
7166 }
7167
7168 #[must_use]
7170 pub fn name(&self) -> ConstantId<'pr> {
7171 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
7172 }
7173
7174 #[must_use]
7176 pub fn name_loc(&self) -> Location<'pr> {
7177 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
7178 Location::new(self.parser, unsafe { &(*pointer) })
7179 }
7180
7181 #[must_use]
7183 pub fn receiver(&self) -> Option<Node<'pr>> {
7184 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
7185 if node.is_null() {
7186 None
7187 } else {
7188 Some(Node::new(self.parser, node))
7189 }
7190 }
7191
7192 #[must_use]
7194 pub fn parameters(&self) -> Option<ParametersNode<'pr>> {
7195 let node: *mut pm_parameters_node_t = unsafe { (*self.pointer).parameters };
7196 if node.is_null() {
7197 None
7198 } else {
7199 Some(ParametersNode { parser: self.parser, pointer: node, marker: PhantomData })
7200 }
7201 }
7202
7203 #[must_use]
7205 pub fn body(&self) -> Option<Node<'pr>> {
7206 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
7207 if node.is_null() {
7208 None
7209 } else {
7210 Some(Node::new(self.parser, node))
7211 }
7212 }
7213
7214 #[must_use]
7216 pub fn locals(&self) -> ConstantList<'pr> {
7217 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
7218 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
7219 }
7220
7221 #[must_use]
7223 pub fn def_keyword_loc(&self) -> Location<'pr> {
7224 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).def_keyword_loc };
7225 Location::new(self.parser, unsafe { &(*pointer) })
7226 }
7227
7228 #[must_use]
7230 pub fn operator_loc(&self) -> Option<Location<'pr>> {
7231 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
7232 let length = unsafe { (*pointer).length };
7233 if length == 0 {
7234 None
7235 } else {
7236 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7237 }
7238 }
7239
7240 #[must_use]
7242 pub fn lparen_loc(&self) -> Option<Location<'pr>> {
7243 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
7244 let length = unsafe { (*pointer).length };
7245 if length == 0 {
7246 None
7247 } else {
7248 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7249 }
7250 }
7251
7252 #[must_use]
7254 pub fn rparen_loc(&self) -> Option<Location<'pr>> {
7255 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
7256 let length = unsafe { (*pointer).length };
7257 if length == 0 {
7258 None
7259 } else {
7260 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7261 }
7262 }
7263
7264 #[must_use]
7266 pub fn equal_loc(&self) -> Option<Location<'pr>> {
7267 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).equal_loc };
7268 let length = unsafe { (*pointer).length };
7269 if length == 0 {
7270 None
7271 } else {
7272 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7273 }
7274 }
7275
7276 #[must_use]
7278 pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
7279 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
7280 let length = unsafe { (*pointer).length };
7281 if length == 0 {
7282 None
7283 } else {
7284 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7285 }
7286 }
7287}
7288
7289impl std::fmt::Debug for DefNode<'_> {
7290 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7291 write!(f, "DefNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.receiver(), self.parameters(), self.body(), self.locals(), self.def_keyword_loc(), self.operator_loc(), self.lparen_loc(), self.rparen_loc(), self.equal_loc(), self.end_keyword_loc())
7292 }
7293}
7294
7295pub struct DefinedNode<'pr> {
7302 parser: *const pm_parser_t,
7304
7305 pointer: *mut pm_defined_node_t,
7307
7308 marker: PhantomData<&'pr mut pm_defined_node_t>
7310}
7311
7312impl<'pr> DefinedNode<'pr> {
7313 #[must_use]
7315 pub const fn as_node(&self) -> Node<'pr> {
7316 Node::DefinedNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7317 }
7318
7319 #[must_use]
7321 pub fn location(&self) -> Location<'pr> {
7322 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7323 Location::new(self.parser, unsafe { &(*pointer) })
7324 }
7325
7326 #[must_use]
7328 pub fn flags(&self) -> pm_node_flags_t {
7329 unsafe { (*self.pointer).base.flags }
7330 }
7331
7332 #[must_use]
7334 pub fn lparen_loc(&self) -> Option<Location<'pr>> {
7335 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
7336 let length = unsafe { (*pointer).length };
7337 if length == 0 {
7338 None
7339 } else {
7340 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7341 }
7342 }
7343
7344 #[must_use]
7346 pub fn value(&self) -> Node<'pr> {
7347 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
7348 Node::new(self.parser, node)
7349 }
7350
7351 #[must_use]
7353 pub fn rparen_loc(&self) -> Option<Location<'pr>> {
7354 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
7355 let length = unsafe { (*pointer).length };
7356 if length == 0 {
7357 None
7358 } else {
7359 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7360 }
7361 }
7362
7363 #[must_use]
7365 pub fn keyword_loc(&self) -> Location<'pr> {
7366 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
7367 Location::new(self.parser, unsafe { &(*pointer) })
7368 }
7369}
7370
7371impl std::fmt::Debug for DefinedNode<'_> {
7372 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7373 write!(f, "DefinedNode({:?}, {:?}, {:?}, {:?})", self.lparen_loc(), self.value(), self.rparen_loc(), self.keyword_loc())
7374 }
7375}
7376
7377pub struct ElseNode<'pr> {
7384 parser: *const pm_parser_t,
7386
7387 pointer: *mut pm_else_node_t,
7389
7390 marker: PhantomData<&'pr mut pm_else_node_t>
7392}
7393
7394impl<'pr> ElseNode<'pr> {
7395 #[must_use]
7397 pub const fn as_node(&self) -> Node<'pr> {
7398 Node::ElseNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7399 }
7400
7401 #[must_use]
7403 pub fn location(&self) -> Location<'pr> {
7404 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7405 Location::new(self.parser, unsafe { &(*pointer) })
7406 }
7407
7408 #[must_use]
7410 pub fn flags(&self) -> pm_node_flags_t {
7411 unsafe { (*self.pointer).base.flags }
7412 }
7413
7414 #[must_use]
7416 pub fn else_keyword_loc(&self) -> Location<'pr> {
7417 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).else_keyword_loc };
7418 Location::new(self.parser, unsafe { &(*pointer) })
7419 }
7420
7421 #[must_use]
7423 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
7424 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
7425 if node.is_null() {
7426 None
7427 } else {
7428 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
7429 }
7430 }
7431
7432 #[must_use]
7434 pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
7435 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
7436 let length = unsafe { (*pointer).length };
7437 if length == 0 {
7438 None
7439 } else {
7440 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7441 }
7442 }
7443}
7444
7445impl std::fmt::Debug for ElseNode<'_> {
7446 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7447 write!(f, "ElseNode({:?}, {:?}, {:?})", self.else_keyword_loc(), self.statements(), self.end_keyword_loc())
7448 }
7449}
7450
7451pub struct EmbeddedStatementsNode<'pr> {
7458 parser: *const pm_parser_t,
7460
7461 pointer: *mut pm_embedded_statements_node_t,
7463
7464 marker: PhantomData<&'pr mut pm_embedded_statements_node_t>
7466}
7467
7468impl<'pr> EmbeddedStatementsNode<'pr> {
7469 #[must_use]
7471 pub const fn as_node(&self) -> Node<'pr> {
7472 Node::EmbeddedStatementsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7473 }
7474
7475 #[must_use]
7477 pub fn location(&self) -> Location<'pr> {
7478 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7479 Location::new(self.parser, unsafe { &(*pointer) })
7480 }
7481
7482 #[must_use]
7484 pub fn flags(&self) -> pm_node_flags_t {
7485 unsafe { (*self.pointer).base.flags }
7486 }
7487
7488 #[must_use]
7490 pub fn opening_loc(&self) -> Location<'pr> {
7491 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
7492 Location::new(self.parser, unsafe { &(*pointer) })
7493 }
7494
7495 #[must_use]
7497 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
7498 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
7499 if node.is_null() {
7500 None
7501 } else {
7502 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
7503 }
7504 }
7505
7506 #[must_use]
7508 pub fn closing_loc(&self) -> Location<'pr> {
7509 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
7510 Location::new(self.parser, unsafe { &(*pointer) })
7511 }
7512}
7513
7514impl std::fmt::Debug for EmbeddedStatementsNode<'_> {
7515 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7516 write!(f, "EmbeddedStatementsNode({:?}, {:?}, {:?})", self.opening_loc(), self.statements(), self.closing_loc())
7517 }
7518}
7519
7520pub struct EmbeddedVariableNode<'pr> {
7527 parser: *const pm_parser_t,
7529
7530 pointer: *mut pm_embedded_variable_node_t,
7532
7533 marker: PhantomData<&'pr mut pm_embedded_variable_node_t>
7535}
7536
7537impl<'pr> EmbeddedVariableNode<'pr> {
7538 #[must_use]
7540 pub const fn as_node(&self) -> Node<'pr> {
7541 Node::EmbeddedVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7542 }
7543
7544 #[must_use]
7546 pub fn location(&self) -> Location<'pr> {
7547 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7548 Location::new(self.parser, unsafe { &(*pointer) })
7549 }
7550
7551 #[must_use]
7553 pub fn flags(&self) -> pm_node_flags_t {
7554 unsafe { (*self.pointer).base.flags }
7555 }
7556
7557 #[must_use]
7559 pub fn operator_loc(&self) -> Location<'pr> {
7560 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
7561 Location::new(self.parser, unsafe { &(*pointer) })
7562 }
7563
7564 #[must_use]
7566 pub fn variable(&self) -> Node<'pr> {
7567 let node: *mut pm_node_t = unsafe { (*self.pointer).variable };
7568 Node::new(self.parser, node)
7569 }
7570}
7571
7572impl std::fmt::Debug for EmbeddedVariableNode<'_> {
7573 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7574 write!(f, "EmbeddedVariableNode({:?}, {:?})", self.operator_loc(), self.variable())
7575 }
7576}
7577
7578pub struct EnsureNode<'pr> {
7589 parser: *const pm_parser_t,
7591
7592 pointer: *mut pm_ensure_node_t,
7594
7595 marker: PhantomData<&'pr mut pm_ensure_node_t>
7597}
7598
7599impl<'pr> EnsureNode<'pr> {
7600 #[must_use]
7602 pub const fn as_node(&self) -> Node<'pr> {
7603 Node::EnsureNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7604 }
7605
7606 #[must_use]
7608 pub fn location(&self) -> Location<'pr> {
7609 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7610 Location::new(self.parser, unsafe { &(*pointer) })
7611 }
7612
7613 #[must_use]
7615 pub fn flags(&self) -> pm_node_flags_t {
7616 unsafe { (*self.pointer).base.flags }
7617 }
7618
7619 #[must_use]
7621 pub fn ensure_keyword_loc(&self) -> Location<'pr> {
7622 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).ensure_keyword_loc };
7623 Location::new(self.parser, unsafe { &(*pointer) })
7624 }
7625
7626 #[must_use]
7628 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
7629 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
7630 if node.is_null() {
7631 None
7632 } else {
7633 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
7634 }
7635 }
7636
7637 #[must_use]
7639 pub fn end_keyword_loc(&self) -> Location<'pr> {
7640 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
7641 Location::new(self.parser, unsafe { &(*pointer) })
7642 }
7643}
7644
7645impl std::fmt::Debug for EnsureNode<'_> {
7646 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7647 write!(f, "EnsureNode({:?}, {:?}, {:?})", self.ensure_keyword_loc(), self.statements(), self.end_keyword_loc())
7648 }
7649}
7650
7651pub struct ErrorRecoveryNode<'pr> {
7653 parser: *const pm_parser_t,
7655
7656 pointer: *mut pm_error_recovery_node_t,
7658
7659 marker: PhantomData<&'pr mut pm_error_recovery_node_t>
7661}
7662
7663impl<'pr> ErrorRecoveryNode<'pr> {
7664 #[must_use]
7666 pub const fn as_node(&self) -> Node<'pr> {
7667 Node::ErrorRecoveryNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7668 }
7669
7670 #[must_use]
7672 pub fn location(&self) -> Location<'pr> {
7673 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7674 Location::new(self.parser, unsafe { &(*pointer) })
7675 }
7676
7677 #[must_use]
7679 pub fn flags(&self) -> pm_node_flags_t {
7680 unsafe { (*self.pointer).base.flags }
7681 }
7682
7683 #[must_use]
7685 pub fn unexpected(&self) -> Option<Node<'pr>> {
7686 let node: *mut pm_node_t = unsafe { (*self.pointer).unexpected };
7687 if node.is_null() {
7688 None
7689 } else {
7690 Some(Node::new(self.parser, node))
7691 }
7692 }
7693}
7694
7695impl std::fmt::Debug for ErrorRecoveryNode<'_> {
7696 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7697 write!(f, "ErrorRecoveryNode({:?})", self.unexpected())
7698 }
7699}
7700
7701pub struct FalseNode<'pr> {
7708 parser: *const pm_parser_t,
7710
7711 pointer: *mut pm_false_node_t,
7713
7714 marker: PhantomData<&'pr mut pm_false_node_t>
7716}
7717
7718impl<'pr> FalseNode<'pr> {
7719 #[must_use]
7721 pub const fn as_node(&self) -> Node<'pr> {
7722 Node::FalseNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7723 }
7724
7725 #[must_use]
7727 pub fn location(&self) -> Location<'pr> {
7728 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7729 Location::new(self.parser, unsafe { &(*pointer) })
7730 }
7731
7732 #[must_use]
7734 pub fn flags(&self) -> pm_node_flags_t {
7735 unsafe { (*self.pointer).base.flags }
7736 }
7737}
7738
7739impl std::fmt::Debug for FalseNode<'_> {
7740 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7741 write!(f, "FalseNode()")
7742 }
7743}
7744
7745pub struct FindPatternNode<'pr> {
7767 parser: *const pm_parser_t,
7769
7770 pointer: *mut pm_find_pattern_node_t,
7772
7773 marker: PhantomData<&'pr mut pm_find_pattern_node_t>
7775}
7776
7777impl<'pr> FindPatternNode<'pr> {
7778 #[must_use]
7780 pub const fn as_node(&self) -> Node<'pr> {
7781 Node::FindPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7782 }
7783
7784 #[must_use]
7786 pub fn location(&self) -> Location<'pr> {
7787 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7788 Location::new(self.parser, unsafe { &(*pointer) })
7789 }
7790
7791 #[must_use]
7793 pub fn flags(&self) -> pm_node_flags_t {
7794 unsafe { (*self.pointer).base.flags }
7795 }
7796
7797 #[must_use]
7799 pub fn constant(&self) -> Option<Node<'pr>> {
7800 let node: *mut pm_node_t = unsafe { (*self.pointer).constant };
7801 if node.is_null() {
7802 None
7803 } else {
7804 Some(Node::new(self.parser, node))
7805 }
7806 }
7807
7808 #[must_use]
7810 pub fn left(&self) -> SplatNode<'pr> {
7811 let node: *mut pm_splat_node_t = unsafe { (*self.pointer).left };
7812 SplatNode { parser: self.parser, pointer: node, marker: PhantomData }
7813 }
7814
7815 #[must_use]
7817 pub fn requireds(&self) -> NodeList<'pr> {
7818 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).requireds };
7819 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
7820 }
7821
7822 #[must_use]
7824 pub fn right(&self) -> SplatNode<'pr> {
7825 let node: *mut pm_splat_node_t = unsafe { (*self.pointer).right };
7826 SplatNode { parser: self.parser, pointer: node, marker: PhantomData }
7827 }
7828
7829 #[must_use]
7831 pub fn opening_loc(&self) -> Option<Location<'pr>> {
7832 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
7833 let length = unsafe { (*pointer).length };
7834 if length == 0 {
7835 None
7836 } else {
7837 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7838 }
7839 }
7840
7841 #[must_use]
7843 pub fn closing_loc(&self) -> Option<Location<'pr>> {
7844 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
7845 let length = unsafe { (*pointer).length };
7846 if length == 0 {
7847 None
7848 } else {
7849 Some(Location::new(self.parser, unsafe { &(*pointer) }))
7850 }
7851 }
7852}
7853
7854impl std::fmt::Debug for FindPatternNode<'_> {
7855 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7856 write!(f, "FindPatternNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.constant(), self.left(), self.requireds(), self.right(), self.opening_loc(), self.closing_loc())
7857 }
7858}
7859
7860pub struct FlipFlopNode<'pr> {
7867 parser: *const pm_parser_t,
7869
7870 pointer: *mut pm_flip_flop_node_t,
7872
7873 marker: PhantomData<&'pr mut pm_flip_flop_node_t>
7875}
7876
7877impl<'pr> FlipFlopNode<'pr> {
7878 #[must_use]
7880 pub const fn as_node(&self) -> Node<'pr> {
7881 Node::FlipFlopNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7882 }
7883
7884 #[must_use]
7886 pub fn location(&self) -> Location<'pr> {
7887 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7888 Location::new(self.parser, unsafe { &(*pointer) })
7889 }
7890
7891 #[must_use]
7893 pub fn flags(&self) -> pm_node_flags_t {
7894 unsafe { (*self.pointer).base.flags }
7895 }
7896
7897 #[must_use]
7899 pub fn is_exclude_end(&self) -> bool {
7900 (self.flags() & PM_RANGE_FLAGS_EXCLUDE_END) != 0
7901 }
7902
7903 #[must_use]
7905 pub fn left(&self) -> Option<Node<'pr>> {
7906 let node: *mut pm_node_t = unsafe { (*self.pointer).left };
7907 if node.is_null() {
7908 None
7909 } else {
7910 Some(Node::new(self.parser, node))
7911 }
7912 }
7913
7914 #[must_use]
7916 pub fn right(&self) -> Option<Node<'pr>> {
7917 let node: *mut pm_node_t = unsafe { (*self.pointer).right };
7918 if node.is_null() {
7919 None
7920 } else {
7921 Some(Node::new(self.parser, node))
7922 }
7923 }
7924
7925 #[must_use]
7927 pub fn operator_loc(&self) -> Location<'pr> {
7928 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
7929 Location::new(self.parser, unsafe { &(*pointer) })
7930 }
7931}
7932
7933impl std::fmt::Debug for FlipFlopNode<'_> {
7934 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7935 write!(f, "FlipFlopNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
7936 }
7937}
7938
7939pub struct FloatNode<'pr> {
7946 parser: *const pm_parser_t,
7948
7949 pointer: *mut pm_float_node_t,
7951
7952 marker: PhantomData<&'pr mut pm_float_node_t>
7954}
7955
7956impl<'pr> FloatNode<'pr> {
7957 #[must_use]
7959 pub const fn as_node(&self) -> Node<'pr> {
7960 Node::FloatNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
7961 }
7962
7963 #[must_use]
7965 pub fn location(&self) -> Location<'pr> {
7966 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
7967 Location::new(self.parser, unsafe { &(*pointer) })
7968 }
7969
7970 #[must_use]
7972 pub fn flags(&self) -> pm_node_flags_t {
7973 unsafe { (*self.pointer).base.flags }
7974 }
7975
7976 #[must_use]
7978 pub fn value(&self) -> f64 {
7979 unsafe { (*self.pointer).value }
7980 }
7981}
7982
7983impl std::fmt::Debug for FloatNode<'_> {
7984 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7985 write!(f, "FloatNode({:?})", self.value())
7986 }
7987}
7988
7989pub struct ForNode<'pr> {
7996 parser: *const pm_parser_t,
7998
7999 pointer: *mut pm_for_node_t,
8001
8002 marker: PhantomData<&'pr mut pm_for_node_t>
8004}
8005
8006impl<'pr> ForNode<'pr> {
8007 #[must_use]
8009 pub const fn as_node(&self) -> Node<'pr> {
8010 Node::ForNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8011 }
8012
8013 #[must_use]
8015 pub fn location(&self) -> Location<'pr> {
8016 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8017 Location::new(self.parser, unsafe { &(*pointer) })
8018 }
8019
8020 #[must_use]
8022 pub fn flags(&self) -> pm_node_flags_t {
8023 unsafe { (*self.pointer).base.flags }
8024 }
8025
8026 #[must_use]
8028 pub fn index(&self) -> Node<'pr> {
8029 let node: *mut pm_node_t = unsafe { (*self.pointer).index };
8030 Node::new(self.parser, node)
8031 }
8032
8033 #[must_use]
8035 pub fn collection(&self) -> Node<'pr> {
8036 let node: *mut pm_node_t = unsafe { (*self.pointer).collection };
8037 Node::new(self.parser, node)
8038 }
8039
8040 #[must_use]
8042 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
8043 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
8044 if node.is_null() {
8045 None
8046 } else {
8047 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
8048 }
8049 }
8050
8051 #[must_use]
8053 pub fn for_keyword_loc(&self) -> Location<'pr> {
8054 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).for_keyword_loc };
8055 Location::new(self.parser, unsafe { &(*pointer) })
8056 }
8057
8058 #[must_use]
8060 pub fn in_keyword_loc(&self) -> Location<'pr> {
8061 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).in_keyword_loc };
8062 Location::new(self.parser, unsafe { &(*pointer) })
8063 }
8064
8065 #[must_use]
8067 pub fn do_keyword_loc(&self) -> Option<Location<'pr>> {
8068 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).do_keyword_loc };
8069 let length = unsafe { (*pointer).length };
8070 if length == 0 {
8071 None
8072 } else {
8073 Some(Location::new(self.parser, unsafe { &(*pointer) }))
8074 }
8075 }
8076
8077 #[must_use]
8079 pub fn end_keyword_loc(&self) -> Location<'pr> {
8080 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
8081 Location::new(self.parser, unsafe { &(*pointer) })
8082 }
8083}
8084
8085impl std::fmt::Debug for ForNode<'_> {
8086 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8087 write!(f, "ForNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.index(), self.collection(), self.statements(), self.for_keyword_loc(), self.in_keyword_loc(), self.do_keyword_loc(), self.end_keyword_loc())
8088 }
8089}
8090
8091pub struct ForwardingArgumentsNode<'pr> {
8100 parser: *const pm_parser_t,
8102
8103 pointer: *mut pm_forwarding_arguments_node_t,
8105
8106 marker: PhantomData<&'pr mut pm_forwarding_arguments_node_t>
8108}
8109
8110impl<'pr> ForwardingArgumentsNode<'pr> {
8111 #[must_use]
8113 pub const fn as_node(&self) -> Node<'pr> {
8114 Node::ForwardingArgumentsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8115 }
8116
8117 #[must_use]
8119 pub fn location(&self) -> Location<'pr> {
8120 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8121 Location::new(self.parser, unsafe { &(*pointer) })
8122 }
8123
8124 #[must_use]
8126 pub fn flags(&self) -> pm_node_flags_t {
8127 unsafe { (*self.pointer).base.flags }
8128 }
8129}
8130
8131impl std::fmt::Debug for ForwardingArgumentsNode<'_> {
8132 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8133 write!(f, "ForwardingArgumentsNode()")
8134 }
8135}
8136
8137pub struct ForwardingParameterNode<'pr> {
8145 parser: *const pm_parser_t,
8147
8148 pointer: *mut pm_forwarding_parameter_node_t,
8150
8151 marker: PhantomData<&'pr mut pm_forwarding_parameter_node_t>
8153}
8154
8155impl<'pr> ForwardingParameterNode<'pr> {
8156 #[must_use]
8158 pub const fn as_node(&self) -> Node<'pr> {
8159 Node::ForwardingParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8160 }
8161
8162 #[must_use]
8164 pub fn location(&self) -> Location<'pr> {
8165 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8166 Location::new(self.parser, unsafe { &(*pointer) })
8167 }
8168
8169 #[must_use]
8171 pub fn flags(&self) -> pm_node_flags_t {
8172 unsafe { (*self.pointer).base.flags }
8173 }
8174}
8175
8176impl std::fmt::Debug for ForwardingParameterNode<'_> {
8177 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8178 write!(f, "ForwardingParameterNode()")
8179 }
8180}
8181
8182pub struct ForwardingSuperNode<'pr> {
8196 parser: *const pm_parser_t,
8198
8199 pointer: *mut pm_forwarding_super_node_t,
8201
8202 marker: PhantomData<&'pr mut pm_forwarding_super_node_t>
8204}
8205
8206impl<'pr> ForwardingSuperNode<'pr> {
8207 #[must_use]
8209 pub const fn as_node(&self) -> Node<'pr> {
8210 Node::ForwardingSuperNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8211 }
8212
8213 #[must_use]
8215 pub fn location(&self) -> Location<'pr> {
8216 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8217 Location::new(self.parser, unsafe { &(*pointer) })
8218 }
8219
8220 #[must_use]
8222 pub fn flags(&self) -> pm_node_flags_t {
8223 unsafe { (*self.pointer).base.flags }
8224 }
8225
8226 #[must_use]
8228 pub fn keyword_loc(&self) -> Location<'pr> {
8229 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
8230 Location::new(self.parser, unsafe { &(*pointer) })
8231 }
8232
8233 #[must_use]
8235 pub fn block(&self) -> Option<BlockNode<'pr>> {
8236 let node: *mut pm_block_node_t = unsafe { (*self.pointer).block };
8237 if node.is_null() {
8238 None
8239 } else {
8240 Some(BlockNode { parser: self.parser, pointer: node, marker: PhantomData })
8241 }
8242 }
8243}
8244
8245impl std::fmt::Debug for ForwardingSuperNode<'_> {
8246 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8247 write!(f, "ForwardingSuperNode({:?}, {:?})", self.keyword_loc(), self.block())
8248 }
8249}
8250
8251pub struct GlobalVariableAndWriteNode<'pr> {
8258 parser: *const pm_parser_t,
8260
8261 pointer: *mut pm_global_variable_and_write_node_t,
8263
8264 marker: PhantomData<&'pr mut pm_global_variable_and_write_node_t>
8266}
8267
8268impl<'pr> GlobalVariableAndWriteNode<'pr> {
8269 #[must_use]
8271 pub const fn as_node(&self) -> Node<'pr> {
8272 Node::GlobalVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8273 }
8274
8275 #[must_use]
8277 pub fn location(&self) -> Location<'pr> {
8278 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8279 Location::new(self.parser, unsafe { &(*pointer) })
8280 }
8281
8282 #[must_use]
8284 pub fn flags(&self) -> pm_node_flags_t {
8285 unsafe { (*self.pointer).base.flags }
8286 }
8287
8288 #[must_use]
8290 pub fn name(&self) -> ConstantId<'pr> {
8291 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
8292 }
8293
8294 #[must_use]
8296 pub fn name_loc(&self) -> Location<'pr> {
8297 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
8298 Location::new(self.parser, unsafe { &(*pointer) })
8299 }
8300
8301 #[must_use]
8303 pub fn operator_loc(&self) -> Location<'pr> {
8304 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
8305 Location::new(self.parser, unsafe { &(*pointer) })
8306 }
8307
8308 #[must_use]
8310 pub fn value(&self) -> Node<'pr> {
8311 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
8312 Node::new(self.parser, node)
8313 }
8314}
8315
8316impl std::fmt::Debug for GlobalVariableAndWriteNode<'_> {
8317 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8318 write!(f, "GlobalVariableAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
8319 }
8320}
8321
8322pub struct GlobalVariableOperatorWriteNode<'pr> {
8329 parser: *const pm_parser_t,
8331
8332 pointer: *mut pm_global_variable_operator_write_node_t,
8334
8335 marker: PhantomData<&'pr mut pm_global_variable_operator_write_node_t>
8337}
8338
8339impl<'pr> GlobalVariableOperatorWriteNode<'pr> {
8340 #[must_use]
8342 pub const fn as_node(&self) -> Node<'pr> {
8343 Node::GlobalVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8344 }
8345
8346 #[must_use]
8348 pub fn location(&self) -> Location<'pr> {
8349 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8350 Location::new(self.parser, unsafe { &(*pointer) })
8351 }
8352
8353 #[must_use]
8355 pub fn flags(&self) -> pm_node_flags_t {
8356 unsafe { (*self.pointer).base.flags }
8357 }
8358
8359 #[must_use]
8361 pub fn name(&self) -> ConstantId<'pr> {
8362 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
8363 }
8364
8365 #[must_use]
8367 pub fn name_loc(&self) -> Location<'pr> {
8368 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
8369 Location::new(self.parser, unsafe { &(*pointer) })
8370 }
8371
8372 #[must_use]
8374 pub fn binary_operator_loc(&self) -> Location<'pr> {
8375 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
8376 Location::new(self.parser, unsafe { &(*pointer) })
8377 }
8378
8379 #[must_use]
8381 pub fn value(&self) -> Node<'pr> {
8382 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
8383 Node::new(self.parser, node)
8384 }
8385
8386 #[must_use]
8388 pub fn binary_operator(&self) -> ConstantId<'pr> {
8389 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
8390 }
8391}
8392
8393impl std::fmt::Debug for GlobalVariableOperatorWriteNode<'_> {
8394 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8395 write!(f, "GlobalVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
8396 }
8397}
8398
8399pub struct GlobalVariableOrWriteNode<'pr> {
8406 parser: *const pm_parser_t,
8408
8409 pointer: *mut pm_global_variable_or_write_node_t,
8411
8412 marker: PhantomData<&'pr mut pm_global_variable_or_write_node_t>
8414}
8415
8416impl<'pr> GlobalVariableOrWriteNode<'pr> {
8417 #[must_use]
8419 pub const fn as_node(&self) -> Node<'pr> {
8420 Node::GlobalVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8421 }
8422
8423 #[must_use]
8425 pub fn location(&self) -> Location<'pr> {
8426 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8427 Location::new(self.parser, unsafe { &(*pointer) })
8428 }
8429
8430 #[must_use]
8432 pub fn flags(&self) -> pm_node_flags_t {
8433 unsafe { (*self.pointer).base.flags }
8434 }
8435
8436 #[must_use]
8438 pub fn name(&self) -> ConstantId<'pr> {
8439 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
8440 }
8441
8442 #[must_use]
8444 pub fn name_loc(&self) -> Location<'pr> {
8445 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
8446 Location::new(self.parser, unsafe { &(*pointer) })
8447 }
8448
8449 #[must_use]
8451 pub fn operator_loc(&self) -> Location<'pr> {
8452 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
8453 Location::new(self.parser, unsafe { &(*pointer) })
8454 }
8455
8456 #[must_use]
8458 pub fn value(&self) -> Node<'pr> {
8459 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
8460 Node::new(self.parser, node)
8461 }
8462}
8463
8464impl std::fmt::Debug for GlobalVariableOrWriteNode<'_> {
8465 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8466 write!(f, "GlobalVariableOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
8467 }
8468}
8469
8470pub struct GlobalVariableReadNode<'pr> {
8477 parser: *const pm_parser_t,
8479
8480 pointer: *mut pm_global_variable_read_node_t,
8482
8483 marker: PhantomData<&'pr mut pm_global_variable_read_node_t>
8485}
8486
8487impl<'pr> GlobalVariableReadNode<'pr> {
8488 #[must_use]
8490 pub const fn as_node(&self) -> Node<'pr> {
8491 Node::GlobalVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8492 }
8493
8494 #[must_use]
8496 pub fn location(&self) -> Location<'pr> {
8497 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8498 Location::new(self.parser, unsafe { &(*pointer) })
8499 }
8500
8501 #[must_use]
8503 pub fn flags(&self) -> pm_node_flags_t {
8504 unsafe { (*self.pointer).base.flags }
8505 }
8506
8507 #[must_use]
8509 pub fn name(&self) -> ConstantId<'pr> {
8510 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
8511 }
8512}
8513
8514impl std::fmt::Debug for GlobalVariableReadNode<'_> {
8515 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8516 write!(f, "GlobalVariableReadNode({:?})", self.name())
8517 }
8518}
8519
8520pub struct GlobalVariableTargetNode<'pr> {
8527 parser: *const pm_parser_t,
8529
8530 pointer: *mut pm_global_variable_target_node_t,
8532
8533 marker: PhantomData<&'pr mut pm_global_variable_target_node_t>
8535}
8536
8537impl<'pr> GlobalVariableTargetNode<'pr> {
8538 #[must_use]
8540 pub const fn as_node(&self) -> Node<'pr> {
8541 Node::GlobalVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8542 }
8543
8544 #[must_use]
8546 pub fn location(&self) -> Location<'pr> {
8547 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8548 Location::new(self.parser, unsafe { &(*pointer) })
8549 }
8550
8551 #[must_use]
8553 pub fn flags(&self) -> pm_node_flags_t {
8554 unsafe { (*self.pointer).base.flags }
8555 }
8556
8557 #[must_use]
8559 pub fn name(&self) -> ConstantId<'pr> {
8560 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
8561 }
8562}
8563
8564impl std::fmt::Debug for GlobalVariableTargetNode<'_> {
8565 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8566 write!(f, "GlobalVariableTargetNode({:?})", self.name())
8567 }
8568}
8569
8570pub struct GlobalVariableWriteNode<'pr> {
8577 parser: *const pm_parser_t,
8579
8580 pointer: *mut pm_global_variable_write_node_t,
8582
8583 marker: PhantomData<&'pr mut pm_global_variable_write_node_t>
8585}
8586
8587impl<'pr> GlobalVariableWriteNode<'pr> {
8588 #[must_use]
8590 pub const fn as_node(&self) -> Node<'pr> {
8591 Node::GlobalVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8592 }
8593
8594 #[must_use]
8596 pub fn location(&self) -> Location<'pr> {
8597 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8598 Location::new(self.parser, unsafe { &(*pointer) })
8599 }
8600
8601 #[must_use]
8603 pub fn flags(&self) -> pm_node_flags_t {
8604 unsafe { (*self.pointer).base.flags }
8605 }
8606
8607 #[must_use]
8609 pub fn name(&self) -> ConstantId<'pr> {
8610 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
8611 }
8612
8613 #[must_use]
8615 pub fn name_loc(&self) -> Location<'pr> {
8616 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
8617 Location::new(self.parser, unsafe { &(*pointer) })
8618 }
8619
8620 #[must_use]
8622 pub fn value(&self) -> Node<'pr> {
8623 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
8624 Node::new(self.parser, node)
8625 }
8626
8627 #[must_use]
8629 pub fn operator_loc(&self) -> Location<'pr> {
8630 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
8631 Location::new(self.parser, unsafe { &(*pointer) })
8632 }
8633}
8634
8635impl std::fmt::Debug for GlobalVariableWriteNode<'_> {
8636 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8637 write!(f, "GlobalVariableWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
8638 }
8639}
8640
8641pub struct HashNode<'pr> {
8648 parser: *const pm_parser_t,
8650
8651 pointer: *mut pm_hash_node_t,
8653
8654 marker: PhantomData<&'pr mut pm_hash_node_t>
8656}
8657
8658impl<'pr> HashNode<'pr> {
8659 #[must_use]
8661 pub const fn as_node(&self) -> Node<'pr> {
8662 Node::HashNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8663 }
8664
8665 #[must_use]
8667 pub fn location(&self) -> Location<'pr> {
8668 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8669 Location::new(self.parser, unsafe { &(*pointer) })
8670 }
8671
8672 #[must_use]
8674 pub fn flags(&self) -> pm_node_flags_t {
8675 unsafe { (*self.pointer).base.flags }
8676 }
8677
8678 #[must_use]
8680 pub fn opening_loc(&self) -> Location<'pr> {
8681 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
8682 Location::new(self.parser, unsafe { &(*pointer) })
8683 }
8684
8685 #[must_use]
8687 pub fn elements(&self) -> NodeList<'pr> {
8688 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).elements };
8689 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
8690 }
8691
8692 #[must_use]
8694 pub fn closing_loc(&self) -> Location<'pr> {
8695 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
8696 Location::new(self.parser, unsafe { &(*pointer) })
8697 }
8698}
8699
8700impl std::fmt::Debug for HashNode<'_> {
8701 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8702 write!(f, "HashNode({:?}, {:?}, {:?})", self.opening_loc(), self.elements(), self.closing_loc())
8703 }
8704}
8705
8706pub struct HashPatternNode<'pr> {
8728 parser: *const pm_parser_t,
8730
8731 pointer: *mut pm_hash_pattern_node_t,
8733
8734 marker: PhantomData<&'pr mut pm_hash_pattern_node_t>
8736}
8737
8738impl<'pr> HashPatternNode<'pr> {
8739 #[must_use]
8741 pub const fn as_node(&self) -> Node<'pr> {
8742 Node::HashPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8743 }
8744
8745 #[must_use]
8747 pub fn location(&self) -> Location<'pr> {
8748 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8749 Location::new(self.parser, unsafe { &(*pointer) })
8750 }
8751
8752 #[must_use]
8754 pub fn flags(&self) -> pm_node_flags_t {
8755 unsafe { (*self.pointer).base.flags }
8756 }
8757
8758 #[must_use]
8760 pub fn constant(&self) -> Option<Node<'pr>> {
8761 let node: *mut pm_node_t = unsafe { (*self.pointer).constant };
8762 if node.is_null() {
8763 None
8764 } else {
8765 Some(Node::new(self.parser, node))
8766 }
8767 }
8768
8769 #[must_use]
8771 pub fn elements(&self) -> NodeList<'pr> {
8772 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).elements };
8773 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
8774 }
8775
8776 #[must_use]
8778 pub fn rest(&self) -> Option<Node<'pr>> {
8779 let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
8780 if node.is_null() {
8781 None
8782 } else {
8783 Some(Node::new(self.parser, node))
8784 }
8785 }
8786
8787 #[must_use]
8789 pub fn opening_loc(&self) -> Option<Location<'pr>> {
8790 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
8791 let length = unsafe { (*pointer).length };
8792 if length == 0 {
8793 None
8794 } else {
8795 Some(Location::new(self.parser, unsafe { &(*pointer) }))
8796 }
8797 }
8798
8799 #[must_use]
8801 pub fn closing_loc(&self) -> Option<Location<'pr>> {
8802 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
8803 let length = unsafe { (*pointer).length };
8804 if length == 0 {
8805 None
8806 } else {
8807 Some(Location::new(self.parser, unsafe { &(*pointer) }))
8808 }
8809 }
8810}
8811
8812impl std::fmt::Debug for HashPatternNode<'_> {
8813 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8814 write!(f, "HashPatternNode({:?}, {:?}, {:?}, {:?}, {:?})", self.constant(), self.elements(), self.rest(), self.opening_loc(), self.closing_loc())
8815 }
8816}
8817
8818pub struct IfNode<'pr> {
8835 parser: *const pm_parser_t,
8837
8838 pointer: *mut pm_if_node_t,
8840
8841 marker: PhantomData<&'pr mut pm_if_node_t>
8843}
8844
8845impl<'pr> IfNode<'pr> {
8846 #[must_use]
8848 pub const fn as_node(&self) -> Node<'pr> {
8849 Node::IfNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8850 }
8851
8852 #[must_use]
8854 pub fn location(&self) -> Location<'pr> {
8855 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8856 Location::new(self.parser, unsafe { &(*pointer) })
8857 }
8858
8859 #[must_use]
8861 pub fn flags(&self) -> pm_node_flags_t {
8862 unsafe { (*self.pointer).base.flags }
8863 }
8864
8865 #[must_use]
8867 pub fn if_keyword_loc(&self) -> Option<Location<'pr>> {
8868 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).if_keyword_loc };
8869 let length = unsafe { (*pointer).length };
8870 if length == 0 {
8871 None
8872 } else {
8873 Some(Location::new(self.parser, unsafe { &(*pointer) }))
8874 }
8875 }
8876
8877 #[must_use]
8879 pub fn predicate(&self) -> Node<'pr> {
8880 let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
8881 Node::new(self.parser, node)
8882 }
8883
8884 #[must_use]
8886 pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
8887 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).then_keyword_loc };
8888 let length = unsafe { (*pointer).length };
8889 if length == 0 {
8890 None
8891 } else {
8892 Some(Location::new(self.parser, unsafe { &(*pointer) }))
8893 }
8894 }
8895
8896 #[must_use]
8898 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
8899 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
8900 if node.is_null() {
8901 None
8902 } else {
8903 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
8904 }
8905 }
8906
8907 #[must_use]
8909 pub fn subsequent(&self) -> Option<Node<'pr>> {
8910 let node: *mut pm_node_t = unsafe { (*self.pointer).subsequent };
8911 if node.is_null() {
8912 None
8913 } else {
8914 Some(Node::new(self.parser, node))
8915 }
8916 }
8917
8918 #[must_use]
8920 pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
8921 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
8922 let length = unsafe { (*pointer).length };
8923 if length == 0 {
8924 None
8925 } else {
8926 Some(Location::new(self.parser, unsafe { &(*pointer) }))
8927 }
8928 }
8929}
8930
8931impl std::fmt::Debug for IfNode<'_> {
8932 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8933 write!(f, "IfNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.if_keyword_loc(), self.predicate(), self.then_keyword_loc(), self.statements(), self.subsequent(), self.end_keyword_loc())
8934 }
8935}
8936
8937pub struct ImaginaryNode<'pr> {
8944 parser: *const pm_parser_t,
8946
8947 pointer: *mut pm_imaginary_node_t,
8949
8950 marker: PhantomData<&'pr mut pm_imaginary_node_t>
8952}
8953
8954impl<'pr> ImaginaryNode<'pr> {
8955 #[must_use]
8957 pub const fn as_node(&self) -> Node<'pr> {
8958 Node::ImaginaryNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
8959 }
8960
8961 #[must_use]
8963 pub fn location(&self) -> Location<'pr> {
8964 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
8965 Location::new(self.parser, unsafe { &(*pointer) })
8966 }
8967
8968 #[must_use]
8970 pub fn flags(&self) -> pm_node_flags_t {
8971 unsafe { (*self.pointer).base.flags }
8972 }
8973
8974 #[must_use]
8976 pub fn numeric(&self) -> Node<'pr> {
8977 let node: *mut pm_node_t = unsafe { (*self.pointer).numeric };
8978 Node::new(self.parser, node)
8979 }
8980}
8981
8982impl std::fmt::Debug for ImaginaryNode<'_> {
8983 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
8984 write!(f, "ImaginaryNode({:?})", self.numeric())
8985 }
8986}
8987
8988pub struct ImplicitNode<'pr> {
9005 parser: *const pm_parser_t,
9007
9008 pointer: *mut pm_implicit_node_t,
9010
9011 marker: PhantomData<&'pr mut pm_implicit_node_t>
9013}
9014
9015impl<'pr> ImplicitNode<'pr> {
9016 #[must_use]
9018 pub const fn as_node(&self) -> Node<'pr> {
9019 Node::ImplicitNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9020 }
9021
9022 #[must_use]
9024 pub fn location(&self) -> Location<'pr> {
9025 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9026 Location::new(self.parser, unsafe { &(*pointer) })
9027 }
9028
9029 #[must_use]
9031 pub fn flags(&self) -> pm_node_flags_t {
9032 unsafe { (*self.pointer).base.flags }
9033 }
9034
9035 #[must_use]
9037 pub fn value(&self) -> Node<'pr> {
9038 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9039 Node::new(self.parser, node)
9040 }
9041}
9042
9043impl std::fmt::Debug for ImplicitNode<'_> {
9044 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9045 write!(f, "ImplicitNode({:?})", self.value())
9046 }
9047}
9048
9049pub struct ImplicitRestNode<'pr> {
9071 parser: *const pm_parser_t,
9073
9074 pointer: *mut pm_implicit_rest_node_t,
9076
9077 marker: PhantomData<&'pr mut pm_implicit_rest_node_t>
9079}
9080
9081impl<'pr> ImplicitRestNode<'pr> {
9082 #[must_use]
9084 pub const fn as_node(&self) -> Node<'pr> {
9085 Node::ImplicitRestNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9086 }
9087
9088 #[must_use]
9090 pub fn location(&self) -> Location<'pr> {
9091 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9092 Location::new(self.parser, unsafe { &(*pointer) })
9093 }
9094
9095 #[must_use]
9097 pub fn flags(&self) -> pm_node_flags_t {
9098 unsafe { (*self.pointer).base.flags }
9099 }
9100}
9101
9102impl std::fmt::Debug for ImplicitRestNode<'_> {
9103 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9104 write!(f, "ImplicitRestNode()")
9105 }
9106}
9107
9108pub struct InNode<'pr> {
9115 parser: *const pm_parser_t,
9117
9118 pointer: *mut pm_in_node_t,
9120
9121 marker: PhantomData<&'pr mut pm_in_node_t>
9123}
9124
9125impl<'pr> InNode<'pr> {
9126 #[must_use]
9128 pub const fn as_node(&self) -> Node<'pr> {
9129 Node::InNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9130 }
9131
9132 #[must_use]
9134 pub fn location(&self) -> Location<'pr> {
9135 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9136 Location::new(self.parser, unsafe { &(*pointer) })
9137 }
9138
9139 #[must_use]
9141 pub fn flags(&self) -> pm_node_flags_t {
9142 unsafe { (*self.pointer).base.flags }
9143 }
9144
9145 #[must_use]
9147 pub fn pattern(&self) -> Node<'pr> {
9148 let node: *mut pm_node_t = unsafe { (*self.pointer).pattern };
9149 Node::new(self.parser, node)
9150 }
9151
9152 #[must_use]
9154 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
9155 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
9156 if node.is_null() {
9157 None
9158 } else {
9159 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
9160 }
9161 }
9162
9163 #[must_use]
9165 pub fn in_loc(&self) -> Location<'pr> {
9166 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).in_loc };
9167 Location::new(self.parser, unsafe { &(*pointer) })
9168 }
9169
9170 #[must_use]
9172 pub fn then_loc(&self) -> Option<Location<'pr>> {
9173 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).then_loc };
9174 let length = unsafe { (*pointer).length };
9175 if length == 0 {
9176 None
9177 } else {
9178 Some(Location::new(self.parser, unsafe { &(*pointer) }))
9179 }
9180 }
9181}
9182
9183impl std::fmt::Debug for InNode<'_> {
9184 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9185 write!(f, "InNode({:?}, {:?}, {:?}, {:?})", self.pattern(), self.statements(), self.in_loc(), self.then_loc())
9186 }
9187}
9188
9189pub struct IndexAndWriteNode<'pr> {
9196 parser: *const pm_parser_t,
9198
9199 pointer: *mut pm_index_and_write_node_t,
9201
9202 marker: PhantomData<&'pr mut pm_index_and_write_node_t>
9204}
9205
9206impl<'pr> IndexAndWriteNode<'pr> {
9207 #[must_use]
9209 pub const fn as_node(&self) -> Node<'pr> {
9210 Node::IndexAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9211 }
9212
9213 #[must_use]
9215 pub fn location(&self) -> Location<'pr> {
9216 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9217 Location::new(self.parser, unsafe { &(*pointer) })
9218 }
9219
9220 #[must_use]
9222 pub fn flags(&self) -> pm_node_flags_t {
9223 unsafe { (*self.pointer).base.flags }
9224 }
9225
9226 #[must_use]
9228 pub fn is_safe_navigation(&self) -> bool {
9229 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
9230 }
9231
9232 #[must_use]
9234 pub fn is_variable_call(&self) -> bool {
9235 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
9236 }
9237
9238 #[must_use]
9240 pub fn is_attribute_write(&self) -> bool {
9241 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
9242 }
9243
9244 #[must_use]
9246 pub fn is_ignore_visibility(&self) -> bool {
9247 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
9248 }
9249
9250 #[must_use]
9252 pub fn receiver(&self) -> Option<Node<'pr>> {
9253 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
9254 if node.is_null() {
9255 None
9256 } else {
9257 Some(Node::new(self.parser, node))
9258 }
9259 }
9260
9261 #[must_use]
9263 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
9264 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
9265 let length = unsafe { (*pointer).length };
9266 if length == 0 {
9267 None
9268 } else {
9269 Some(Location::new(self.parser, unsafe { &(*pointer) }))
9270 }
9271 }
9272
9273 #[must_use]
9275 pub fn opening_loc(&self) -> Location<'pr> {
9276 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
9277 Location::new(self.parser, unsafe { &(*pointer) })
9278 }
9279
9280 #[must_use]
9282 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
9283 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
9284 if node.is_null() {
9285 None
9286 } else {
9287 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
9288 }
9289 }
9290
9291 #[must_use]
9293 pub fn closing_loc(&self) -> Location<'pr> {
9294 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
9295 Location::new(self.parser, unsafe { &(*pointer) })
9296 }
9297
9298 #[must_use]
9300 pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
9301 let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
9302 if node.is_null() {
9303 None
9304 } else {
9305 Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
9306 }
9307 }
9308
9309 #[must_use]
9311 pub fn operator_loc(&self) -> Location<'pr> {
9312 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
9313 Location::new(self.parser, unsafe { &(*pointer) })
9314 }
9315
9316 #[must_use]
9318 pub fn value(&self) -> Node<'pr> {
9319 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9320 Node::new(self.parser, node)
9321 }
9322}
9323
9324impl std::fmt::Debug for IndexAndWriteNode<'_> {
9325 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9326 write!(f, "IndexAndWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block(), self.operator_loc(), self.value())
9327 }
9328}
9329
9330pub struct IndexOperatorWriteNode<'pr> {
9337 parser: *const pm_parser_t,
9339
9340 pointer: *mut pm_index_operator_write_node_t,
9342
9343 marker: PhantomData<&'pr mut pm_index_operator_write_node_t>
9345}
9346
9347impl<'pr> IndexOperatorWriteNode<'pr> {
9348 #[must_use]
9350 pub const fn as_node(&self) -> Node<'pr> {
9351 Node::IndexOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9352 }
9353
9354 #[must_use]
9356 pub fn location(&self) -> Location<'pr> {
9357 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9358 Location::new(self.parser, unsafe { &(*pointer) })
9359 }
9360
9361 #[must_use]
9363 pub fn flags(&self) -> pm_node_flags_t {
9364 unsafe { (*self.pointer).base.flags }
9365 }
9366
9367 #[must_use]
9369 pub fn is_safe_navigation(&self) -> bool {
9370 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
9371 }
9372
9373 #[must_use]
9375 pub fn is_variable_call(&self) -> bool {
9376 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
9377 }
9378
9379 #[must_use]
9381 pub fn is_attribute_write(&self) -> bool {
9382 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
9383 }
9384
9385 #[must_use]
9387 pub fn is_ignore_visibility(&self) -> bool {
9388 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
9389 }
9390
9391 #[must_use]
9393 pub fn receiver(&self) -> Option<Node<'pr>> {
9394 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
9395 if node.is_null() {
9396 None
9397 } else {
9398 Some(Node::new(self.parser, node))
9399 }
9400 }
9401
9402 #[must_use]
9404 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
9405 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
9406 let length = unsafe { (*pointer).length };
9407 if length == 0 {
9408 None
9409 } else {
9410 Some(Location::new(self.parser, unsafe { &(*pointer) }))
9411 }
9412 }
9413
9414 #[must_use]
9416 pub fn opening_loc(&self) -> Location<'pr> {
9417 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
9418 Location::new(self.parser, unsafe { &(*pointer) })
9419 }
9420
9421 #[must_use]
9423 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
9424 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
9425 if node.is_null() {
9426 None
9427 } else {
9428 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
9429 }
9430 }
9431
9432 #[must_use]
9434 pub fn closing_loc(&self) -> Location<'pr> {
9435 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
9436 Location::new(self.parser, unsafe { &(*pointer) })
9437 }
9438
9439 #[must_use]
9441 pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
9442 let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
9443 if node.is_null() {
9444 None
9445 } else {
9446 Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
9447 }
9448 }
9449
9450 #[must_use]
9452 pub fn binary_operator(&self) -> ConstantId<'pr> {
9453 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
9454 }
9455
9456 #[must_use]
9458 pub fn binary_operator_loc(&self) -> Location<'pr> {
9459 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
9460 Location::new(self.parser, unsafe { &(*pointer) })
9461 }
9462
9463 #[must_use]
9465 pub fn value(&self) -> Node<'pr> {
9466 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9467 Node::new(self.parser, node)
9468 }
9469}
9470
9471impl std::fmt::Debug for IndexOperatorWriteNode<'_> {
9472 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9473 write!(f, "IndexOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block(), self.binary_operator(), self.binary_operator_loc(), self.value())
9474 }
9475}
9476
9477pub struct IndexOrWriteNode<'pr> {
9484 parser: *const pm_parser_t,
9486
9487 pointer: *mut pm_index_or_write_node_t,
9489
9490 marker: PhantomData<&'pr mut pm_index_or_write_node_t>
9492}
9493
9494impl<'pr> IndexOrWriteNode<'pr> {
9495 #[must_use]
9497 pub const fn as_node(&self) -> Node<'pr> {
9498 Node::IndexOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9499 }
9500
9501 #[must_use]
9503 pub fn location(&self) -> Location<'pr> {
9504 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9505 Location::new(self.parser, unsafe { &(*pointer) })
9506 }
9507
9508 #[must_use]
9510 pub fn flags(&self) -> pm_node_flags_t {
9511 unsafe { (*self.pointer).base.flags }
9512 }
9513
9514 #[must_use]
9516 pub fn is_safe_navigation(&self) -> bool {
9517 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
9518 }
9519
9520 #[must_use]
9522 pub fn is_variable_call(&self) -> bool {
9523 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
9524 }
9525
9526 #[must_use]
9528 pub fn is_attribute_write(&self) -> bool {
9529 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
9530 }
9531
9532 #[must_use]
9534 pub fn is_ignore_visibility(&self) -> bool {
9535 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
9536 }
9537
9538 #[must_use]
9540 pub fn receiver(&self) -> Option<Node<'pr>> {
9541 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
9542 if node.is_null() {
9543 None
9544 } else {
9545 Some(Node::new(self.parser, node))
9546 }
9547 }
9548
9549 #[must_use]
9551 pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
9552 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).call_operator_loc };
9553 let length = unsafe { (*pointer).length };
9554 if length == 0 {
9555 None
9556 } else {
9557 Some(Location::new(self.parser, unsafe { &(*pointer) }))
9558 }
9559 }
9560
9561 #[must_use]
9563 pub fn opening_loc(&self) -> Location<'pr> {
9564 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
9565 Location::new(self.parser, unsafe { &(*pointer) })
9566 }
9567
9568 #[must_use]
9570 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
9571 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
9572 if node.is_null() {
9573 None
9574 } else {
9575 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
9576 }
9577 }
9578
9579 #[must_use]
9581 pub fn closing_loc(&self) -> Location<'pr> {
9582 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
9583 Location::new(self.parser, unsafe { &(*pointer) })
9584 }
9585
9586 #[must_use]
9588 pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
9589 let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
9590 if node.is_null() {
9591 None
9592 } else {
9593 Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
9594 }
9595 }
9596
9597 #[must_use]
9599 pub fn operator_loc(&self) -> Location<'pr> {
9600 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
9601 Location::new(self.parser, unsafe { &(*pointer) })
9602 }
9603
9604 #[must_use]
9606 pub fn value(&self) -> Node<'pr> {
9607 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9608 Node::new(self.parser, node)
9609 }
9610}
9611
9612impl std::fmt::Debug for IndexOrWriteNode<'_> {
9613 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9614 write!(f, "IndexOrWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block(), self.operator_loc(), self.value())
9615 }
9616}
9617
9618pub struct IndexTargetNode<'pr> {
9637 parser: *const pm_parser_t,
9639
9640 pointer: *mut pm_index_target_node_t,
9642
9643 marker: PhantomData<&'pr mut pm_index_target_node_t>
9645}
9646
9647impl<'pr> IndexTargetNode<'pr> {
9648 #[must_use]
9650 pub const fn as_node(&self) -> Node<'pr> {
9651 Node::IndexTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9652 }
9653
9654 #[must_use]
9656 pub fn location(&self) -> Location<'pr> {
9657 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9658 Location::new(self.parser, unsafe { &(*pointer) })
9659 }
9660
9661 #[must_use]
9663 pub fn flags(&self) -> pm_node_flags_t {
9664 unsafe { (*self.pointer).base.flags }
9665 }
9666
9667 #[must_use]
9669 pub fn is_safe_navigation(&self) -> bool {
9670 (self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
9671 }
9672
9673 #[must_use]
9675 pub fn is_variable_call(&self) -> bool {
9676 (self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
9677 }
9678
9679 #[must_use]
9681 pub fn is_attribute_write(&self) -> bool {
9682 (self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
9683 }
9684
9685 #[must_use]
9687 pub fn is_ignore_visibility(&self) -> bool {
9688 (self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
9689 }
9690
9691 #[must_use]
9693 pub fn receiver(&self) -> Node<'pr> {
9694 let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
9695 Node::new(self.parser, node)
9696 }
9697
9698 #[must_use]
9700 pub fn opening_loc(&self) -> Location<'pr> {
9701 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
9702 Location::new(self.parser, unsafe { &(*pointer) })
9703 }
9704
9705 #[must_use]
9707 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
9708 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
9709 if node.is_null() {
9710 None
9711 } else {
9712 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
9713 }
9714 }
9715
9716 #[must_use]
9718 pub fn closing_loc(&self) -> Location<'pr> {
9719 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
9720 Location::new(self.parser, unsafe { &(*pointer) })
9721 }
9722
9723 #[must_use]
9725 pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
9726 let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
9727 if node.is_null() {
9728 None
9729 } else {
9730 Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
9731 }
9732 }
9733}
9734
9735impl std::fmt::Debug for IndexTargetNode<'_> {
9736 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9737 write!(f, "IndexTargetNode({:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block())
9738 }
9739}
9740
9741pub struct InstanceVariableAndWriteNode<'pr> {
9748 parser: *const pm_parser_t,
9750
9751 pointer: *mut pm_instance_variable_and_write_node_t,
9753
9754 marker: PhantomData<&'pr mut pm_instance_variable_and_write_node_t>
9756}
9757
9758impl<'pr> InstanceVariableAndWriteNode<'pr> {
9759 #[must_use]
9761 pub const fn as_node(&self) -> Node<'pr> {
9762 Node::InstanceVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9763 }
9764
9765 #[must_use]
9767 pub fn location(&self) -> Location<'pr> {
9768 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9769 Location::new(self.parser, unsafe { &(*pointer) })
9770 }
9771
9772 #[must_use]
9774 pub fn flags(&self) -> pm_node_flags_t {
9775 unsafe { (*self.pointer).base.flags }
9776 }
9777
9778 #[must_use]
9780 pub fn name(&self) -> ConstantId<'pr> {
9781 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
9782 }
9783
9784 #[must_use]
9786 pub fn name_loc(&self) -> Location<'pr> {
9787 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
9788 Location::new(self.parser, unsafe { &(*pointer) })
9789 }
9790
9791 #[must_use]
9793 pub fn operator_loc(&self) -> Location<'pr> {
9794 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
9795 Location::new(self.parser, unsafe { &(*pointer) })
9796 }
9797
9798 #[must_use]
9800 pub fn value(&self) -> Node<'pr> {
9801 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9802 Node::new(self.parser, node)
9803 }
9804}
9805
9806impl std::fmt::Debug for InstanceVariableAndWriteNode<'_> {
9807 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9808 write!(f, "InstanceVariableAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
9809 }
9810}
9811
9812pub struct InstanceVariableOperatorWriteNode<'pr> {
9819 parser: *const pm_parser_t,
9821
9822 pointer: *mut pm_instance_variable_operator_write_node_t,
9824
9825 marker: PhantomData<&'pr mut pm_instance_variable_operator_write_node_t>
9827}
9828
9829impl<'pr> InstanceVariableOperatorWriteNode<'pr> {
9830 #[must_use]
9832 pub const fn as_node(&self) -> Node<'pr> {
9833 Node::InstanceVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9834 }
9835
9836 #[must_use]
9838 pub fn location(&self) -> Location<'pr> {
9839 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9840 Location::new(self.parser, unsafe { &(*pointer) })
9841 }
9842
9843 #[must_use]
9845 pub fn flags(&self) -> pm_node_flags_t {
9846 unsafe { (*self.pointer).base.flags }
9847 }
9848
9849 #[must_use]
9851 pub fn name(&self) -> ConstantId<'pr> {
9852 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
9853 }
9854
9855 #[must_use]
9857 pub fn name_loc(&self) -> Location<'pr> {
9858 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
9859 Location::new(self.parser, unsafe { &(*pointer) })
9860 }
9861
9862 #[must_use]
9864 pub fn binary_operator_loc(&self) -> Location<'pr> {
9865 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
9866 Location::new(self.parser, unsafe { &(*pointer) })
9867 }
9868
9869 #[must_use]
9871 pub fn value(&self) -> Node<'pr> {
9872 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9873 Node::new(self.parser, node)
9874 }
9875
9876 #[must_use]
9878 pub fn binary_operator(&self) -> ConstantId<'pr> {
9879 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
9880 }
9881}
9882
9883impl std::fmt::Debug for InstanceVariableOperatorWriteNode<'_> {
9884 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9885 write!(f, "InstanceVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
9886 }
9887}
9888
9889pub struct InstanceVariableOrWriteNode<'pr> {
9896 parser: *const pm_parser_t,
9898
9899 pointer: *mut pm_instance_variable_or_write_node_t,
9901
9902 marker: PhantomData<&'pr mut pm_instance_variable_or_write_node_t>
9904}
9905
9906impl<'pr> InstanceVariableOrWriteNode<'pr> {
9907 #[must_use]
9909 pub const fn as_node(&self) -> Node<'pr> {
9910 Node::InstanceVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9911 }
9912
9913 #[must_use]
9915 pub fn location(&self) -> Location<'pr> {
9916 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9917 Location::new(self.parser, unsafe { &(*pointer) })
9918 }
9919
9920 #[must_use]
9922 pub fn flags(&self) -> pm_node_flags_t {
9923 unsafe { (*self.pointer).base.flags }
9924 }
9925
9926 #[must_use]
9928 pub fn name(&self) -> ConstantId<'pr> {
9929 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
9930 }
9931
9932 #[must_use]
9934 pub fn name_loc(&self) -> Location<'pr> {
9935 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
9936 Location::new(self.parser, unsafe { &(*pointer) })
9937 }
9938
9939 #[must_use]
9941 pub fn operator_loc(&self) -> Location<'pr> {
9942 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
9943 Location::new(self.parser, unsafe { &(*pointer) })
9944 }
9945
9946 #[must_use]
9948 pub fn value(&self) -> Node<'pr> {
9949 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
9950 Node::new(self.parser, node)
9951 }
9952}
9953
9954impl std::fmt::Debug for InstanceVariableOrWriteNode<'_> {
9955 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
9956 write!(f, "InstanceVariableOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
9957 }
9958}
9959
9960pub struct InstanceVariableReadNode<'pr> {
9967 parser: *const pm_parser_t,
9969
9970 pointer: *mut pm_instance_variable_read_node_t,
9972
9973 marker: PhantomData<&'pr mut pm_instance_variable_read_node_t>
9975}
9976
9977impl<'pr> InstanceVariableReadNode<'pr> {
9978 #[must_use]
9980 pub const fn as_node(&self) -> Node<'pr> {
9981 Node::InstanceVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
9982 }
9983
9984 #[must_use]
9986 pub fn location(&self) -> Location<'pr> {
9987 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
9988 Location::new(self.parser, unsafe { &(*pointer) })
9989 }
9990
9991 #[must_use]
9993 pub fn flags(&self) -> pm_node_flags_t {
9994 unsafe { (*self.pointer).base.flags }
9995 }
9996
9997 #[must_use]
9999 pub fn name(&self) -> ConstantId<'pr> {
10000 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
10001 }
10002}
10003
10004impl std::fmt::Debug for InstanceVariableReadNode<'_> {
10005 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10006 write!(f, "InstanceVariableReadNode({:?})", self.name())
10007 }
10008}
10009
10010pub struct InstanceVariableTargetNode<'pr> {
10017 parser: *const pm_parser_t,
10019
10020 pointer: *mut pm_instance_variable_target_node_t,
10022
10023 marker: PhantomData<&'pr mut pm_instance_variable_target_node_t>
10025}
10026
10027impl<'pr> InstanceVariableTargetNode<'pr> {
10028 #[must_use]
10030 pub const fn as_node(&self) -> Node<'pr> {
10031 Node::InstanceVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10032 }
10033
10034 #[must_use]
10036 pub fn location(&self) -> Location<'pr> {
10037 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10038 Location::new(self.parser, unsafe { &(*pointer) })
10039 }
10040
10041 #[must_use]
10043 pub fn flags(&self) -> pm_node_flags_t {
10044 unsafe { (*self.pointer).base.flags }
10045 }
10046
10047 #[must_use]
10049 pub fn name(&self) -> ConstantId<'pr> {
10050 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
10051 }
10052}
10053
10054impl std::fmt::Debug for InstanceVariableTargetNode<'_> {
10055 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10056 write!(f, "InstanceVariableTargetNode({:?})", self.name())
10057 }
10058}
10059
10060pub struct InstanceVariableWriteNode<'pr> {
10067 parser: *const pm_parser_t,
10069
10070 pointer: *mut pm_instance_variable_write_node_t,
10072
10073 marker: PhantomData<&'pr mut pm_instance_variable_write_node_t>
10075}
10076
10077impl<'pr> InstanceVariableWriteNode<'pr> {
10078 #[must_use]
10080 pub const fn as_node(&self) -> Node<'pr> {
10081 Node::InstanceVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10082 }
10083
10084 #[must_use]
10086 pub fn location(&self) -> Location<'pr> {
10087 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10088 Location::new(self.parser, unsafe { &(*pointer) })
10089 }
10090
10091 #[must_use]
10093 pub fn flags(&self) -> pm_node_flags_t {
10094 unsafe { (*self.pointer).base.flags }
10095 }
10096
10097 #[must_use]
10099 pub fn name(&self) -> ConstantId<'pr> {
10100 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
10101 }
10102
10103 #[must_use]
10105 pub fn name_loc(&self) -> Location<'pr> {
10106 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
10107 Location::new(self.parser, unsafe { &(*pointer) })
10108 }
10109
10110 #[must_use]
10112 pub fn value(&self) -> Node<'pr> {
10113 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
10114 Node::new(self.parser, node)
10115 }
10116
10117 #[must_use]
10119 pub fn operator_loc(&self) -> Location<'pr> {
10120 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
10121 Location::new(self.parser, unsafe { &(*pointer) })
10122 }
10123}
10124
10125impl std::fmt::Debug for InstanceVariableWriteNode<'_> {
10126 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10127 write!(f, "InstanceVariableWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
10128 }
10129}
10130
10131pub struct IntegerNode<'pr> {
10138 parser: *const pm_parser_t,
10140
10141 pointer: *mut pm_integer_node_t,
10143
10144 marker: PhantomData<&'pr mut pm_integer_node_t>
10146}
10147
10148impl<'pr> IntegerNode<'pr> {
10149 #[must_use]
10151 pub const fn as_node(&self) -> Node<'pr> {
10152 Node::IntegerNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10153 }
10154
10155 #[must_use]
10157 pub fn location(&self) -> Location<'pr> {
10158 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10159 Location::new(self.parser, unsafe { &(*pointer) })
10160 }
10161
10162 #[must_use]
10164 pub fn flags(&self) -> pm_node_flags_t {
10165 unsafe { (*self.pointer).base.flags }
10166 }
10167
10168 #[must_use]
10170 pub fn is_binary(&self) -> bool {
10171 (self.flags() & PM_INTEGER_BASE_FLAGS_BINARY) != 0
10172 }
10173
10174 #[must_use]
10176 pub fn is_decimal(&self) -> bool {
10177 (self.flags() & PM_INTEGER_BASE_FLAGS_DECIMAL) != 0
10178 }
10179
10180 #[must_use]
10182 pub fn is_octal(&self) -> bool {
10183 (self.flags() & PM_INTEGER_BASE_FLAGS_OCTAL) != 0
10184 }
10185
10186 #[must_use]
10188 pub fn is_hexadecimal(&self) -> bool {
10189 (self.flags() & PM_INTEGER_BASE_FLAGS_HEXADECIMAL) != 0
10190 }
10191
10192 #[must_use]
10194 pub fn value(&self) -> Integer<'pr> {
10195 Integer::new(unsafe { &raw const(*self.pointer).value })
10196 }
10197}
10198
10199impl std::fmt::Debug for IntegerNode<'_> {
10200 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10201 write!(f, "IntegerNode({:?})", self.value())
10202 }
10203}
10204
10205pub struct InterpolatedMatchLastLineNode<'pr> {
10212 parser: *const pm_parser_t,
10214
10215 pointer: *mut pm_interpolated_match_last_line_node_t,
10217
10218 marker: PhantomData<&'pr mut pm_interpolated_match_last_line_node_t>
10220}
10221
10222impl<'pr> InterpolatedMatchLastLineNode<'pr> {
10223 #[must_use]
10225 pub const fn as_node(&self) -> Node<'pr> {
10226 Node::InterpolatedMatchLastLineNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10227 }
10228
10229 #[must_use]
10231 pub fn location(&self) -> Location<'pr> {
10232 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10233 Location::new(self.parser, unsafe { &(*pointer) })
10234 }
10235
10236 #[must_use]
10238 pub fn flags(&self) -> pm_node_flags_t {
10239 unsafe { (*self.pointer).base.flags }
10240 }
10241
10242 #[must_use]
10244 pub fn is_ignore_case(&self) -> bool {
10245 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
10246 }
10247
10248 #[must_use]
10250 pub fn is_extended(&self) -> bool {
10251 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
10252 }
10253
10254 #[must_use]
10256 pub fn is_multi_line(&self) -> bool {
10257 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
10258 }
10259
10260 #[must_use]
10262 pub fn is_once(&self) -> bool {
10263 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
10264 }
10265
10266 #[must_use]
10268 pub fn is_euc_jp(&self) -> bool {
10269 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
10270 }
10271
10272 #[must_use]
10274 pub fn is_ascii_8bit(&self) -> bool {
10275 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
10276 }
10277
10278 #[must_use]
10280 pub fn is_windows_31j(&self) -> bool {
10281 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
10282 }
10283
10284 #[must_use]
10286 pub fn is_utf_8(&self) -> bool {
10287 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
10288 }
10289
10290 #[must_use]
10292 pub fn is_forced_utf8_encoding(&self) -> bool {
10293 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
10294 }
10295
10296 #[must_use]
10298 pub fn is_forced_binary_encoding(&self) -> bool {
10299 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
10300 }
10301
10302 #[must_use]
10304 pub fn is_forced_us_ascii_encoding(&self) -> bool {
10305 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
10306 }
10307
10308 #[must_use]
10310 pub fn opening_loc(&self) -> Location<'pr> {
10311 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
10312 Location::new(self.parser, unsafe { &(*pointer) })
10313 }
10314
10315 #[must_use]
10317 pub fn parts(&self) -> NodeList<'pr> {
10318 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).parts };
10319 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10320 }
10321
10322 #[must_use]
10324 pub fn closing_loc(&self) -> Location<'pr> {
10325 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
10326 Location::new(self.parser, unsafe { &(*pointer) })
10327 }
10328}
10329
10330impl std::fmt::Debug for InterpolatedMatchLastLineNode<'_> {
10331 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10332 write!(f, "InterpolatedMatchLastLineNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
10333 }
10334}
10335
10336pub struct InterpolatedRegularExpressionNode<'pr> {
10343 parser: *const pm_parser_t,
10345
10346 pointer: *mut pm_interpolated_regular_expression_node_t,
10348
10349 marker: PhantomData<&'pr mut pm_interpolated_regular_expression_node_t>
10351}
10352
10353impl<'pr> InterpolatedRegularExpressionNode<'pr> {
10354 #[must_use]
10356 pub const fn as_node(&self) -> Node<'pr> {
10357 Node::InterpolatedRegularExpressionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10358 }
10359
10360 #[must_use]
10362 pub fn location(&self) -> Location<'pr> {
10363 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10364 Location::new(self.parser, unsafe { &(*pointer) })
10365 }
10366
10367 #[must_use]
10369 pub fn flags(&self) -> pm_node_flags_t {
10370 unsafe { (*self.pointer).base.flags }
10371 }
10372
10373 #[must_use]
10375 pub fn is_ignore_case(&self) -> bool {
10376 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
10377 }
10378
10379 #[must_use]
10381 pub fn is_extended(&self) -> bool {
10382 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
10383 }
10384
10385 #[must_use]
10387 pub fn is_multi_line(&self) -> bool {
10388 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
10389 }
10390
10391 #[must_use]
10393 pub fn is_once(&self) -> bool {
10394 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
10395 }
10396
10397 #[must_use]
10399 pub fn is_euc_jp(&self) -> bool {
10400 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
10401 }
10402
10403 #[must_use]
10405 pub fn is_ascii_8bit(&self) -> bool {
10406 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
10407 }
10408
10409 #[must_use]
10411 pub fn is_windows_31j(&self) -> bool {
10412 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
10413 }
10414
10415 #[must_use]
10417 pub fn is_utf_8(&self) -> bool {
10418 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
10419 }
10420
10421 #[must_use]
10423 pub fn is_forced_utf8_encoding(&self) -> bool {
10424 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
10425 }
10426
10427 #[must_use]
10429 pub fn is_forced_binary_encoding(&self) -> bool {
10430 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
10431 }
10432
10433 #[must_use]
10435 pub fn is_forced_us_ascii_encoding(&self) -> bool {
10436 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
10437 }
10438
10439 #[must_use]
10441 pub fn opening_loc(&self) -> Location<'pr> {
10442 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
10443 Location::new(self.parser, unsafe { &(*pointer) })
10444 }
10445
10446 #[must_use]
10448 pub fn parts(&self) -> NodeList<'pr> {
10449 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).parts };
10450 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10451 }
10452
10453 #[must_use]
10455 pub fn closing_loc(&self) -> Location<'pr> {
10456 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
10457 Location::new(self.parser, unsafe { &(*pointer) })
10458 }
10459}
10460
10461impl std::fmt::Debug for InterpolatedRegularExpressionNode<'_> {
10462 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10463 write!(f, "InterpolatedRegularExpressionNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
10464 }
10465}
10466
10467pub struct InterpolatedStringNode<'pr> {
10474 parser: *const pm_parser_t,
10476
10477 pointer: *mut pm_interpolated_string_node_t,
10479
10480 marker: PhantomData<&'pr mut pm_interpolated_string_node_t>
10482}
10483
10484impl<'pr> InterpolatedStringNode<'pr> {
10485 #[must_use]
10487 pub const fn as_node(&self) -> Node<'pr> {
10488 Node::InterpolatedStringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10489 }
10490
10491 #[must_use]
10493 pub fn location(&self) -> Location<'pr> {
10494 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10495 Location::new(self.parser, unsafe { &(*pointer) })
10496 }
10497
10498 #[must_use]
10500 pub fn flags(&self) -> pm_node_flags_t {
10501 unsafe { (*self.pointer).base.flags }
10502 }
10503
10504 #[must_use]
10506 pub fn is_frozen(&self) -> bool {
10507 (self.flags() & PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN) != 0
10508 }
10509
10510 #[must_use]
10512 pub fn is_mutable(&self) -> bool {
10513 (self.flags() & PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE) != 0
10514 }
10515
10516 #[must_use]
10518 pub fn opening_loc(&self) -> Option<Location<'pr>> {
10519 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
10520 let length = unsafe { (*pointer).length };
10521 if length == 0 {
10522 None
10523 } else {
10524 Some(Location::new(self.parser, unsafe { &(*pointer) }))
10525 }
10526 }
10527
10528 #[must_use]
10530 pub fn parts(&self) -> NodeList<'pr> {
10531 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).parts };
10532 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10533 }
10534
10535 #[must_use]
10537 pub fn closing_loc(&self) -> Option<Location<'pr>> {
10538 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
10539 let length = unsafe { (*pointer).length };
10540 if length == 0 {
10541 None
10542 } else {
10543 Some(Location::new(self.parser, unsafe { &(*pointer) }))
10544 }
10545 }
10546}
10547
10548impl std::fmt::Debug for InterpolatedStringNode<'_> {
10549 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10550 write!(f, "InterpolatedStringNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
10551 }
10552}
10553
10554pub struct InterpolatedSymbolNode<'pr> {
10561 parser: *const pm_parser_t,
10563
10564 pointer: *mut pm_interpolated_symbol_node_t,
10566
10567 marker: PhantomData<&'pr mut pm_interpolated_symbol_node_t>
10569}
10570
10571impl<'pr> InterpolatedSymbolNode<'pr> {
10572 #[must_use]
10574 pub const fn as_node(&self) -> Node<'pr> {
10575 Node::InterpolatedSymbolNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10576 }
10577
10578 #[must_use]
10580 pub fn location(&self) -> Location<'pr> {
10581 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10582 Location::new(self.parser, unsafe { &(*pointer) })
10583 }
10584
10585 #[must_use]
10587 pub fn flags(&self) -> pm_node_flags_t {
10588 unsafe { (*self.pointer).base.flags }
10589 }
10590
10591 #[must_use]
10593 pub fn opening_loc(&self) -> Option<Location<'pr>> {
10594 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
10595 let length = unsafe { (*pointer).length };
10596 if length == 0 {
10597 None
10598 } else {
10599 Some(Location::new(self.parser, unsafe { &(*pointer) }))
10600 }
10601 }
10602
10603 #[must_use]
10605 pub fn parts(&self) -> NodeList<'pr> {
10606 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).parts };
10607 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10608 }
10609
10610 #[must_use]
10612 pub fn closing_loc(&self) -> Option<Location<'pr>> {
10613 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
10614 let length = unsafe { (*pointer).length };
10615 if length == 0 {
10616 None
10617 } else {
10618 Some(Location::new(self.parser, unsafe { &(*pointer) }))
10619 }
10620 }
10621}
10622
10623impl std::fmt::Debug for InterpolatedSymbolNode<'_> {
10624 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10625 write!(f, "InterpolatedSymbolNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
10626 }
10627}
10628
10629pub struct InterpolatedXStringNode<'pr> {
10636 parser: *const pm_parser_t,
10638
10639 pointer: *mut pm_interpolated_x_string_node_t,
10641
10642 marker: PhantomData<&'pr mut pm_interpolated_x_string_node_t>
10644}
10645
10646impl<'pr> InterpolatedXStringNode<'pr> {
10647 #[must_use]
10649 pub const fn as_node(&self) -> Node<'pr> {
10650 Node::InterpolatedXStringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10651 }
10652
10653 #[must_use]
10655 pub fn location(&self) -> Location<'pr> {
10656 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10657 Location::new(self.parser, unsafe { &(*pointer) })
10658 }
10659
10660 #[must_use]
10662 pub fn flags(&self) -> pm_node_flags_t {
10663 unsafe { (*self.pointer).base.flags }
10664 }
10665
10666 #[must_use]
10668 pub fn opening_loc(&self) -> Location<'pr> {
10669 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
10670 Location::new(self.parser, unsafe { &(*pointer) })
10671 }
10672
10673 #[must_use]
10675 pub fn parts(&self) -> NodeList<'pr> {
10676 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).parts };
10677 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10678 }
10679
10680 #[must_use]
10682 pub fn closing_loc(&self) -> Location<'pr> {
10683 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
10684 Location::new(self.parser, unsafe { &(*pointer) })
10685 }
10686}
10687
10688impl std::fmt::Debug for InterpolatedXStringNode<'_> {
10689 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10690 write!(f, "InterpolatedXStringNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
10691 }
10692}
10693
10694pub struct ItLocalVariableReadNode<'pr> {
10701 parser: *const pm_parser_t,
10703
10704 pointer: *mut pm_it_local_variable_read_node_t,
10706
10707 marker: PhantomData<&'pr mut pm_it_local_variable_read_node_t>
10709}
10710
10711impl<'pr> ItLocalVariableReadNode<'pr> {
10712 #[must_use]
10714 pub const fn as_node(&self) -> Node<'pr> {
10715 Node::ItLocalVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10716 }
10717
10718 #[must_use]
10720 pub fn location(&self) -> Location<'pr> {
10721 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10722 Location::new(self.parser, unsafe { &(*pointer) })
10723 }
10724
10725 #[must_use]
10727 pub fn flags(&self) -> pm_node_flags_t {
10728 unsafe { (*self.pointer).base.flags }
10729 }
10730}
10731
10732impl std::fmt::Debug for ItLocalVariableReadNode<'_> {
10733 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10734 write!(f, "ItLocalVariableReadNode()")
10735 }
10736}
10737
10738pub struct ItParametersNode<'pr> {
10745 parser: *const pm_parser_t,
10747
10748 pointer: *mut pm_it_parameters_node_t,
10750
10751 marker: PhantomData<&'pr mut pm_it_parameters_node_t>
10753}
10754
10755impl<'pr> ItParametersNode<'pr> {
10756 #[must_use]
10758 pub const fn as_node(&self) -> Node<'pr> {
10759 Node::ItParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10760 }
10761
10762 #[must_use]
10764 pub fn location(&self) -> Location<'pr> {
10765 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10766 Location::new(self.parser, unsafe { &(*pointer) })
10767 }
10768
10769 #[must_use]
10771 pub fn flags(&self) -> pm_node_flags_t {
10772 unsafe { (*self.pointer).base.flags }
10773 }
10774}
10775
10776impl std::fmt::Debug for ItParametersNode<'_> {
10777 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10778 write!(f, "ItParametersNode()")
10779 }
10780}
10781
10782pub struct KeywordHashNode<'pr> {
10789 parser: *const pm_parser_t,
10791
10792 pointer: *mut pm_keyword_hash_node_t,
10794
10795 marker: PhantomData<&'pr mut pm_keyword_hash_node_t>
10797}
10798
10799impl<'pr> KeywordHashNode<'pr> {
10800 #[must_use]
10802 pub const fn as_node(&self) -> Node<'pr> {
10803 Node::KeywordHashNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10804 }
10805
10806 #[must_use]
10808 pub fn location(&self) -> Location<'pr> {
10809 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10810 Location::new(self.parser, unsafe { &(*pointer) })
10811 }
10812
10813 #[must_use]
10815 pub fn flags(&self) -> pm_node_flags_t {
10816 unsafe { (*self.pointer).base.flags }
10817 }
10818
10819 #[must_use]
10821 pub fn is_symbol_keys(&self) -> bool {
10822 (self.flags() & PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS) != 0
10823 }
10824
10825 #[must_use]
10827 pub fn elements(&self) -> NodeList<'pr> {
10828 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).elements };
10829 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10830 }
10831}
10832
10833impl std::fmt::Debug for KeywordHashNode<'_> {
10834 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10835 write!(f, "KeywordHashNode({:?})", self.elements())
10836 }
10837}
10838
10839pub struct KeywordRestParameterNode<'pr> {
10847 parser: *const pm_parser_t,
10849
10850 pointer: *mut pm_keyword_rest_parameter_node_t,
10852
10853 marker: PhantomData<&'pr mut pm_keyword_rest_parameter_node_t>
10855}
10856
10857impl<'pr> KeywordRestParameterNode<'pr> {
10858 #[must_use]
10860 pub const fn as_node(&self) -> Node<'pr> {
10861 Node::KeywordRestParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10862 }
10863
10864 #[must_use]
10866 pub fn location(&self) -> Location<'pr> {
10867 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10868 Location::new(self.parser, unsafe { &(*pointer) })
10869 }
10870
10871 #[must_use]
10873 pub fn flags(&self) -> pm_node_flags_t {
10874 unsafe { (*self.pointer).base.flags }
10875 }
10876
10877 #[must_use]
10879 pub fn is_repeated_parameter(&self) -> bool {
10880 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
10881 }
10882
10883 #[must_use]
10885 pub fn name(&self) -> Option<ConstantId<'pr>> {
10886 let id = unsafe { (*self.pointer).name };
10887 if id == 0 {
10888 None
10889 } else {
10890 Some(ConstantId::new(self.parser, id))
10891 }
10892 }
10893
10894 #[must_use]
10896 pub fn name_loc(&self) -> Option<Location<'pr>> {
10897 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
10898 let length = unsafe { (*pointer).length };
10899 if length == 0 {
10900 None
10901 } else {
10902 Some(Location::new(self.parser, unsafe { &(*pointer) }))
10903 }
10904 }
10905
10906 #[must_use]
10908 pub fn operator_loc(&self) -> Location<'pr> {
10909 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
10910 Location::new(self.parser, unsafe { &(*pointer) })
10911 }
10912}
10913
10914impl std::fmt::Debug for KeywordRestParameterNode<'_> {
10915 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
10916 write!(f, "KeywordRestParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc())
10917 }
10918}
10919
10920pub struct LambdaNode<'pr> {
10927 parser: *const pm_parser_t,
10929
10930 pointer: *mut pm_lambda_node_t,
10932
10933 marker: PhantomData<&'pr mut pm_lambda_node_t>
10935}
10936
10937impl<'pr> LambdaNode<'pr> {
10938 #[must_use]
10940 pub const fn as_node(&self) -> Node<'pr> {
10941 Node::LambdaNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
10942 }
10943
10944 #[must_use]
10946 pub fn location(&self) -> Location<'pr> {
10947 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
10948 Location::new(self.parser, unsafe { &(*pointer) })
10949 }
10950
10951 #[must_use]
10953 pub fn flags(&self) -> pm_node_flags_t {
10954 unsafe { (*self.pointer).base.flags }
10955 }
10956
10957 #[must_use]
10959 pub fn locals(&self) -> ConstantList<'pr> {
10960 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
10961 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
10962 }
10963
10964 #[must_use]
10966 pub fn operator_loc(&self) -> Location<'pr> {
10967 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
10968 Location::new(self.parser, unsafe { &(*pointer) })
10969 }
10970
10971 #[must_use]
10973 pub fn opening_loc(&self) -> Location<'pr> {
10974 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
10975 Location::new(self.parser, unsafe { &(*pointer) })
10976 }
10977
10978 #[must_use]
10980 pub fn closing_loc(&self) -> Location<'pr> {
10981 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
10982 Location::new(self.parser, unsafe { &(*pointer) })
10983 }
10984
10985 #[must_use]
10987 pub fn parameters(&self) -> Option<Node<'pr>> {
10988 let node: *mut pm_node_t = unsafe { (*self.pointer).parameters };
10989 if node.is_null() {
10990 None
10991 } else {
10992 Some(Node::new(self.parser, node))
10993 }
10994 }
10995
10996 #[must_use]
10998 pub fn body(&self) -> Option<Node<'pr>> {
10999 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
11000 if node.is_null() {
11001 None
11002 } else {
11003 Some(Node::new(self.parser, node))
11004 }
11005 }
11006}
11007
11008impl std::fmt::Debug for LambdaNode<'_> {
11009 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11010 write!(f, "LambdaNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.operator_loc(), self.opening_loc(), self.closing_loc(), self.parameters(), self.body())
11011 }
11012}
11013
11014pub struct LocalVariableAndWriteNode<'pr> {
11021 parser: *const pm_parser_t,
11023
11024 pointer: *mut pm_local_variable_and_write_node_t,
11026
11027 marker: PhantomData<&'pr mut pm_local_variable_and_write_node_t>
11029}
11030
11031impl<'pr> LocalVariableAndWriteNode<'pr> {
11032 #[must_use]
11034 pub const fn as_node(&self) -> Node<'pr> {
11035 Node::LocalVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11036 }
11037
11038 #[must_use]
11040 pub fn location(&self) -> Location<'pr> {
11041 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11042 Location::new(self.parser, unsafe { &(*pointer) })
11043 }
11044
11045 #[must_use]
11047 pub fn flags(&self) -> pm_node_flags_t {
11048 unsafe { (*self.pointer).base.flags }
11049 }
11050
11051 #[must_use]
11053 pub fn name_loc(&self) -> Location<'pr> {
11054 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
11055 Location::new(self.parser, unsafe { &(*pointer) })
11056 }
11057
11058 #[must_use]
11060 pub fn operator_loc(&self) -> Location<'pr> {
11061 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
11062 Location::new(self.parser, unsafe { &(*pointer) })
11063 }
11064
11065 #[must_use]
11067 pub fn value(&self) -> Node<'pr> {
11068 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
11069 Node::new(self.parser, node)
11070 }
11071
11072 #[must_use]
11074 pub fn name(&self) -> ConstantId<'pr> {
11075 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11076 }
11077
11078 #[must_use]
11080 pub fn depth(&self) -> u32 {
11081 unsafe { (*self.pointer).depth }
11082 }
11083}
11084
11085impl std::fmt::Debug for LocalVariableAndWriteNode<'_> {
11086 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11087 write!(f, "LocalVariableAndWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name_loc(), self.operator_loc(), self.value(), self.name(), self.depth())
11088 }
11089}
11090
11091pub struct LocalVariableOperatorWriteNode<'pr> {
11098 parser: *const pm_parser_t,
11100
11101 pointer: *mut pm_local_variable_operator_write_node_t,
11103
11104 marker: PhantomData<&'pr mut pm_local_variable_operator_write_node_t>
11106}
11107
11108impl<'pr> LocalVariableOperatorWriteNode<'pr> {
11109 #[must_use]
11111 pub const fn as_node(&self) -> Node<'pr> {
11112 Node::LocalVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11113 }
11114
11115 #[must_use]
11117 pub fn location(&self) -> Location<'pr> {
11118 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11119 Location::new(self.parser, unsafe { &(*pointer) })
11120 }
11121
11122 #[must_use]
11124 pub fn flags(&self) -> pm_node_flags_t {
11125 unsafe { (*self.pointer).base.flags }
11126 }
11127
11128 #[must_use]
11130 pub fn name_loc(&self) -> Location<'pr> {
11131 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
11132 Location::new(self.parser, unsafe { &(*pointer) })
11133 }
11134
11135 #[must_use]
11137 pub fn binary_operator_loc(&self) -> Location<'pr> {
11138 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).binary_operator_loc };
11139 Location::new(self.parser, unsafe { &(*pointer) })
11140 }
11141
11142 #[must_use]
11144 pub fn value(&self) -> Node<'pr> {
11145 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
11146 Node::new(self.parser, node)
11147 }
11148
11149 #[must_use]
11151 pub fn name(&self) -> ConstantId<'pr> {
11152 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11153 }
11154
11155 #[must_use]
11157 pub fn binary_operator(&self) -> ConstantId<'pr> {
11158 ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
11159 }
11160
11161 #[must_use]
11163 pub fn depth(&self) -> u32 {
11164 unsafe { (*self.pointer).depth }
11165 }
11166}
11167
11168impl std::fmt::Debug for LocalVariableOperatorWriteNode<'_> {
11169 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11170 write!(f, "LocalVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.name_loc(), self.binary_operator_loc(), self.value(), self.name(), self.binary_operator(), self.depth())
11171 }
11172}
11173
11174pub struct LocalVariableOrWriteNode<'pr> {
11181 parser: *const pm_parser_t,
11183
11184 pointer: *mut pm_local_variable_or_write_node_t,
11186
11187 marker: PhantomData<&'pr mut pm_local_variable_or_write_node_t>
11189}
11190
11191impl<'pr> LocalVariableOrWriteNode<'pr> {
11192 #[must_use]
11194 pub const fn as_node(&self) -> Node<'pr> {
11195 Node::LocalVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11196 }
11197
11198 #[must_use]
11200 pub fn location(&self) -> Location<'pr> {
11201 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11202 Location::new(self.parser, unsafe { &(*pointer) })
11203 }
11204
11205 #[must_use]
11207 pub fn flags(&self) -> pm_node_flags_t {
11208 unsafe { (*self.pointer).base.flags }
11209 }
11210
11211 #[must_use]
11213 pub fn name_loc(&self) -> Location<'pr> {
11214 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
11215 Location::new(self.parser, unsafe { &(*pointer) })
11216 }
11217
11218 #[must_use]
11220 pub fn operator_loc(&self) -> Location<'pr> {
11221 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
11222 Location::new(self.parser, unsafe { &(*pointer) })
11223 }
11224
11225 #[must_use]
11227 pub fn value(&self) -> Node<'pr> {
11228 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
11229 Node::new(self.parser, node)
11230 }
11231
11232 #[must_use]
11234 pub fn name(&self) -> ConstantId<'pr> {
11235 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11236 }
11237
11238 #[must_use]
11240 pub fn depth(&self) -> u32 {
11241 unsafe { (*self.pointer).depth }
11242 }
11243}
11244
11245impl std::fmt::Debug for LocalVariableOrWriteNode<'_> {
11246 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11247 write!(f, "LocalVariableOrWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name_loc(), self.operator_loc(), self.value(), self.name(), self.depth())
11248 }
11249}
11250
11251pub struct LocalVariableReadNode<'pr> {
11258 parser: *const pm_parser_t,
11260
11261 pointer: *mut pm_local_variable_read_node_t,
11263
11264 marker: PhantomData<&'pr mut pm_local_variable_read_node_t>
11266}
11267
11268impl<'pr> LocalVariableReadNode<'pr> {
11269 #[must_use]
11271 pub const fn as_node(&self) -> Node<'pr> {
11272 Node::LocalVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11273 }
11274
11275 #[must_use]
11277 pub fn location(&self) -> Location<'pr> {
11278 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11279 Location::new(self.parser, unsafe { &(*pointer) })
11280 }
11281
11282 #[must_use]
11284 pub fn flags(&self) -> pm_node_flags_t {
11285 unsafe { (*self.pointer).base.flags }
11286 }
11287
11288 #[must_use]
11290 pub fn name(&self) -> ConstantId<'pr> {
11291 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11292 }
11293
11294 #[must_use]
11296 pub fn depth(&self) -> u32 {
11297 unsafe { (*self.pointer).depth }
11298 }
11299}
11300
11301impl std::fmt::Debug for LocalVariableReadNode<'_> {
11302 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11303 write!(f, "LocalVariableReadNode({:?}, {:?})", self.name(), self.depth())
11304 }
11305}
11306
11307pub struct LocalVariableTargetNode<'pr> {
11319 parser: *const pm_parser_t,
11321
11322 pointer: *mut pm_local_variable_target_node_t,
11324
11325 marker: PhantomData<&'pr mut pm_local_variable_target_node_t>
11327}
11328
11329impl<'pr> LocalVariableTargetNode<'pr> {
11330 #[must_use]
11332 pub const fn as_node(&self) -> Node<'pr> {
11333 Node::LocalVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11334 }
11335
11336 #[must_use]
11338 pub fn location(&self) -> Location<'pr> {
11339 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11340 Location::new(self.parser, unsafe { &(*pointer) })
11341 }
11342
11343 #[must_use]
11345 pub fn flags(&self) -> pm_node_flags_t {
11346 unsafe { (*self.pointer).base.flags }
11347 }
11348
11349 #[must_use]
11351 pub fn name(&self) -> ConstantId<'pr> {
11352 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11353 }
11354
11355 #[must_use]
11357 pub fn depth(&self) -> u32 {
11358 unsafe { (*self.pointer).depth }
11359 }
11360}
11361
11362impl std::fmt::Debug for LocalVariableTargetNode<'_> {
11363 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11364 write!(f, "LocalVariableTargetNode({:?}, {:?})", self.name(), self.depth())
11365 }
11366}
11367
11368pub struct LocalVariableWriteNode<'pr> {
11375 parser: *const pm_parser_t,
11377
11378 pointer: *mut pm_local_variable_write_node_t,
11380
11381 marker: PhantomData<&'pr mut pm_local_variable_write_node_t>
11383}
11384
11385impl<'pr> LocalVariableWriteNode<'pr> {
11386 #[must_use]
11388 pub const fn as_node(&self) -> Node<'pr> {
11389 Node::LocalVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11390 }
11391
11392 #[must_use]
11394 pub fn location(&self) -> Location<'pr> {
11395 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11396 Location::new(self.parser, unsafe { &(*pointer) })
11397 }
11398
11399 #[must_use]
11401 pub fn flags(&self) -> pm_node_flags_t {
11402 unsafe { (*self.pointer).base.flags }
11403 }
11404
11405 #[must_use]
11407 pub fn name(&self) -> ConstantId<'pr> {
11408 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11409 }
11410
11411 #[must_use]
11413 pub fn depth(&self) -> u32 {
11414 unsafe { (*self.pointer).depth }
11415 }
11416
11417 #[must_use]
11419 pub fn name_loc(&self) -> Location<'pr> {
11420 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
11421 Location::new(self.parser, unsafe { &(*pointer) })
11422 }
11423
11424 #[must_use]
11426 pub fn value(&self) -> Node<'pr> {
11427 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
11428 Node::new(self.parser, node)
11429 }
11430
11431 #[must_use]
11433 pub fn operator_loc(&self) -> Location<'pr> {
11434 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
11435 Location::new(self.parser, unsafe { &(*pointer) })
11436 }
11437}
11438
11439impl std::fmt::Debug for LocalVariableWriteNode<'_> {
11440 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11441 write!(f, "LocalVariableWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.depth(), self.name_loc(), self.value(), self.operator_loc())
11442 }
11443}
11444
11445pub struct MatchLastLineNode<'pr> {
11452 parser: *const pm_parser_t,
11454
11455 pointer: *mut pm_match_last_line_node_t,
11457
11458 marker: PhantomData<&'pr mut pm_match_last_line_node_t>
11460}
11461
11462impl<'pr> MatchLastLineNode<'pr> {
11463 #[must_use]
11465 pub const fn as_node(&self) -> Node<'pr> {
11466 Node::MatchLastLineNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11467 }
11468
11469 #[must_use]
11471 pub fn location(&self) -> Location<'pr> {
11472 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11473 Location::new(self.parser, unsafe { &(*pointer) })
11474 }
11475
11476 #[must_use]
11478 pub fn flags(&self) -> pm_node_flags_t {
11479 unsafe { (*self.pointer).base.flags }
11480 }
11481
11482 #[must_use]
11484 pub fn is_ignore_case(&self) -> bool {
11485 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
11486 }
11487
11488 #[must_use]
11490 pub fn is_extended(&self) -> bool {
11491 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
11492 }
11493
11494 #[must_use]
11496 pub fn is_multi_line(&self) -> bool {
11497 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
11498 }
11499
11500 #[must_use]
11502 pub fn is_once(&self) -> bool {
11503 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
11504 }
11505
11506 #[must_use]
11508 pub fn is_euc_jp(&self) -> bool {
11509 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
11510 }
11511
11512 #[must_use]
11514 pub fn is_ascii_8bit(&self) -> bool {
11515 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
11516 }
11517
11518 #[must_use]
11520 pub fn is_windows_31j(&self) -> bool {
11521 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
11522 }
11523
11524 #[must_use]
11526 pub fn is_utf_8(&self) -> bool {
11527 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
11528 }
11529
11530 #[must_use]
11532 pub fn is_forced_utf8_encoding(&self) -> bool {
11533 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
11534 }
11535
11536 #[must_use]
11538 pub fn is_forced_binary_encoding(&self) -> bool {
11539 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
11540 }
11541
11542 #[must_use]
11544 pub fn is_forced_us_ascii_encoding(&self) -> bool {
11545 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
11546 }
11547
11548 #[must_use]
11550 pub fn opening_loc(&self) -> Location<'pr> {
11551 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
11552 Location::new(self.parser, unsafe { &(*pointer) })
11553 }
11554
11555 #[must_use]
11557 pub fn content_loc(&self) -> Location<'pr> {
11558 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).content_loc };
11559 Location::new(self.parser, unsafe { &(*pointer) })
11560 }
11561
11562 #[must_use]
11564 pub fn closing_loc(&self) -> Location<'pr> {
11565 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
11566 Location::new(self.parser, unsafe { &(*pointer) })
11567 }
11568
11569 #[must_use]
11571 pub fn unescaped(&self) -> &[u8] {
11572 unsafe {
11573 let source = (*self.pointer).unescaped.source;
11574 if source.is_null() {
11575 return &[];
11576 }
11577 let length = (*self.pointer).unescaped.length;
11578 std::slice::from_raw_parts(source, length)
11579 }
11580 }
11581}
11582
11583impl std::fmt::Debug for MatchLastLineNode<'_> {
11584 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11585 write!(f, "MatchLastLineNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
11586 }
11587}
11588
11589pub struct MatchPredicateNode<'pr> {
11596 parser: *const pm_parser_t,
11598
11599 pointer: *mut pm_match_predicate_node_t,
11601
11602 marker: PhantomData<&'pr mut pm_match_predicate_node_t>
11604}
11605
11606impl<'pr> MatchPredicateNode<'pr> {
11607 #[must_use]
11609 pub const fn as_node(&self) -> Node<'pr> {
11610 Node::MatchPredicateNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11611 }
11612
11613 #[must_use]
11615 pub fn location(&self) -> Location<'pr> {
11616 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11617 Location::new(self.parser, unsafe { &(*pointer) })
11618 }
11619
11620 #[must_use]
11622 pub fn flags(&self) -> pm_node_flags_t {
11623 unsafe { (*self.pointer).base.flags }
11624 }
11625
11626 #[must_use]
11628 pub fn value(&self) -> Node<'pr> {
11629 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
11630 Node::new(self.parser, node)
11631 }
11632
11633 #[must_use]
11635 pub fn pattern(&self) -> Node<'pr> {
11636 let node: *mut pm_node_t = unsafe { (*self.pointer).pattern };
11637 Node::new(self.parser, node)
11638 }
11639
11640 #[must_use]
11642 pub fn operator_loc(&self) -> Location<'pr> {
11643 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
11644 Location::new(self.parser, unsafe { &(*pointer) })
11645 }
11646}
11647
11648impl std::fmt::Debug for MatchPredicateNode<'_> {
11649 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11650 write!(f, "MatchPredicateNode({:?}, {:?}, {:?})", self.value(), self.pattern(), self.operator_loc())
11651 }
11652}
11653
11654pub struct MatchRequiredNode<'pr> {
11661 parser: *const pm_parser_t,
11663
11664 pointer: *mut pm_match_required_node_t,
11666
11667 marker: PhantomData<&'pr mut pm_match_required_node_t>
11669}
11670
11671impl<'pr> MatchRequiredNode<'pr> {
11672 #[must_use]
11674 pub const fn as_node(&self) -> Node<'pr> {
11675 Node::MatchRequiredNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11676 }
11677
11678 #[must_use]
11680 pub fn location(&self) -> Location<'pr> {
11681 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11682 Location::new(self.parser, unsafe { &(*pointer) })
11683 }
11684
11685 #[must_use]
11687 pub fn flags(&self) -> pm_node_flags_t {
11688 unsafe { (*self.pointer).base.flags }
11689 }
11690
11691 #[must_use]
11693 pub fn value(&self) -> Node<'pr> {
11694 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
11695 Node::new(self.parser, node)
11696 }
11697
11698 #[must_use]
11700 pub fn pattern(&self) -> Node<'pr> {
11701 let node: *mut pm_node_t = unsafe { (*self.pointer).pattern };
11702 Node::new(self.parser, node)
11703 }
11704
11705 #[must_use]
11707 pub fn operator_loc(&self) -> Location<'pr> {
11708 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
11709 Location::new(self.parser, unsafe { &(*pointer) })
11710 }
11711}
11712
11713impl std::fmt::Debug for MatchRequiredNode<'_> {
11714 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11715 write!(f, "MatchRequiredNode({:?}, {:?}, {:?})", self.value(), self.pattern(), self.operator_loc())
11716 }
11717}
11718
11719pub struct MatchWriteNode<'pr> {
11726 parser: *const pm_parser_t,
11728
11729 pointer: *mut pm_match_write_node_t,
11731
11732 marker: PhantomData<&'pr mut pm_match_write_node_t>
11734}
11735
11736impl<'pr> MatchWriteNode<'pr> {
11737 #[must_use]
11739 pub const fn as_node(&self) -> Node<'pr> {
11740 Node::MatchWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11741 }
11742
11743 #[must_use]
11745 pub fn location(&self) -> Location<'pr> {
11746 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11747 Location::new(self.parser, unsafe { &(*pointer) })
11748 }
11749
11750 #[must_use]
11752 pub fn flags(&self) -> pm_node_flags_t {
11753 unsafe { (*self.pointer).base.flags }
11754 }
11755
11756 #[must_use]
11758 pub fn call(&self) -> CallNode<'pr> {
11759 let node: *mut pm_call_node_t = unsafe { (*self.pointer).call };
11760 CallNode { parser: self.parser, pointer: node, marker: PhantomData }
11761 }
11762
11763 #[must_use]
11765 pub fn targets(&self) -> NodeList<'pr> {
11766 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).targets };
11767 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
11768 }
11769}
11770
11771impl std::fmt::Debug for MatchWriteNode<'_> {
11772 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11773 write!(f, "MatchWriteNode({:?}, {:?})", self.call(), self.targets())
11774 }
11775}
11776
11777pub struct ModuleNode<'pr> {
11784 parser: *const pm_parser_t,
11786
11787 pointer: *mut pm_module_node_t,
11789
11790 marker: PhantomData<&'pr mut pm_module_node_t>
11792}
11793
11794impl<'pr> ModuleNode<'pr> {
11795 #[must_use]
11797 pub const fn as_node(&self) -> Node<'pr> {
11798 Node::ModuleNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11799 }
11800
11801 #[must_use]
11803 pub fn location(&self) -> Location<'pr> {
11804 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11805 Location::new(self.parser, unsafe { &(*pointer) })
11806 }
11807
11808 #[must_use]
11810 pub fn flags(&self) -> pm_node_flags_t {
11811 unsafe { (*self.pointer).base.flags }
11812 }
11813
11814 #[must_use]
11816 pub fn locals(&self) -> ConstantList<'pr> {
11817 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
11818 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
11819 }
11820
11821 #[must_use]
11823 pub fn module_keyword_loc(&self) -> Location<'pr> {
11824 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).module_keyword_loc };
11825 Location::new(self.parser, unsafe { &(*pointer) })
11826 }
11827
11828 #[must_use]
11830 pub fn constant_path(&self) -> Node<'pr> {
11831 let node: *mut pm_node_t = unsafe { (*self.pointer).constant_path };
11832 Node::new(self.parser, node)
11833 }
11834
11835 #[must_use]
11837 pub fn body(&self) -> Option<Node<'pr>> {
11838 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
11839 if node.is_null() {
11840 None
11841 } else {
11842 Some(Node::new(self.parser, node))
11843 }
11844 }
11845
11846 #[must_use]
11848 pub fn end_keyword_loc(&self) -> Location<'pr> {
11849 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
11850 Location::new(self.parser, unsafe { &(*pointer) })
11851 }
11852
11853 #[must_use]
11855 pub fn name(&self) -> ConstantId<'pr> {
11856 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
11857 }
11858}
11859
11860impl std::fmt::Debug for ModuleNode<'_> {
11861 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11862 write!(f, "ModuleNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.module_keyword_loc(), self.constant_path(), self.body(), self.end_keyword_loc(), self.name())
11863 }
11864}
11865
11866pub struct MultiTargetNode<'pr> {
11880 parser: *const pm_parser_t,
11882
11883 pointer: *mut pm_multi_target_node_t,
11885
11886 marker: PhantomData<&'pr mut pm_multi_target_node_t>
11888}
11889
11890impl<'pr> MultiTargetNode<'pr> {
11891 #[must_use]
11893 pub const fn as_node(&self) -> Node<'pr> {
11894 Node::MultiTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11895 }
11896
11897 #[must_use]
11899 pub fn location(&self) -> Location<'pr> {
11900 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11901 Location::new(self.parser, unsafe { &(*pointer) })
11902 }
11903
11904 #[must_use]
11906 pub fn flags(&self) -> pm_node_flags_t {
11907 unsafe { (*self.pointer).base.flags }
11908 }
11909
11910 #[must_use]
11912 pub fn lefts(&self) -> NodeList<'pr> {
11913 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).lefts };
11914 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
11915 }
11916
11917 #[must_use]
11919 pub fn rest(&self) -> Option<Node<'pr>> {
11920 let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
11921 if node.is_null() {
11922 None
11923 } else {
11924 Some(Node::new(self.parser, node))
11925 }
11926 }
11927
11928 #[must_use]
11930 pub fn rights(&self) -> NodeList<'pr> {
11931 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).rights };
11932 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
11933 }
11934
11935 #[must_use]
11937 pub fn lparen_loc(&self) -> Option<Location<'pr>> {
11938 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
11939 let length = unsafe { (*pointer).length };
11940 if length == 0 {
11941 None
11942 } else {
11943 Some(Location::new(self.parser, unsafe { &(*pointer) }))
11944 }
11945 }
11946
11947 #[must_use]
11949 pub fn rparen_loc(&self) -> Option<Location<'pr>> {
11950 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
11951 let length = unsafe { (*pointer).length };
11952 if length == 0 {
11953 None
11954 } else {
11955 Some(Location::new(self.parser, unsafe { &(*pointer) }))
11956 }
11957 }
11958}
11959
11960impl std::fmt::Debug for MultiTargetNode<'_> {
11961 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11962 write!(f, "MultiTargetNode({:?}, {:?}, {:?}, {:?}, {:?})", self.lefts(), self.rest(), self.rights(), self.lparen_loc(), self.rparen_loc())
11963 }
11964}
11965
11966pub struct MultiWriteNode<'pr> {
11973 parser: *const pm_parser_t,
11975
11976 pointer: *mut pm_multi_write_node_t,
11978
11979 marker: PhantomData<&'pr mut pm_multi_write_node_t>
11981}
11982
11983impl<'pr> MultiWriteNode<'pr> {
11984 #[must_use]
11986 pub const fn as_node(&self) -> Node<'pr> {
11987 Node::MultiWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
11988 }
11989
11990 #[must_use]
11992 pub fn location(&self) -> Location<'pr> {
11993 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
11994 Location::new(self.parser, unsafe { &(*pointer) })
11995 }
11996
11997 #[must_use]
11999 pub fn flags(&self) -> pm_node_flags_t {
12000 unsafe { (*self.pointer).base.flags }
12001 }
12002
12003 #[must_use]
12005 pub fn lefts(&self) -> NodeList<'pr> {
12006 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).lefts };
12007 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
12008 }
12009
12010 #[must_use]
12012 pub fn rest(&self) -> Option<Node<'pr>> {
12013 let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
12014 if node.is_null() {
12015 None
12016 } else {
12017 Some(Node::new(self.parser, node))
12018 }
12019 }
12020
12021 #[must_use]
12023 pub fn rights(&self) -> NodeList<'pr> {
12024 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).rights };
12025 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
12026 }
12027
12028 #[must_use]
12030 pub fn lparen_loc(&self) -> Option<Location<'pr>> {
12031 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
12032 let length = unsafe { (*pointer).length };
12033 if length == 0 {
12034 None
12035 } else {
12036 Some(Location::new(self.parser, unsafe { &(*pointer) }))
12037 }
12038 }
12039
12040 #[must_use]
12042 pub fn rparen_loc(&self) -> Option<Location<'pr>> {
12043 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
12044 let length = unsafe { (*pointer).length };
12045 if length == 0 {
12046 None
12047 } else {
12048 Some(Location::new(self.parser, unsafe { &(*pointer) }))
12049 }
12050 }
12051
12052 #[must_use]
12054 pub fn operator_loc(&self) -> Location<'pr> {
12055 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12056 Location::new(self.parser, unsafe { &(*pointer) })
12057 }
12058
12059 #[must_use]
12061 pub fn value(&self) -> Node<'pr> {
12062 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
12063 Node::new(self.parser, node)
12064 }
12065}
12066
12067impl std::fmt::Debug for MultiWriteNode<'_> {
12068 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12069 write!(f, "MultiWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.lefts(), self.rest(), self.rights(), self.lparen_loc(), self.rparen_loc(), self.operator_loc(), self.value())
12070 }
12071}
12072
12073pub struct NextNode<'pr> {
12080 parser: *const pm_parser_t,
12082
12083 pointer: *mut pm_next_node_t,
12085
12086 marker: PhantomData<&'pr mut pm_next_node_t>
12088}
12089
12090impl<'pr> NextNode<'pr> {
12091 #[must_use]
12093 pub const fn as_node(&self) -> Node<'pr> {
12094 Node::NextNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12095 }
12096
12097 #[must_use]
12099 pub fn location(&self) -> Location<'pr> {
12100 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12101 Location::new(self.parser, unsafe { &(*pointer) })
12102 }
12103
12104 #[must_use]
12106 pub fn flags(&self) -> pm_node_flags_t {
12107 unsafe { (*self.pointer).base.flags }
12108 }
12109
12110 #[must_use]
12112 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
12113 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
12114 if node.is_null() {
12115 None
12116 } else {
12117 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
12118 }
12119 }
12120
12121 #[must_use]
12123 pub fn keyword_loc(&self) -> Location<'pr> {
12124 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
12125 Location::new(self.parser, unsafe { &(*pointer) })
12126 }
12127}
12128
12129impl std::fmt::Debug for NextNode<'_> {
12130 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12131 write!(f, "NextNode({:?}, {:?})", self.arguments(), self.keyword_loc())
12132 }
12133}
12134
12135pub struct NilNode<'pr> {
12142 parser: *const pm_parser_t,
12144
12145 pointer: *mut pm_nil_node_t,
12147
12148 marker: PhantomData<&'pr mut pm_nil_node_t>
12150}
12151
12152impl<'pr> NilNode<'pr> {
12153 #[must_use]
12155 pub const fn as_node(&self) -> Node<'pr> {
12156 Node::NilNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12157 }
12158
12159 #[must_use]
12161 pub fn location(&self) -> Location<'pr> {
12162 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12163 Location::new(self.parser, unsafe { &(*pointer) })
12164 }
12165
12166 #[must_use]
12168 pub fn flags(&self) -> pm_node_flags_t {
12169 unsafe { (*self.pointer).base.flags }
12170 }
12171}
12172
12173impl std::fmt::Debug for NilNode<'_> {
12174 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12175 write!(f, "NilNode()")
12176 }
12177}
12178
12179pub struct NoBlockParameterNode<'pr> {
12187 parser: *const pm_parser_t,
12189
12190 pointer: *mut pm_no_block_parameter_node_t,
12192
12193 marker: PhantomData<&'pr mut pm_no_block_parameter_node_t>
12195}
12196
12197impl<'pr> NoBlockParameterNode<'pr> {
12198 #[must_use]
12200 pub const fn as_node(&self) -> Node<'pr> {
12201 Node::NoBlockParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12202 }
12203
12204 #[must_use]
12206 pub fn location(&self) -> Location<'pr> {
12207 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12208 Location::new(self.parser, unsafe { &(*pointer) })
12209 }
12210
12211 #[must_use]
12213 pub fn flags(&self) -> pm_node_flags_t {
12214 unsafe { (*self.pointer).base.flags }
12215 }
12216
12217 #[must_use]
12219 pub fn operator_loc(&self) -> Location<'pr> {
12220 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12221 Location::new(self.parser, unsafe { &(*pointer) })
12222 }
12223
12224 #[must_use]
12226 pub fn keyword_loc(&self) -> Location<'pr> {
12227 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
12228 Location::new(self.parser, unsafe { &(*pointer) })
12229 }
12230}
12231
12232impl std::fmt::Debug for NoBlockParameterNode<'_> {
12233 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12234 write!(f, "NoBlockParameterNode({:?}, {:?})", self.operator_loc(), self.keyword_loc())
12235 }
12236}
12237
12238pub struct NoKeywordsParameterNode<'pr> {
12246 parser: *const pm_parser_t,
12248
12249 pointer: *mut pm_no_keywords_parameter_node_t,
12251
12252 marker: PhantomData<&'pr mut pm_no_keywords_parameter_node_t>
12254}
12255
12256impl<'pr> NoKeywordsParameterNode<'pr> {
12257 #[must_use]
12259 pub const fn as_node(&self) -> Node<'pr> {
12260 Node::NoKeywordsParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12261 }
12262
12263 #[must_use]
12265 pub fn location(&self) -> Location<'pr> {
12266 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12267 Location::new(self.parser, unsafe { &(*pointer) })
12268 }
12269
12270 #[must_use]
12272 pub fn flags(&self) -> pm_node_flags_t {
12273 unsafe { (*self.pointer).base.flags }
12274 }
12275
12276 #[must_use]
12278 pub fn operator_loc(&self) -> Location<'pr> {
12279 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12280 Location::new(self.parser, unsafe { &(*pointer) })
12281 }
12282
12283 #[must_use]
12285 pub fn keyword_loc(&self) -> Location<'pr> {
12286 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
12287 Location::new(self.parser, unsafe { &(*pointer) })
12288 }
12289}
12290
12291impl std::fmt::Debug for NoKeywordsParameterNode<'_> {
12292 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12293 write!(f, "NoKeywordsParameterNode({:?}, {:?})", self.operator_loc(), self.keyword_loc())
12294 }
12295}
12296
12297pub struct NumberedParametersNode<'pr> {
12304 parser: *const pm_parser_t,
12306
12307 pointer: *mut pm_numbered_parameters_node_t,
12309
12310 marker: PhantomData<&'pr mut pm_numbered_parameters_node_t>
12312}
12313
12314impl<'pr> NumberedParametersNode<'pr> {
12315 #[must_use]
12317 pub const fn as_node(&self) -> Node<'pr> {
12318 Node::NumberedParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12319 }
12320
12321 #[must_use]
12323 pub fn location(&self) -> Location<'pr> {
12324 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12325 Location::new(self.parser, unsafe { &(*pointer) })
12326 }
12327
12328 #[must_use]
12330 pub fn flags(&self) -> pm_node_flags_t {
12331 unsafe { (*self.pointer).base.flags }
12332 }
12333
12334 #[must_use]
12336 pub fn maximum(&self) -> u8 {
12337 unsafe { (*self.pointer).maximum }
12338 }
12339}
12340
12341impl std::fmt::Debug for NumberedParametersNode<'_> {
12342 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12343 write!(f, "NumberedParametersNode({:?})", self.maximum())
12344 }
12345}
12346
12347pub struct NumberedReferenceReadNode<'pr> {
12354 parser: *const pm_parser_t,
12356
12357 pointer: *mut pm_numbered_reference_read_node_t,
12359
12360 marker: PhantomData<&'pr mut pm_numbered_reference_read_node_t>
12362}
12363
12364impl<'pr> NumberedReferenceReadNode<'pr> {
12365 #[must_use]
12367 pub const fn as_node(&self) -> Node<'pr> {
12368 Node::NumberedReferenceReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12369 }
12370
12371 #[must_use]
12373 pub fn location(&self) -> Location<'pr> {
12374 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12375 Location::new(self.parser, unsafe { &(*pointer) })
12376 }
12377
12378 #[must_use]
12380 pub fn flags(&self) -> pm_node_flags_t {
12381 unsafe { (*self.pointer).base.flags }
12382 }
12383
12384 #[must_use]
12386 pub fn number(&self) -> u32 {
12387 unsafe { (*self.pointer).number }
12388 }
12389}
12390
12391impl std::fmt::Debug for NumberedReferenceReadNode<'_> {
12392 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12393 write!(f, "NumberedReferenceReadNode({:?})", self.number())
12394 }
12395}
12396
12397pub struct OptionalKeywordParameterNode<'pr> {
12405 parser: *const pm_parser_t,
12407
12408 pointer: *mut pm_optional_keyword_parameter_node_t,
12410
12411 marker: PhantomData<&'pr mut pm_optional_keyword_parameter_node_t>
12413}
12414
12415impl<'pr> OptionalKeywordParameterNode<'pr> {
12416 #[must_use]
12418 pub const fn as_node(&self) -> Node<'pr> {
12419 Node::OptionalKeywordParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12420 }
12421
12422 #[must_use]
12424 pub fn location(&self) -> Location<'pr> {
12425 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12426 Location::new(self.parser, unsafe { &(*pointer) })
12427 }
12428
12429 #[must_use]
12431 pub fn flags(&self) -> pm_node_flags_t {
12432 unsafe { (*self.pointer).base.flags }
12433 }
12434
12435 #[must_use]
12437 pub fn is_repeated_parameter(&self) -> bool {
12438 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
12439 }
12440
12441 #[must_use]
12443 pub fn name(&self) -> ConstantId<'pr> {
12444 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
12445 }
12446
12447 #[must_use]
12449 pub fn name_loc(&self) -> Location<'pr> {
12450 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
12451 Location::new(self.parser, unsafe { &(*pointer) })
12452 }
12453
12454 #[must_use]
12456 pub fn value(&self) -> Node<'pr> {
12457 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
12458 Node::new(self.parser, node)
12459 }
12460}
12461
12462impl std::fmt::Debug for OptionalKeywordParameterNode<'_> {
12463 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12464 write!(f, "OptionalKeywordParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value())
12465 }
12466}
12467
12468pub struct OptionalParameterNode<'pr> {
12476 parser: *const pm_parser_t,
12478
12479 pointer: *mut pm_optional_parameter_node_t,
12481
12482 marker: PhantomData<&'pr mut pm_optional_parameter_node_t>
12484}
12485
12486impl<'pr> OptionalParameterNode<'pr> {
12487 #[must_use]
12489 pub const fn as_node(&self) -> Node<'pr> {
12490 Node::OptionalParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12491 }
12492
12493 #[must_use]
12495 pub fn location(&self) -> Location<'pr> {
12496 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12497 Location::new(self.parser, unsafe { &(*pointer) })
12498 }
12499
12500 #[must_use]
12502 pub fn flags(&self) -> pm_node_flags_t {
12503 unsafe { (*self.pointer).base.flags }
12504 }
12505
12506 #[must_use]
12508 pub fn is_repeated_parameter(&self) -> bool {
12509 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
12510 }
12511
12512 #[must_use]
12514 pub fn name(&self) -> ConstantId<'pr> {
12515 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
12516 }
12517
12518 #[must_use]
12520 pub fn name_loc(&self) -> Location<'pr> {
12521 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
12522 Location::new(self.parser, unsafe { &(*pointer) })
12523 }
12524
12525 #[must_use]
12527 pub fn operator_loc(&self) -> Location<'pr> {
12528 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12529 Location::new(self.parser, unsafe { &(*pointer) })
12530 }
12531
12532 #[must_use]
12534 pub fn value(&self) -> Node<'pr> {
12535 let node: *mut pm_node_t = unsafe { (*self.pointer).value };
12536 Node::new(self.parser, node)
12537 }
12538}
12539
12540impl std::fmt::Debug for OptionalParameterNode<'_> {
12541 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12542 write!(f, "OptionalParameterNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
12543 }
12544}
12545
12546pub struct OrNode<'pr> {
12553 parser: *const pm_parser_t,
12555
12556 pointer: *mut pm_or_node_t,
12558
12559 marker: PhantomData<&'pr mut pm_or_node_t>
12561}
12562
12563impl<'pr> OrNode<'pr> {
12564 #[must_use]
12566 pub const fn as_node(&self) -> Node<'pr> {
12567 Node::OrNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12568 }
12569
12570 #[must_use]
12572 pub fn location(&self) -> Location<'pr> {
12573 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12574 Location::new(self.parser, unsafe { &(*pointer) })
12575 }
12576
12577 #[must_use]
12579 pub fn flags(&self) -> pm_node_flags_t {
12580 unsafe { (*self.pointer).base.flags }
12581 }
12582
12583 #[must_use]
12585 pub fn left(&self) -> Node<'pr> {
12586 let node: *mut pm_node_t = unsafe { (*self.pointer).left };
12587 Node::new(self.parser, node)
12588 }
12589
12590 #[must_use]
12592 pub fn right(&self) -> Node<'pr> {
12593 let node: *mut pm_node_t = unsafe { (*self.pointer).right };
12594 Node::new(self.parser, node)
12595 }
12596
12597 #[must_use]
12599 pub fn operator_loc(&self) -> Location<'pr> {
12600 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12601 Location::new(self.parser, unsafe { &(*pointer) })
12602 }
12603}
12604
12605impl std::fmt::Debug for OrNode<'_> {
12606 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12607 write!(f, "OrNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
12608 }
12609}
12610
12611pub struct ParametersNode<'pr> {
12619 parser: *const pm_parser_t,
12621
12622 pointer: *mut pm_parameters_node_t,
12624
12625 marker: PhantomData<&'pr mut pm_parameters_node_t>
12627}
12628
12629impl<'pr> ParametersNode<'pr> {
12630 #[must_use]
12632 pub const fn as_node(&self) -> Node<'pr> {
12633 Node::ParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12634 }
12635
12636 #[must_use]
12638 pub fn location(&self) -> Location<'pr> {
12639 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12640 Location::new(self.parser, unsafe { &(*pointer) })
12641 }
12642
12643 #[must_use]
12645 pub fn flags(&self) -> pm_node_flags_t {
12646 unsafe { (*self.pointer).base.flags }
12647 }
12648
12649 #[must_use]
12651 pub fn requireds(&self) -> NodeList<'pr> {
12652 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).requireds };
12653 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
12654 }
12655
12656 #[must_use]
12658 pub fn optionals(&self) -> NodeList<'pr> {
12659 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).optionals };
12660 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
12661 }
12662
12663 #[must_use]
12665 pub fn rest(&self) -> Option<Node<'pr>> {
12666 let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
12667 if node.is_null() {
12668 None
12669 } else {
12670 Some(Node::new(self.parser, node))
12671 }
12672 }
12673
12674 #[must_use]
12676 pub fn posts(&self) -> NodeList<'pr> {
12677 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).posts };
12678 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
12679 }
12680
12681 #[must_use]
12683 pub fn keywords(&self) -> NodeList<'pr> {
12684 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).keywords };
12685 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
12686 }
12687
12688 #[must_use]
12690 pub fn keyword_rest(&self) -> Option<Node<'pr>> {
12691 let node: *mut pm_node_t = unsafe { (*self.pointer).keyword_rest };
12692 if node.is_null() {
12693 None
12694 } else {
12695 Some(Node::new(self.parser, node))
12696 }
12697 }
12698
12699 #[must_use]
12701 pub fn block(&self) -> Option<Node<'pr>> {
12702 let node: *mut pm_node_t = unsafe { (*self.pointer).block };
12703 if node.is_null() {
12704 None
12705 } else {
12706 Some(Node::new(self.parser, node))
12707 }
12708 }
12709}
12710
12711impl std::fmt::Debug for ParametersNode<'_> {
12712 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12713 write!(f, "ParametersNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.requireds(), self.optionals(), self.rest(), self.posts(), self.keywords(), self.keyword_rest(), self.block())
12714 }
12715}
12716
12717pub struct ParenthesesNode<'pr> {
12724 parser: *const pm_parser_t,
12726
12727 pointer: *mut pm_parentheses_node_t,
12729
12730 marker: PhantomData<&'pr mut pm_parentheses_node_t>
12732}
12733
12734impl<'pr> ParenthesesNode<'pr> {
12735 #[must_use]
12737 pub const fn as_node(&self) -> Node<'pr> {
12738 Node::ParenthesesNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12739 }
12740
12741 #[must_use]
12743 pub fn location(&self) -> Location<'pr> {
12744 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12745 Location::new(self.parser, unsafe { &(*pointer) })
12746 }
12747
12748 #[must_use]
12750 pub fn flags(&self) -> pm_node_flags_t {
12751 unsafe { (*self.pointer).base.flags }
12752 }
12753
12754 #[must_use]
12756 pub fn is_multiple_statements(&self) -> bool {
12757 (self.flags() & PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS) != 0
12758 }
12759
12760 #[must_use]
12762 pub fn body(&self) -> Option<Node<'pr>> {
12763 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
12764 if node.is_null() {
12765 None
12766 } else {
12767 Some(Node::new(self.parser, node))
12768 }
12769 }
12770
12771 #[must_use]
12773 pub fn opening_loc(&self) -> Location<'pr> {
12774 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
12775 Location::new(self.parser, unsafe { &(*pointer) })
12776 }
12777
12778 #[must_use]
12780 pub fn closing_loc(&self) -> Location<'pr> {
12781 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
12782 Location::new(self.parser, unsafe { &(*pointer) })
12783 }
12784}
12785
12786impl std::fmt::Debug for ParenthesesNode<'_> {
12787 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12788 write!(f, "ParenthesesNode({:?}, {:?}, {:?})", self.body(), self.opening_loc(), self.closing_loc())
12789 }
12790}
12791
12792pub struct PinnedExpressionNode<'pr> {
12799 parser: *const pm_parser_t,
12801
12802 pointer: *mut pm_pinned_expression_node_t,
12804
12805 marker: PhantomData<&'pr mut pm_pinned_expression_node_t>
12807}
12808
12809impl<'pr> PinnedExpressionNode<'pr> {
12810 #[must_use]
12812 pub const fn as_node(&self) -> Node<'pr> {
12813 Node::PinnedExpressionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12814 }
12815
12816 #[must_use]
12818 pub fn location(&self) -> Location<'pr> {
12819 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12820 Location::new(self.parser, unsafe { &(*pointer) })
12821 }
12822
12823 #[must_use]
12825 pub fn flags(&self) -> pm_node_flags_t {
12826 unsafe { (*self.pointer).base.flags }
12827 }
12828
12829 #[must_use]
12831 pub fn expression(&self) -> Node<'pr> {
12832 let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
12833 Node::new(self.parser, node)
12834 }
12835
12836 #[must_use]
12838 pub fn operator_loc(&self) -> Location<'pr> {
12839 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12840 Location::new(self.parser, unsafe { &(*pointer) })
12841 }
12842
12843 #[must_use]
12845 pub fn lparen_loc(&self) -> Location<'pr> {
12846 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
12847 Location::new(self.parser, unsafe { &(*pointer) })
12848 }
12849
12850 #[must_use]
12852 pub fn rparen_loc(&self) -> Location<'pr> {
12853 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
12854 Location::new(self.parser, unsafe { &(*pointer) })
12855 }
12856}
12857
12858impl std::fmt::Debug for PinnedExpressionNode<'_> {
12859 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12860 write!(f, "PinnedExpressionNode({:?}, {:?}, {:?}, {:?})", self.expression(), self.operator_loc(), self.lparen_loc(), self.rparen_loc())
12861 }
12862}
12863
12864pub struct PinnedVariableNode<'pr> {
12871 parser: *const pm_parser_t,
12873
12874 pointer: *mut pm_pinned_variable_node_t,
12876
12877 marker: PhantomData<&'pr mut pm_pinned_variable_node_t>
12879}
12880
12881impl<'pr> PinnedVariableNode<'pr> {
12882 #[must_use]
12884 pub const fn as_node(&self) -> Node<'pr> {
12885 Node::PinnedVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12886 }
12887
12888 #[must_use]
12890 pub fn location(&self) -> Location<'pr> {
12891 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12892 Location::new(self.parser, unsafe { &(*pointer) })
12893 }
12894
12895 #[must_use]
12897 pub fn flags(&self) -> pm_node_flags_t {
12898 unsafe { (*self.pointer).base.flags }
12899 }
12900
12901 #[must_use]
12903 pub fn variable(&self) -> Node<'pr> {
12904 let node: *mut pm_node_t = unsafe { (*self.pointer).variable };
12905 Node::new(self.parser, node)
12906 }
12907
12908 #[must_use]
12910 pub fn operator_loc(&self) -> Location<'pr> {
12911 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
12912 Location::new(self.parser, unsafe { &(*pointer) })
12913 }
12914}
12915
12916impl std::fmt::Debug for PinnedVariableNode<'_> {
12917 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12918 write!(f, "PinnedVariableNode({:?}, {:?})", self.variable(), self.operator_loc())
12919 }
12920}
12921
12922pub struct PostExecutionNode<'pr> {
12929 parser: *const pm_parser_t,
12931
12932 pointer: *mut pm_post_execution_node_t,
12934
12935 marker: PhantomData<&'pr mut pm_post_execution_node_t>
12937}
12938
12939impl<'pr> PostExecutionNode<'pr> {
12940 #[must_use]
12942 pub const fn as_node(&self) -> Node<'pr> {
12943 Node::PostExecutionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
12944 }
12945
12946 #[must_use]
12948 pub fn location(&self) -> Location<'pr> {
12949 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
12950 Location::new(self.parser, unsafe { &(*pointer) })
12951 }
12952
12953 #[must_use]
12955 pub fn flags(&self) -> pm_node_flags_t {
12956 unsafe { (*self.pointer).base.flags }
12957 }
12958
12959 #[must_use]
12961 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
12962 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
12963 if node.is_null() {
12964 None
12965 } else {
12966 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
12967 }
12968 }
12969
12970 #[must_use]
12972 pub fn keyword_loc(&self) -> Location<'pr> {
12973 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
12974 Location::new(self.parser, unsafe { &(*pointer) })
12975 }
12976
12977 #[must_use]
12979 pub fn opening_loc(&self) -> Location<'pr> {
12980 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
12981 Location::new(self.parser, unsafe { &(*pointer) })
12982 }
12983
12984 #[must_use]
12986 pub fn closing_loc(&self) -> Location<'pr> {
12987 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
12988 Location::new(self.parser, unsafe { &(*pointer) })
12989 }
12990}
12991
12992impl std::fmt::Debug for PostExecutionNode<'_> {
12993 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12994 write!(f, "PostExecutionNode({:?}, {:?}, {:?}, {:?})", self.statements(), self.keyword_loc(), self.opening_loc(), self.closing_loc())
12995 }
12996}
12997
12998pub struct PreExecutionNode<'pr> {
13005 parser: *const pm_parser_t,
13007
13008 pointer: *mut pm_pre_execution_node_t,
13010
13011 marker: PhantomData<&'pr mut pm_pre_execution_node_t>
13013}
13014
13015impl<'pr> PreExecutionNode<'pr> {
13016 #[must_use]
13018 pub const fn as_node(&self) -> Node<'pr> {
13019 Node::PreExecutionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13020 }
13021
13022 #[must_use]
13024 pub fn location(&self) -> Location<'pr> {
13025 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13026 Location::new(self.parser, unsafe { &(*pointer) })
13027 }
13028
13029 #[must_use]
13031 pub fn flags(&self) -> pm_node_flags_t {
13032 unsafe { (*self.pointer).base.flags }
13033 }
13034
13035 #[must_use]
13037 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
13038 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
13039 if node.is_null() {
13040 None
13041 } else {
13042 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
13043 }
13044 }
13045
13046 #[must_use]
13048 pub fn keyword_loc(&self) -> Location<'pr> {
13049 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
13050 Location::new(self.parser, unsafe { &(*pointer) })
13051 }
13052
13053 #[must_use]
13055 pub fn opening_loc(&self) -> Location<'pr> {
13056 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
13057 Location::new(self.parser, unsafe { &(*pointer) })
13058 }
13059
13060 #[must_use]
13062 pub fn closing_loc(&self) -> Location<'pr> {
13063 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
13064 Location::new(self.parser, unsafe { &(*pointer) })
13065 }
13066}
13067
13068impl std::fmt::Debug for PreExecutionNode<'_> {
13069 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13070 write!(f, "PreExecutionNode({:?}, {:?}, {:?}, {:?})", self.statements(), self.keyword_loc(), self.opening_loc(), self.closing_loc())
13071 }
13072}
13073
13074pub struct ProgramNode<'pr> {
13076 parser: *const pm_parser_t,
13078
13079 pointer: *mut pm_program_node_t,
13081
13082 marker: PhantomData<&'pr mut pm_program_node_t>
13084}
13085
13086impl<'pr> ProgramNode<'pr> {
13087 #[must_use]
13089 pub const fn as_node(&self) -> Node<'pr> {
13090 Node::ProgramNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13091 }
13092
13093 #[must_use]
13095 pub fn location(&self) -> Location<'pr> {
13096 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13097 Location::new(self.parser, unsafe { &(*pointer) })
13098 }
13099
13100 #[must_use]
13102 pub fn flags(&self) -> pm_node_flags_t {
13103 unsafe { (*self.pointer).base.flags }
13104 }
13105
13106 #[must_use]
13108 pub fn locals(&self) -> ConstantList<'pr> {
13109 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
13110 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
13111 }
13112
13113 #[must_use]
13115 pub fn statements(&self) -> StatementsNode<'pr> {
13116 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
13117 StatementsNode { parser: self.parser, pointer: node, marker: PhantomData }
13118 }
13119}
13120
13121impl std::fmt::Debug for ProgramNode<'_> {
13122 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13123 write!(f, "ProgramNode({:?}, {:?})", self.locals(), self.statements())
13124 }
13125}
13126
13127pub struct RangeNode<'pr> {
13139 parser: *const pm_parser_t,
13141
13142 pointer: *mut pm_range_node_t,
13144
13145 marker: PhantomData<&'pr mut pm_range_node_t>
13147}
13148
13149impl<'pr> RangeNode<'pr> {
13150 #[must_use]
13152 pub const fn as_node(&self) -> Node<'pr> {
13153 Node::RangeNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13154 }
13155
13156 #[must_use]
13158 pub fn location(&self) -> Location<'pr> {
13159 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13160 Location::new(self.parser, unsafe { &(*pointer) })
13161 }
13162
13163 #[must_use]
13165 pub fn flags(&self) -> pm_node_flags_t {
13166 unsafe { (*self.pointer).base.flags }
13167 }
13168
13169 #[must_use]
13171 pub fn is_exclude_end(&self) -> bool {
13172 (self.flags() & PM_RANGE_FLAGS_EXCLUDE_END) != 0
13173 }
13174
13175 #[must_use]
13177 pub fn left(&self) -> Option<Node<'pr>> {
13178 let node: *mut pm_node_t = unsafe { (*self.pointer).left };
13179 if node.is_null() {
13180 None
13181 } else {
13182 Some(Node::new(self.parser, node))
13183 }
13184 }
13185
13186 #[must_use]
13188 pub fn right(&self) -> Option<Node<'pr>> {
13189 let node: *mut pm_node_t = unsafe { (*self.pointer).right };
13190 if node.is_null() {
13191 None
13192 } else {
13193 Some(Node::new(self.parser, node))
13194 }
13195 }
13196
13197 #[must_use]
13199 pub fn operator_loc(&self) -> Location<'pr> {
13200 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
13201 Location::new(self.parser, unsafe { &(*pointer) })
13202 }
13203}
13204
13205impl std::fmt::Debug for RangeNode<'_> {
13206 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13207 write!(f, "RangeNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
13208 }
13209}
13210
13211pub struct RationalNode<'pr> {
13218 parser: *const pm_parser_t,
13220
13221 pointer: *mut pm_rational_node_t,
13223
13224 marker: PhantomData<&'pr mut pm_rational_node_t>
13226}
13227
13228impl<'pr> RationalNode<'pr> {
13229 #[must_use]
13231 pub const fn as_node(&self) -> Node<'pr> {
13232 Node::RationalNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13233 }
13234
13235 #[must_use]
13237 pub fn location(&self) -> Location<'pr> {
13238 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13239 Location::new(self.parser, unsafe { &(*pointer) })
13240 }
13241
13242 #[must_use]
13244 pub fn flags(&self) -> pm_node_flags_t {
13245 unsafe { (*self.pointer).base.flags }
13246 }
13247
13248 #[must_use]
13250 pub fn is_binary(&self) -> bool {
13251 (self.flags() & PM_INTEGER_BASE_FLAGS_BINARY) != 0
13252 }
13253
13254 #[must_use]
13256 pub fn is_decimal(&self) -> bool {
13257 (self.flags() & PM_INTEGER_BASE_FLAGS_DECIMAL) != 0
13258 }
13259
13260 #[must_use]
13262 pub fn is_octal(&self) -> bool {
13263 (self.flags() & PM_INTEGER_BASE_FLAGS_OCTAL) != 0
13264 }
13265
13266 #[must_use]
13268 pub fn is_hexadecimal(&self) -> bool {
13269 (self.flags() & PM_INTEGER_BASE_FLAGS_HEXADECIMAL) != 0
13270 }
13271
13272 #[must_use]
13274 pub fn numerator(&self) -> Integer<'pr> {
13275 Integer::new(unsafe { &raw const(*self.pointer).numerator })
13276 }
13277
13278 #[must_use]
13280 pub fn denominator(&self) -> Integer<'pr> {
13281 Integer::new(unsafe { &raw const(*self.pointer).denominator })
13282 }
13283}
13284
13285impl std::fmt::Debug for RationalNode<'_> {
13286 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13287 write!(f, "RationalNode({:?}, {:?})", self.numerator(), self.denominator())
13288 }
13289}
13290
13291pub struct RedoNode<'pr> {
13298 parser: *const pm_parser_t,
13300
13301 pointer: *mut pm_redo_node_t,
13303
13304 marker: PhantomData<&'pr mut pm_redo_node_t>
13306}
13307
13308impl<'pr> RedoNode<'pr> {
13309 #[must_use]
13311 pub const fn as_node(&self) -> Node<'pr> {
13312 Node::RedoNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13313 }
13314
13315 #[must_use]
13317 pub fn location(&self) -> Location<'pr> {
13318 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13319 Location::new(self.parser, unsafe { &(*pointer) })
13320 }
13321
13322 #[must_use]
13324 pub fn flags(&self) -> pm_node_flags_t {
13325 unsafe { (*self.pointer).base.flags }
13326 }
13327}
13328
13329impl std::fmt::Debug for RedoNode<'_> {
13330 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13331 write!(f, "RedoNode()")
13332 }
13333}
13334
13335pub struct RegularExpressionNode<'pr> {
13342 parser: *const pm_parser_t,
13344
13345 pointer: *mut pm_regular_expression_node_t,
13347
13348 marker: PhantomData<&'pr mut pm_regular_expression_node_t>
13350}
13351
13352impl<'pr> RegularExpressionNode<'pr> {
13353 #[must_use]
13355 pub const fn as_node(&self) -> Node<'pr> {
13356 Node::RegularExpressionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13357 }
13358
13359 #[must_use]
13361 pub fn location(&self) -> Location<'pr> {
13362 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13363 Location::new(self.parser, unsafe { &(*pointer) })
13364 }
13365
13366 #[must_use]
13368 pub fn flags(&self) -> pm_node_flags_t {
13369 unsafe { (*self.pointer).base.flags }
13370 }
13371
13372 #[must_use]
13374 pub fn is_ignore_case(&self) -> bool {
13375 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
13376 }
13377
13378 #[must_use]
13380 pub fn is_extended(&self) -> bool {
13381 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
13382 }
13383
13384 #[must_use]
13386 pub fn is_multi_line(&self) -> bool {
13387 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
13388 }
13389
13390 #[must_use]
13392 pub fn is_once(&self) -> bool {
13393 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
13394 }
13395
13396 #[must_use]
13398 pub fn is_euc_jp(&self) -> bool {
13399 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
13400 }
13401
13402 #[must_use]
13404 pub fn is_ascii_8bit(&self) -> bool {
13405 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
13406 }
13407
13408 #[must_use]
13410 pub fn is_windows_31j(&self) -> bool {
13411 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
13412 }
13413
13414 #[must_use]
13416 pub fn is_utf_8(&self) -> bool {
13417 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
13418 }
13419
13420 #[must_use]
13422 pub fn is_forced_utf8_encoding(&self) -> bool {
13423 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
13424 }
13425
13426 #[must_use]
13428 pub fn is_forced_binary_encoding(&self) -> bool {
13429 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
13430 }
13431
13432 #[must_use]
13434 pub fn is_forced_us_ascii_encoding(&self) -> bool {
13435 (self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
13436 }
13437
13438 #[must_use]
13440 pub fn opening_loc(&self) -> Location<'pr> {
13441 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
13442 Location::new(self.parser, unsafe { &(*pointer) })
13443 }
13444
13445 #[must_use]
13447 pub fn content_loc(&self) -> Location<'pr> {
13448 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).content_loc };
13449 Location::new(self.parser, unsafe { &(*pointer) })
13450 }
13451
13452 #[must_use]
13454 pub fn closing_loc(&self) -> Location<'pr> {
13455 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
13456 Location::new(self.parser, unsafe { &(*pointer) })
13457 }
13458
13459 #[must_use]
13461 pub fn unescaped(&self) -> &[u8] {
13462 unsafe {
13463 let source = (*self.pointer).unescaped.source;
13464 if source.is_null() {
13465 return &[];
13466 }
13467 let length = (*self.pointer).unescaped.length;
13468 std::slice::from_raw_parts(source, length)
13469 }
13470 }
13471}
13472
13473impl std::fmt::Debug for RegularExpressionNode<'_> {
13474 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13475 write!(f, "RegularExpressionNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
13476 }
13477}
13478
13479pub struct RequiredKeywordParameterNode<'pr> {
13487 parser: *const pm_parser_t,
13489
13490 pointer: *mut pm_required_keyword_parameter_node_t,
13492
13493 marker: PhantomData<&'pr mut pm_required_keyword_parameter_node_t>
13495}
13496
13497impl<'pr> RequiredKeywordParameterNode<'pr> {
13498 #[must_use]
13500 pub const fn as_node(&self) -> Node<'pr> {
13501 Node::RequiredKeywordParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13502 }
13503
13504 #[must_use]
13506 pub fn location(&self) -> Location<'pr> {
13507 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13508 Location::new(self.parser, unsafe { &(*pointer) })
13509 }
13510
13511 #[must_use]
13513 pub fn flags(&self) -> pm_node_flags_t {
13514 unsafe { (*self.pointer).base.flags }
13515 }
13516
13517 #[must_use]
13519 pub fn is_repeated_parameter(&self) -> bool {
13520 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
13521 }
13522
13523 #[must_use]
13525 pub fn name(&self) -> ConstantId<'pr> {
13526 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
13527 }
13528
13529 #[must_use]
13531 pub fn name_loc(&self) -> Location<'pr> {
13532 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
13533 Location::new(self.parser, unsafe { &(*pointer) })
13534 }
13535}
13536
13537impl std::fmt::Debug for RequiredKeywordParameterNode<'_> {
13538 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13539 write!(f, "RequiredKeywordParameterNode({:?}, {:?})", self.name(), self.name_loc())
13540 }
13541}
13542
13543pub struct RequiredParameterNode<'pr> {
13551 parser: *const pm_parser_t,
13553
13554 pointer: *mut pm_required_parameter_node_t,
13556
13557 marker: PhantomData<&'pr mut pm_required_parameter_node_t>
13559}
13560
13561impl<'pr> RequiredParameterNode<'pr> {
13562 #[must_use]
13564 pub const fn as_node(&self) -> Node<'pr> {
13565 Node::RequiredParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13566 }
13567
13568 #[must_use]
13570 pub fn location(&self) -> Location<'pr> {
13571 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13572 Location::new(self.parser, unsafe { &(*pointer) })
13573 }
13574
13575 #[must_use]
13577 pub fn flags(&self) -> pm_node_flags_t {
13578 unsafe { (*self.pointer).base.flags }
13579 }
13580
13581 #[must_use]
13583 pub fn is_repeated_parameter(&self) -> bool {
13584 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
13585 }
13586
13587 #[must_use]
13589 pub fn name(&self) -> ConstantId<'pr> {
13590 ConstantId::new(self.parser, unsafe { (*self.pointer).name })
13591 }
13592}
13593
13594impl std::fmt::Debug for RequiredParameterNode<'_> {
13595 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13596 write!(f, "RequiredParameterNode({:?})", self.name())
13597 }
13598}
13599
13600pub struct RescueModifierNode<'pr> {
13607 parser: *const pm_parser_t,
13609
13610 pointer: *mut pm_rescue_modifier_node_t,
13612
13613 marker: PhantomData<&'pr mut pm_rescue_modifier_node_t>
13615}
13616
13617impl<'pr> RescueModifierNode<'pr> {
13618 #[must_use]
13620 pub const fn as_node(&self) -> Node<'pr> {
13621 Node::RescueModifierNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13622 }
13623
13624 #[must_use]
13626 pub fn location(&self) -> Location<'pr> {
13627 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13628 Location::new(self.parser, unsafe { &(*pointer) })
13629 }
13630
13631 #[must_use]
13633 pub fn flags(&self) -> pm_node_flags_t {
13634 unsafe { (*self.pointer).base.flags }
13635 }
13636
13637 #[must_use]
13639 pub fn expression(&self) -> Node<'pr> {
13640 let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
13641 Node::new(self.parser, node)
13642 }
13643
13644 #[must_use]
13646 pub fn keyword_loc(&self) -> Location<'pr> {
13647 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
13648 Location::new(self.parser, unsafe { &(*pointer) })
13649 }
13650
13651 #[must_use]
13653 pub fn rescue_expression(&self) -> Node<'pr> {
13654 let node: *mut pm_node_t = unsafe { (*self.pointer).rescue_expression };
13655 Node::new(self.parser, node)
13656 }
13657}
13658
13659impl std::fmt::Debug for RescueModifierNode<'_> {
13660 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13661 write!(f, "RescueModifierNode({:?}, {:?}, {:?})", self.expression(), self.keyword_loc(), self.rescue_expression())
13662 }
13663}
13664
13665pub struct RescueNode<'pr> {
13677 parser: *const pm_parser_t,
13679
13680 pointer: *mut pm_rescue_node_t,
13682
13683 marker: PhantomData<&'pr mut pm_rescue_node_t>
13685}
13686
13687impl<'pr> RescueNode<'pr> {
13688 #[must_use]
13690 pub const fn as_node(&self) -> Node<'pr> {
13691 Node::RescueNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13692 }
13693
13694 #[must_use]
13696 pub fn location(&self) -> Location<'pr> {
13697 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13698 Location::new(self.parser, unsafe { &(*pointer) })
13699 }
13700
13701 #[must_use]
13703 pub fn flags(&self) -> pm_node_flags_t {
13704 unsafe { (*self.pointer).base.flags }
13705 }
13706
13707 #[must_use]
13709 pub fn keyword_loc(&self) -> Location<'pr> {
13710 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
13711 Location::new(self.parser, unsafe { &(*pointer) })
13712 }
13713
13714 #[must_use]
13716 pub fn exceptions(&self) -> NodeList<'pr> {
13717 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).exceptions };
13718 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
13719 }
13720
13721 #[must_use]
13723 pub fn operator_loc(&self) -> Option<Location<'pr>> {
13724 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
13725 let length = unsafe { (*pointer).length };
13726 if length == 0 {
13727 None
13728 } else {
13729 Some(Location::new(self.parser, unsafe { &(*pointer) }))
13730 }
13731 }
13732
13733 #[must_use]
13735 pub fn reference(&self) -> Option<Node<'pr>> {
13736 let node: *mut pm_node_t = unsafe { (*self.pointer).reference };
13737 if node.is_null() {
13738 None
13739 } else {
13740 Some(Node::new(self.parser, node))
13741 }
13742 }
13743
13744 #[must_use]
13746 pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
13747 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).then_keyword_loc };
13748 let length = unsafe { (*pointer).length };
13749 if length == 0 {
13750 None
13751 } else {
13752 Some(Location::new(self.parser, unsafe { &(*pointer) }))
13753 }
13754 }
13755
13756 #[must_use]
13758 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
13759 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
13760 if node.is_null() {
13761 None
13762 } else {
13763 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
13764 }
13765 }
13766
13767 #[must_use]
13769 pub fn subsequent(&self) -> Option<RescueNode<'pr>> {
13770 let node: *mut pm_rescue_node_t = unsafe { (*self.pointer).subsequent };
13771 if node.is_null() {
13772 None
13773 } else {
13774 Some(RescueNode { parser: self.parser, pointer: node, marker: PhantomData })
13775 }
13776 }
13777}
13778
13779impl std::fmt::Debug for RescueNode<'_> {
13780 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13781 write!(f, "RescueNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.exceptions(), self.operator_loc(), self.reference(), self.then_keyword_loc(), self.statements(), self.subsequent())
13782 }
13783}
13784
13785pub struct RestParameterNode<'pr> {
13793 parser: *const pm_parser_t,
13795
13796 pointer: *mut pm_rest_parameter_node_t,
13798
13799 marker: PhantomData<&'pr mut pm_rest_parameter_node_t>
13801}
13802
13803impl<'pr> RestParameterNode<'pr> {
13804 #[must_use]
13806 pub const fn as_node(&self) -> Node<'pr> {
13807 Node::RestParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13808 }
13809
13810 #[must_use]
13812 pub fn location(&self) -> Location<'pr> {
13813 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13814 Location::new(self.parser, unsafe { &(*pointer) })
13815 }
13816
13817 #[must_use]
13819 pub fn flags(&self) -> pm_node_flags_t {
13820 unsafe { (*self.pointer).base.flags }
13821 }
13822
13823 #[must_use]
13825 pub fn is_repeated_parameter(&self) -> bool {
13826 (self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
13827 }
13828
13829 #[must_use]
13831 pub fn name(&self) -> Option<ConstantId<'pr>> {
13832 let id = unsafe { (*self.pointer).name };
13833 if id == 0 {
13834 None
13835 } else {
13836 Some(ConstantId::new(self.parser, id))
13837 }
13838 }
13839
13840 #[must_use]
13842 pub fn name_loc(&self) -> Option<Location<'pr>> {
13843 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).name_loc };
13844 let length = unsafe { (*pointer).length };
13845 if length == 0 {
13846 None
13847 } else {
13848 Some(Location::new(self.parser, unsafe { &(*pointer) }))
13849 }
13850 }
13851
13852 #[must_use]
13854 pub fn operator_loc(&self) -> Location<'pr> {
13855 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
13856 Location::new(self.parser, unsafe { &(*pointer) })
13857 }
13858}
13859
13860impl std::fmt::Debug for RestParameterNode<'_> {
13861 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13862 write!(f, "RestParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc())
13863 }
13864}
13865
13866pub struct RetryNode<'pr> {
13873 parser: *const pm_parser_t,
13875
13876 pointer: *mut pm_retry_node_t,
13878
13879 marker: PhantomData<&'pr mut pm_retry_node_t>
13881}
13882
13883impl<'pr> RetryNode<'pr> {
13884 #[must_use]
13886 pub const fn as_node(&self) -> Node<'pr> {
13887 Node::RetryNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13888 }
13889
13890 #[must_use]
13892 pub fn location(&self) -> Location<'pr> {
13893 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13894 Location::new(self.parser, unsafe { &(*pointer) })
13895 }
13896
13897 #[must_use]
13899 pub fn flags(&self) -> pm_node_flags_t {
13900 unsafe { (*self.pointer).base.flags }
13901 }
13902}
13903
13904impl std::fmt::Debug for RetryNode<'_> {
13905 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13906 write!(f, "RetryNode()")
13907 }
13908}
13909
13910pub struct ReturnNode<'pr> {
13917 parser: *const pm_parser_t,
13919
13920 pointer: *mut pm_return_node_t,
13922
13923 marker: PhantomData<&'pr mut pm_return_node_t>
13925}
13926
13927impl<'pr> ReturnNode<'pr> {
13928 #[must_use]
13930 pub const fn as_node(&self) -> Node<'pr> {
13931 Node::ReturnNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13932 }
13933
13934 #[must_use]
13936 pub fn location(&self) -> Location<'pr> {
13937 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
13938 Location::new(self.parser, unsafe { &(*pointer) })
13939 }
13940
13941 #[must_use]
13943 pub fn flags(&self) -> pm_node_flags_t {
13944 unsafe { (*self.pointer).base.flags }
13945 }
13946
13947 #[must_use]
13949 pub fn keyword_loc(&self) -> Location<'pr> {
13950 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
13951 Location::new(self.parser, unsafe { &(*pointer) })
13952 }
13953
13954 #[must_use]
13956 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
13957 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
13958 if node.is_null() {
13959 None
13960 } else {
13961 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
13962 }
13963 }
13964}
13965
13966impl std::fmt::Debug for ReturnNode<'_> {
13967 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13968 write!(f, "ReturnNode({:?}, {:?})", self.keyword_loc(), self.arguments())
13969 }
13970}
13971
13972pub struct SelfNode<'pr> {
13979 parser: *const pm_parser_t,
13981
13982 pointer: *mut pm_self_node_t,
13984
13985 marker: PhantomData<&'pr mut pm_self_node_t>
13987}
13988
13989impl<'pr> SelfNode<'pr> {
13990 #[must_use]
13992 pub const fn as_node(&self) -> Node<'pr> {
13993 Node::SelfNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
13994 }
13995
13996 #[must_use]
13998 pub fn location(&self) -> Location<'pr> {
13999 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14000 Location::new(self.parser, unsafe { &(*pointer) })
14001 }
14002
14003 #[must_use]
14005 pub fn flags(&self) -> pm_node_flags_t {
14006 unsafe { (*self.pointer).base.flags }
14007 }
14008}
14009
14010impl std::fmt::Debug for SelfNode<'_> {
14011 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14012 write!(f, "SelfNode()")
14013 }
14014}
14015
14016pub struct ShareableConstantNode<'pr> {
14024 parser: *const pm_parser_t,
14026
14027 pointer: *mut pm_shareable_constant_node_t,
14029
14030 marker: PhantomData<&'pr mut pm_shareable_constant_node_t>
14032}
14033
14034impl<'pr> ShareableConstantNode<'pr> {
14035 #[must_use]
14037 pub const fn as_node(&self) -> Node<'pr> {
14038 Node::ShareableConstantNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14039 }
14040
14041 #[must_use]
14043 pub fn location(&self) -> Location<'pr> {
14044 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14045 Location::new(self.parser, unsafe { &(*pointer) })
14046 }
14047
14048 #[must_use]
14050 pub fn flags(&self) -> pm_node_flags_t {
14051 unsafe { (*self.pointer).base.flags }
14052 }
14053
14054 #[must_use]
14056 pub fn is_literal(&self) -> bool {
14057 (self.flags() & PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL) != 0
14058 }
14059
14060 #[must_use]
14062 pub fn is_experimental_everything(&self) -> bool {
14063 (self.flags() & PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING) != 0
14064 }
14065
14066 #[must_use]
14068 pub fn is_experimental_copy(&self) -> bool {
14069 (self.flags() & PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY) != 0
14070 }
14071
14072 #[must_use]
14074 pub fn write(&self) -> Node<'pr> {
14075 let node: *mut pm_node_t = unsafe { (*self.pointer).write };
14076 Node::new(self.parser, node)
14077 }
14078}
14079
14080impl std::fmt::Debug for ShareableConstantNode<'_> {
14081 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14082 write!(f, "ShareableConstantNode({:?})", self.write())
14083 }
14084}
14085
14086pub struct SingletonClassNode<'pr> {
14093 parser: *const pm_parser_t,
14095
14096 pointer: *mut pm_singleton_class_node_t,
14098
14099 marker: PhantomData<&'pr mut pm_singleton_class_node_t>
14101}
14102
14103impl<'pr> SingletonClassNode<'pr> {
14104 #[must_use]
14106 pub const fn as_node(&self) -> Node<'pr> {
14107 Node::SingletonClassNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14108 }
14109
14110 #[must_use]
14112 pub fn location(&self) -> Location<'pr> {
14113 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14114 Location::new(self.parser, unsafe { &(*pointer) })
14115 }
14116
14117 #[must_use]
14119 pub fn flags(&self) -> pm_node_flags_t {
14120 unsafe { (*self.pointer).base.flags }
14121 }
14122
14123 #[must_use]
14125 pub fn locals(&self) -> ConstantList<'pr> {
14126 let pointer: *mut pm_constant_id_list_t = unsafe { &raw mut (*self.pointer).locals };
14127 ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
14128 }
14129
14130 #[must_use]
14132 pub fn class_keyword_loc(&self) -> Location<'pr> {
14133 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).class_keyword_loc };
14134 Location::new(self.parser, unsafe { &(*pointer) })
14135 }
14136
14137 #[must_use]
14139 pub fn operator_loc(&self) -> Location<'pr> {
14140 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
14141 Location::new(self.parser, unsafe { &(*pointer) })
14142 }
14143
14144 #[must_use]
14146 pub fn expression(&self) -> Node<'pr> {
14147 let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
14148 Node::new(self.parser, node)
14149 }
14150
14151 #[must_use]
14153 pub fn body(&self) -> Option<Node<'pr>> {
14154 let node: *mut pm_node_t = unsafe { (*self.pointer).body };
14155 if node.is_null() {
14156 None
14157 } else {
14158 Some(Node::new(self.parser, node))
14159 }
14160 }
14161
14162 #[must_use]
14164 pub fn end_keyword_loc(&self) -> Location<'pr> {
14165 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
14166 Location::new(self.parser, unsafe { &(*pointer) })
14167 }
14168}
14169
14170impl std::fmt::Debug for SingletonClassNode<'_> {
14171 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14172 write!(f, "SingletonClassNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.class_keyword_loc(), self.operator_loc(), self.expression(), self.body(), self.end_keyword_loc())
14173 }
14174}
14175
14176pub struct SourceEncodingNode<'pr> {
14183 parser: *const pm_parser_t,
14185
14186 pointer: *mut pm_source_encoding_node_t,
14188
14189 marker: PhantomData<&'pr mut pm_source_encoding_node_t>
14191}
14192
14193impl<'pr> SourceEncodingNode<'pr> {
14194 #[must_use]
14196 pub const fn as_node(&self) -> Node<'pr> {
14197 Node::SourceEncodingNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14198 }
14199
14200 #[must_use]
14202 pub fn location(&self) -> Location<'pr> {
14203 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14204 Location::new(self.parser, unsafe { &(*pointer) })
14205 }
14206
14207 #[must_use]
14209 pub fn flags(&self) -> pm_node_flags_t {
14210 unsafe { (*self.pointer).base.flags }
14211 }
14212}
14213
14214impl std::fmt::Debug for SourceEncodingNode<'_> {
14215 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14216 write!(f, "SourceEncodingNode()")
14217 }
14218}
14219
14220pub struct SourceFileNode<'pr> {
14227 parser: *const pm_parser_t,
14229
14230 pointer: *mut pm_source_file_node_t,
14232
14233 marker: PhantomData<&'pr mut pm_source_file_node_t>
14235}
14236
14237impl<'pr> SourceFileNode<'pr> {
14238 #[must_use]
14240 pub const fn as_node(&self) -> Node<'pr> {
14241 Node::SourceFileNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14242 }
14243
14244 #[must_use]
14246 pub fn location(&self) -> Location<'pr> {
14247 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14248 Location::new(self.parser, unsafe { &(*pointer) })
14249 }
14250
14251 #[must_use]
14253 pub fn flags(&self) -> pm_node_flags_t {
14254 unsafe { (*self.pointer).base.flags }
14255 }
14256
14257 #[must_use]
14259 pub fn is_forced_utf8_encoding(&self) -> bool {
14260 (self.flags() & PM_STRING_FLAGS_FORCED_UTF8_ENCODING) != 0
14261 }
14262
14263 #[must_use]
14265 pub fn is_forced_binary_encoding(&self) -> bool {
14266 (self.flags() & PM_STRING_FLAGS_FORCED_BINARY_ENCODING) != 0
14267 }
14268
14269 #[must_use]
14271 pub fn is_frozen(&self) -> bool {
14272 (self.flags() & PM_STRING_FLAGS_FROZEN) != 0
14273 }
14274
14275 #[must_use]
14277 pub fn is_mutable(&self) -> bool {
14278 (self.flags() & PM_STRING_FLAGS_MUTABLE) != 0
14279 }
14280
14281 #[must_use]
14283 pub fn filepath(&self) -> &[u8] {
14284 unsafe {
14285 let source = (*self.pointer).filepath.source;
14286 if source.is_null() {
14287 return &[];
14288 }
14289 let length = (*self.pointer).filepath.length;
14290 std::slice::from_raw_parts(source, length)
14291 }
14292 }
14293}
14294
14295impl std::fmt::Debug for SourceFileNode<'_> {
14296 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14297 write!(f, "SourceFileNode({:?})", self.filepath())
14298 }
14299}
14300
14301pub struct SourceLineNode<'pr> {
14308 parser: *const pm_parser_t,
14310
14311 pointer: *mut pm_source_line_node_t,
14313
14314 marker: PhantomData<&'pr mut pm_source_line_node_t>
14316}
14317
14318impl<'pr> SourceLineNode<'pr> {
14319 #[must_use]
14321 pub const fn as_node(&self) -> Node<'pr> {
14322 Node::SourceLineNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14323 }
14324
14325 #[must_use]
14327 pub fn location(&self) -> Location<'pr> {
14328 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14329 Location::new(self.parser, unsafe { &(*pointer) })
14330 }
14331
14332 #[must_use]
14334 pub fn flags(&self) -> pm_node_flags_t {
14335 unsafe { (*self.pointer).base.flags }
14336 }
14337}
14338
14339impl std::fmt::Debug for SourceLineNode<'_> {
14340 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14341 write!(f, "SourceLineNode()")
14342 }
14343}
14344
14345pub struct SplatNode<'pr> {
14352 parser: *const pm_parser_t,
14354
14355 pointer: *mut pm_splat_node_t,
14357
14358 marker: PhantomData<&'pr mut pm_splat_node_t>
14360}
14361
14362impl<'pr> SplatNode<'pr> {
14363 #[must_use]
14365 pub const fn as_node(&self) -> Node<'pr> {
14366 Node::SplatNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14367 }
14368
14369 #[must_use]
14371 pub fn location(&self) -> Location<'pr> {
14372 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14373 Location::new(self.parser, unsafe { &(*pointer) })
14374 }
14375
14376 #[must_use]
14378 pub fn flags(&self) -> pm_node_flags_t {
14379 unsafe { (*self.pointer).base.flags }
14380 }
14381
14382 #[must_use]
14384 pub fn operator_loc(&self) -> Location<'pr> {
14385 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).operator_loc };
14386 Location::new(self.parser, unsafe { &(*pointer) })
14387 }
14388
14389 #[must_use]
14391 pub fn expression(&self) -> Option<Node<'pr>> {
14392 let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
14393 if node.is_null() {
14394 None
14395 } else {
14396 Some(Node::new(self.parser, node))
14397 }
14398 }
14399}
14400
14401impl std::fmt::Debug for SplatNode<'_> {
14402 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14403 write!(f, "SplatNode({:?}, {:?})", self.operator_loc(), self.expression())
14404 }
14405}
14406
14407pub struct StatementsNode<'pr> {
14414 parser: *const pm_parser_t,
14416
14417 pointer: *mut pm_statements_node_t,
14419
14420 marker: PhantomData<&'pr mut pm_statements_node_t>
14422}
14423
14424impl<'pr> StatementsNode<'pr> {
14425 #[must_use]
14427 pub const fn as_node(&self) -> Node<'pr> {
14428 Node::StatementsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14429 }
14430
14431 #[must_use]
14433 pub fn location(&self) -> Location<'pr> {
14434 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14435 Location::new(self.parser, unsafe { &(*pointer) })
14436 }
14437
14438 #[must_use]
14440 pub fn flags(&self) -> pm_node_flags_t {
14441 unsafe { (*self.pointer).base.flags }
14442 }
14443
14444 #[must_use]
14446 pub fn body(&self) -> NodeList<'pr> {
14447 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).body };
14448 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
14449 }
14450}
14451
14452impl std::fmt::Debug for StatementsNode<'_> {
14453 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14454 write!(f, "StatementsNode({:?})", self.body())
14455 }
14456}
14457
14458pub struct StringNode<'pr> {
14475 parser: *const pm_parser_t,
14477
14478 pointer: *mut pm_string_node_t,
14480
14481 marker: PhantomData<&'pr mut pm_string_node_t>
14483}
14484
14485impl<'pr> StringNode<'pr> {
14486 #[must_use]
14488 pub const fn as_node(&self) -> Node<'pr> {
14489 Node::StringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14490 }
14491
14492 #[must_use]
14494 pub fn location(&self) -> Location<'pr> {
14495 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14496 Location::new(self.parser, unsafe { &(*pointer) })
14497 }
14498
14499 #[must_use]
14501 pub fn flags(&self) -> pm_node_flags_t {
14502 unsafe { (*self.pointer).base.flags }
14503 }
14504
14505 #[must_use]
14507 pub fn is_forced_utf8_encoding(&self) -> bool {
14508 (self.flags() & PM_STRING_FLAGS_FORCED_UTF8_ENCODING) != 0
14509 }
14510
14511 #[must_use]
14513 pub fn is_forced_binary_encoding(&self) -> bool {
14514 (self.flags() & PM_STRING_FLAGS_FORCED_BINARY_ENCODING) != 0
14515 }
14516
14517 #[must_use]
14519 pub fn is_frozen(&self) -> bool {
14520 (self.flags() & PM_STRING_FLAGS_FROZEN) != 0
14521 }
14522
14523 #[must_use]
14525 pub fn is_mutable(&self) -> bool {
14526 (self.flags() & PM_STRING_FLAGS_MUTABLE) != 0
14527 }
14528
14529 #[must_use]
14531 pub fn opening_loc(&self) -> Option<Location<'pr>> {
14532 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
14533 let length = unsafe { (*pointer).length };
14534 if length == 0 {
14535 None
14536 } else {
14537 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14538 }
14539 }
14540
14541 #[must_use]
14543 pub fn content_loc(&self) -> Location<'pr> {
14544 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).content_loc };
14545 Location::new(self.parser, unsafe { &(*pointer) })
14546 }
14547
14548 #[must_use]
14550 pub fn closing_loc(&self) -> Option<Location<'pr>> {
14551 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
14552 let length = unsafe { (*pointer).length };
14553 if length == 0 {
14554 None
14555 } else {
14556 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14557 }
14558 }
14559
14560 #[must_use]
14562 pub fn unescaped(&self) -> &[u8] {
14563 unsafe {
14564 let source = (*self.pointer).unescaped.source;
14565 if source.is_null() {
14566 return &[];
14567 }
14568 let length = (*self.pointer).unescaped.length;
14569 std::slice::from_raw_parts(source, length)
14570 }
14571 }
14572}
14573
14574impl std::fmt::Debug for StringNode<'_> {
14575 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14576 write!(f, "StringNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
14577 }
14578}
14579
14580pub struct SuperNode<'pr> {
14594 parser: *const pm_parser_t,
14596
14597 pointer: *mut pm_super_node_t,
14599
14600 marker: PhantomData<&'pr mut pm_super_node_t>
14602}
14603
14604impl<'pr> SuperNode<'pr> {
14605 #[must_use]
14607 pub const fn as_node(&self) -> Node<'pr> {
14608 Node::SuperNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14609 }
14610
14611 #[must_use]
14613 pub fn location(&self) -> Location<'pr> {
14614 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14615 Location::new(self.parser, unsafe { &(*pointer) })
14616 }
14617
14618 #[must_use]
14620 pub fn flags(&self) -> pm_node_flags_t {
14621 unsafe { (*self.pointer).base.flags }
14622 }
14623
14624 #[must_use]
14626 pub fn keyword_loc(&self) -> Location<'pr> {
14627 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
14628 Location::new(self.parser, unsafe { &(*pointer) })
14629 }
14630
14631 #[must_use]
14633 pub fn lparen_loc(&self) -> Option<Location<'pr>> {
14634 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
14635 let length = unsafe { (*pointer).length };
14636 if length == 0 {
14637 None
14638 } else {
14639 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14640 }
14641 }
14642
14643 #[must_use]
14645 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
14646 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
14647 if node.is_null() {
14648 None
14649 } else {
14650 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
14651 }
14652 }
14653
14654 #[must_use]
14656 pub fn rparen_loc(&self) -> Option<Location<'pr>> {
14657 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
14658 let length = unsafe { (*pointer).length };
14659 if length == 0 {
14660 None
14661 } else {
14662 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14663 }
14664 }
14665
14666 #[must_use]
14668 pub fn block(&self) -> Option<Node<'pr>> {
14669 let node: *mut pm_node_t = unsafe { (*self.pointer).block };
14670 if node.is_null() {
14671 None
14672 } else {
14673 Some(Node::new(self.parser, node))
14674 }
14675 }
14676}
14677
14678impl std::fmt::Debug for SuperNode<'_> {
14679 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14680 write!(f, "SuperNode({:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.lparen_loc(), self.arguments(), self.rparen_loc(), self.block())
14681 }
14682}
14683
14684pub struct SymbolNode<'pr> {
14696 parser: *const pm_parser_t,
14698
14699 pointer: *mut pm_symbol_node_t,
14701
14702 marker: PhantomData<&'pr mut pm_symbol_node_t>
14704}
14705
14706impl<'pr> SymbolNode<'pr> {
14707 #[must_use]
14709 pub const fn as_node(&self) -> Node<'pr> {
14710 Node::SymbolNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14711 }
14712
14713 #[must_use]
14715 pub fn location(&self) -> Location<'pr> {
14716 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14717 Location::new(self.parser, unsafe { &(*pointer) })
14718 }
14719
14720 #[must_use]
14722 pub fn flags(&self) -> pm_node_flags_t {
14723 unsafe { (*self.pointer).base.flags }
14724 }
14725
14726 #[must_use]
14728 pub fn is_forced_utf8_encoding(&self) -> bool {
14729 (self.flags() & PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING) != 0
14730 }
14731
14732 #[must_use]
14734 pub fn is_forced_binary_encoding(&self) -> bool {
14735 (self.flags() & PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING) != 0
14736 }
14737
14738 #[must_use]
14740 pub fn is_forced_us_ascii_encoding(&self) -> bool {
14741 (self.flags() & PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING) != 0
14742 }
14743
14744 #[must_use]
14746 pub fn opening_loc(&self) -> Option<Location<'pr>> {
14747 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
14748 let length = unsafe { (*pointer).length };
14749 if length == 0 {
14750 None
14751 } else {
14752 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14753 }
14754 }
14755
14756 #[must_use]
14758 pub fn value_loc(&self) -> Option<Location<'pr>> {
14759 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).value_loc };
14760 let length = unsafe { (*pointer).length };
14761 if length == 0 {
14762 None
14763 } else {
14764 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14765 }
14766 }
14767
14768 #[must_use]
14770 pub fn closing_loc(&self) -> Option<Location<'pr>> {
14771 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
14772 let length = unsafe { (*pointer).length };
14773 if length == 0 {
14774 None
14775 } else {
14776 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14777 }
14778 }
14779
14780 #[must_use]
14782 pub fn unescaped(&self) -> &[u8] {
14783 unsafe {
14784 let source = (*self.pointer).unescaped.source;
14785 if source.is_null() {
14786 return &[];
14787 }
14788 let length = (*self.pointer).unescaped.length;
14789 std::slice::from_raw_parts(source, length)
14790 }
14791 }
14792}
14793
14794impl std::fmt::Debug for SymbolNode<'_> {
14795 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14796 write!(f, "SymbolNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.value_loc(), self.closing_loc(), self.unescaped())
14797 }
14798}
14799
14800pub struct TrueNode<'pr> {
14807 parser: *const pm_parser_t,
14809
14810 pointer: *mut pm_true_node_t,
14812
14813 marker: PhantomData<&'pr mut pm_true_node_t>
14815}
14816
14817impl<'pr> TrueNode<'pr> {
14818 #[must_use]
14820 pub const fn as_node(&self) -> Node<'pr> {
14821 Node::TrueNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14822 }
14823
14824 #[must_use]
14826 pub fn location(&self) -> Location<'pr> {
14827 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14828 Location::new(self.parser, unsafe { &(*pointer) })
14829 }
14830
14831 #[must_use]
14833 pub fn flags(&self) -> pm_node_flags_t {
14834 unsafe { (*self.pointer).base.flags }
14835 }
14836}
14837
14838impl std::fmt::Debug for TrueNode<'_> {
14839 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14840 write!(f, "TrueNode()")
14841 }
14842}
14843
14844pub struct UndefNode<'pr> {
14851 parser: *const pm_parser_t,
14853
14854 pointer: *mut pm_undef_node_t,
14856
14857 marker: PhantomData<&'pr mut pm_undef_node_t>
14859}
14860
14861impl<'pr> UndefNode<'pr> {
14862 #[must_use]
14864 pub const fn as_node(&self) -> Node<'pr> {
14865 Node::UndefNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14866 }
14867
14868 #[must_use]
14870 pub fn location(&self) -> Location<'pr> {
14871 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14872 Location::new(self.parser, unsafe { &(*pointer) })
14873 }
14874
14875 #[must_use]
14877 pub fn flags(&self) -> pm_node_flags_t {
14878 unsafe { (*self.pointer).base.flags }
14879 }
14880
14881 #[must_use]
14883 pub fn names(&self) -> NodeList<'pr> {
14884 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).names };
14885 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
14886 }
14887
14888 #[must_use]
14890 pub fn keyword_loc(&self) -> Location<'pr> {
14891 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
14892 Location::new(self.parser, unsafe { &(*pointer) })
14893 }
14894}
14895
14896impl std::fmt::Debug for UndefNode<'_> {
14897 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
14898 write!(f, "UndefNode({:?}, {:?})", self.names(), self.keyword_loc())
14899 }
14900}
14901
14902pub struct UnlessNode<'pr> {
14914 parser: *const pm_parser_t,
14916
14917 pointer: *mut pm_unless_node_t,
14919
14920 marker: PhantomData<&'pr mut pm_unless_node_t>
14922}
14923
14924impl<'pr> UnlessNode<'pr> {
14925 #[must_use]
14927 pub const fn as_node(&self) -> Node<'pr> {
14928 Node::UnlessNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
14929 }
14930
14931 #[must_use]
14933 pub fn location(&self) -> Location<'pr> {
14934 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
14935 Location::new(self.parser, unsafe { &(*pointer) })
14936 }
14937
14938 #[must_use]
14940 pub fn flags(&self) -> pm_node_flags_t {
14941 unsafe { (*self.pointer).base.flags }
14942 }
14943
14944 #[must_use]
14946 pub fn keyword_loc(&self) -> Location<'pr> {
14947 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
14948 Location::new(self.parser, unsafe { &(*pointer) })
14949 }
14950
14951 #[must_use]
14953 pub fn predicate(&self) -> Node<'pr> {
14954 let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
14955 Node::new(self.parser, node)
14956 }
14957
14958 #[must_use]
14960 pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
14961 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).then_keyword_loc };
14962 let length = unsafe { (*pointer).length };
14963 if length == 0 {
14964 None
14965 } else {
14966 Some(Location::new(self.parser, unsafe { &(*pointer) }))
14967 }
14968 }
14969
14970 #[must_use]
14972 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
14973 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
14974 if node.is_null() {
14975 None
14976 } else {
14977 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
14978 }
14979 }
14980
14981 #[must_use]
14983 pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
14984 let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
14985 if node.is_null() {
14986 None
14987 } else {
14988 Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
14989 }
14990 }
14991
14992 #[must_use]
14994 pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
14995 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).end_keyword_loc };
14996 let length = unsafe { (*pointer).length };
14997 if length == 0 {
14998 None
14999 } else {
15000 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15001 }
15002 }
15003}
15004
15005impl std::fmt::Debug for UnlessNode<'_> {
15006 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15007 write!(f, "UnlessNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.predicate(), self.then_keyword_loc(), self.statements(), self.else_clause(), self.end_keyword_loc())
15008 }
15009}
15010
15011pub struct UntilNode<'pr> {
15023 parser: *const pm_parser_t,
15025
15026 pointer: *mut pm_until_node_t,
15028
15029 marker: PhantomData<&'pr mut pm_until_node_t>
15031}
15032
15033impl<'pr> UntilNode<'pr> {
15034 #[must_use]
15036 pub const fn as_node(&self) -> Node<'pr> {
15037 Node::UntilNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
15038 }
15039
15040 #[must_use]
15042 pub fn location(&self) -> Location<'pr> {
15043 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
15044 Location::new(self.parser, unsafe { &(*pointer) })
15045 }
15046
15047 #[must_use]
15049 pub fn flags(&self) -> pm_node_flags_t {
15050 unsafe { (*self.pointer).base.flags }
15051 }
15052
15053 #[must_use]
15055 pub fn is_begin_modifier(&self) -> bool {
15056 (self.flags() & PM_LOOP_FLAGS_BEGIN_MODIFIER) != 0
15057 }
15058
15059 #[must_use]
15061 pub fn keyword_loc(&self) -> Location<'pr> {
15062 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
15063 Location::new(self.parser, unsafe { &(*pointer) })
15064 }
15065
15066 #[must_use]
15068 pub fn do_keyword_loc(&self) -> Option<Location<'pr>> {
15069 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).do_keyword_loc };
15070 let length = unsafe { (*pointer).length };
15071 if length == 0 {
15072 None
15073 } else {
15074 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15075 }
15076 }
15077
15078 #[must_use]
15080 pub fn closing_loc(&self) -> Option<Location<'pr>> {
15081 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
15082 let length = unsafe { (*pointer).length };
15083 if length == 0 {
15084 None
15085 } else {
15086 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15087 }
15088 }
15089
15090 #[must_use]
15092 pub fn predicate(&self) -> Node<'pr> {
15093 let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
15094 Node::new(self.parser, node)
15095 }
15096
15097 #[must_use]
15099 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
15100 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
15101 if node.is_null() {
15102 None
15103 } else {
15104 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
15105 }
15106 }
15107}
15108
15109impl std::fmt::Debug for UntilNode<'_> {
15110 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15111 write!(f, "UntilNode({:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.do_keyword_loc(), self.closing_loc(), self.predicate(), self.statements())
15112 }
15113}
15114
15115pub struct WhenNode<'pr> {
15124 parser: *const pm_parser_t,
15126
15127 pointer: *mut pm_when_node_t,
15129
15130 marker: PhantomData<&'pr mut pm_when_node_t>
15132}
15133
15134impl<'pr> WhenNode<'pr> {
15135 #[must_use]
15137 pub const fn as_node(&self) -> Node<'pr> {
15138 Node::WhenNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
15139 }
15140
15141 #[must_use]
15143 pub fn location(&self) -> Location<'pr> {
15144 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
15145 Location::new(self.parser, unsafe { &(*pointer) })
15146 }
15147
15148 #[must_use]
15150 pub fn flags(&self) -> pm_node_flags_t {
15151 unsafe { (*self.pointer).base.flags }
15152 }
15153
15154 #[must_use]
15156 pub fn keyword_loc(&self) -> Location<'pr> {
15157 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
15158 Location::new(self.parser, unsafe { &(*pointer) })
15159 }
15160
15161 #[must_use]
15163 pub fn conditions(&self) -> NodeList<'pr> {
15164 let pointer: *mut pm_node_list = unsafe { &raw mut (*self.pointer).conditions };
15165 NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
15166 }
15167
15168 #[must_use]
15170 pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
15171 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).then_keyword_loc };
15172 let length = unsafe { (*pointer).length };
15173 if length == 0 {
15174 None
15175 } else {
15176 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15177 }
15178 }
15179
15180 #[must_use]
15182 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
15183 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
15184 if node.is_null() {
15185 None
15186 } else {
15187 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
15188 }
15189 }
15190}
15191
15192impl std::fmt::Debug for WhenNode<'_> {
15193 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15194 write!(f, "WhenNode({:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.conditions(), self.then_keyword_loc(), self.statements())
15195 }
15196}
15197
15198pub struct WhileNode<'pr> {
15210 parser: *const pm_parser_t,
15212
15213 pointer: *mut pm_while_node_t,
15215
15216 marker: PhantomData<&'pr mut pm_while_node_t>
15218}
15219
15220impl<'pr> WhileNode<'pr> {
15221 #[must_use]
15223 pub const fn as_node(&self) -> Node<'pr> {
15224 Node::WhileNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
15225 }
15226
15227 #[must_use]
15229 pub fn location(&self) -> Location<'pr> {
15230 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
15231 Location::new(self.parser, unsafe { &(*pointer) })
15232 }
15233
15234 #[must_use]
15236 pub fn flags(&self) -> pm_node_flags_t {
15237 unsafe { (*self.pointer).base.flags }
15238 }
15239
15240 #[must_use]
15242 pub fn is_begin_modifier(&self) -> bool {
15243 (self.flags() & PM_LOOP_FLAGS_BEGIN_MODIFIER) != 0
15244 }
15245
15246 #[must_use]
15248 pub fn keyword_loc(&self) -> Location<'pr> {
15249 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
15250 Location::new(self.parser, unsafe { &(*pointer) })
15251 }
15252
15253 #[must_use]
15255 pub fn do_keyword_loc(&self) -> Option<Location<'pr>> {
15256 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).do_keyword_loc };
15257 let length = unsafe { (*pointer).length };
15258 if length == 0 {
15259 None
15260 } else {
15261 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15262 }
15263 }
15264
15265 #[must_use]
15267 pub fn closing_loc(&self) -> Option<Location<'pr>> {
15268 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
15269 let length = unsafe { (*pointer).length };
15270 if length == 0 {
15271 None
15272 } else {
15273 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15274 }
15275 }
15276
15277 #[must_use]
15279 pub fn predicate(&self) -> Node<'pr> {
15280 let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
15281 Node::new(self.parser, node)
15282 }
15283
15284 #[must_use]
15286 pub fn statements(&self) -> Option<StatementsNode<'pr>> {
15287 let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
15288 if node.is_null() {
15289 None
15290 } else {
15291 Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
15292 }
15293 }
15294}
15295
15296impl std::fmt::Debug for WhileNode<'_> {
15297 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15298 write!(f, "WhileNode({:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.do_keyword_loc(), self.closing_loc(), self.predicate(), self.statements())
15299 }
15300}
15301
15302pub struct XStringNode<'pr> {
15309 parser: *const pm_parser_t,
15311
15312 pointer: *mut pm_x_string_node_t,
15314
15315 marker: PhantomData<&'pr mut pm_x_string_node_t>
15317}
15318
15319impl<'pr> XStringNode<'pr> {
15320 #[must_use]
15322 pub const fn as_node(&self) -> Node<'pr> {
15323 Node::XStringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
15324 }
15325
15326 #[must_use]
15328 pub fn location(&self) -> Location<'pr> {
15329 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
15330 Location::new(self.parser, unsafe { &(*pointer) })
15331 }
15332
15333 #[must_use]
15335 pub fn flags(&self) -> pm_node_flags_t {
15336 unsafe { (*self.pointer).base.flags }
15337 }
15338
15339 #[must_use]
15341 pub fn is_forced_utf8_encoding(&self) -> bool {
15342 (self.flags() & PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING) != 0
15343 }
15344
15345 #[must_use]
15347 pub fn is_forced_binary_encoding(&self) -> bool {
15348 (self.flags() & PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING) != 0
15349 }
15350
15351 #[must_use]
15353 pub fn opening_loc(&self) -> Location<'pr> {
15354 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).opening_loc };
15355 Location::new(self.parser, unsafe { &(*pointer) })
15356 }
15357
15358 #[must_use]
15360 pub fn content_loc(&self) -> Location<'pr> {
15361 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).content_loc };
15362 Location::new(self.parser, unsafe { &(*pointer) })
15363 }
15364
15365 #[must_use]
15367 pub fn closing_loc(&self) -> Location<'pr> {
15368 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).closing_loc };
15369 Location::new(self.parser, unsafe { &(*pointer) })
15370 }
15371
15372 #[must_use]
15374 pub fn unescaped(&self) -> &[u8] {
15375 unsafe {
15376 let source = (*self.pointer).unescaped.source;
15377 if source.is_null() {
15378 return &[];
15379 }
15380 let length = (*self.pointer).unescaped.length;
15381 std::slice::from_raw_parts(source, length)
15382 }
15383 }
15384}
15385
15386impl std::fmt::Debug for XStringNode<'_> {
15387 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15388 write!(f, "XStringNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
15389 }
15390}
15391
15392pub struct YieldNode<'pr> {
15399 parser: *const pm_parser_t,
15401
15402 pointer: *mut pm_yield_node_t,
15404
15405 marker: PhantomData<&'pr mut pm_yield_node_t>
15407}
15408
15409impl<'pr> YieldNode<'pr> {
15410 #[must_use]
15412 pub const fn as_node(&self) -> Node<'pr> {
15413 Node::YieldNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
15414 }
15415
15416 #[must_use]
15418 pub fn location(&self) -> Location<'pr> {
15419 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).base.location };
15420 Location::new(self.parser, unsafe { &(*pointer) })
15421 }
15422
15423 #[must_use]
15425 pub fn flags(&self) -> pm_node_flags_t {
15426 unsafe { (*self.pointer).base.flags }
15427 }
15428
15429 #[must_use]
15431 pub fn keyword_loc(&self) -> Location<'pr> {
15432 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).keyword_loc };
15433 Location::new(self.parser, unsafe { &(*pointer) })
15434 }
15435
15436 #[must_use]
15438 pub fn lparen_loc(&self) -> Option<Location<'pr>> {
15439 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).lparen_loc };
15440 let length = unsafe { (*pointer).length };
15441 if length == 0 {
15442 None
15443 } else {
15444 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15445 }
15446 }
15447
15448 #[must_use]
15450 pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
15451 let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
15452 if node.is_null() {
15453 None
15454 } else {
15455 Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
15456 }
15457 }
15458
15459 #[must_use]
15461 pub fn rparen_loc(&self) -> Option<Location<'pr>> {
15462 let pointer: *mut pm_location_t = unsafe { &raw mut (*self.pointer).rparen_loc };
15463 let length = unsafe { (*pointer).length };
15464 if length == 0 {
15465 None
15466 } else {
15467 Some(Location::new(self.parser, unsafe { &(*pointer) }))
15468 }
15469 }
15470}
15471
15472impl std::fmt::Debug for YieldNode<'_> {
15473 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15474 write!(f, "YieldNode({:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.lparen_loc(), self.arguments(), self.rparen_loc())
15475 }
15476}
15477
15478pub trait Visit<'pr> {
15480 fn visit_branch_node_enter(&mut self, _node: Node<'pr>) {
15482 }
15483
15484 fn visit_branch_node_leave(&mut self) {
15486 }
15487
15488 fn visit_leaf_node_enter(&mut self, _node: Node<'pr>) {
15490 }
15491
15492 fn visit_leaf_node_leave(&mut self) {
15494 }
15495
15496 fn visit(&mut self, node: &Node<'pr>) {
15498 match node {
15499 Node::AliasGlobalVariableNode { parser, pointer, marker } => {
15500 let concrete = AliasGlobalVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
15501 self.visit_branch_node_enter(concrete.as_node());
15502 self.visit_alias_global_variable_node(&concrete);
15503 self.visit_branch_node_leave();
15504 }
15505 Node::AliasMethodNode { parser, pointer, marker } => {
15506 let concrete = AliasMethodNode { parser: *parser, pointer: *pointer, marker: *marker };
15507 self.visit_branch_node_enter(concrete.as_node());
15508 self.visit_alias_method_node(&concrete);
15509 self.visit_branch_node_leave();
15510 }
15511 Node::AlternationPatternNode { parser, pointer, marker } => {
15512 let concrete = AlternationPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
15513 self.visit_branch_node_enter(concrete.as_node());
15514 self.visit_alternation_pattern_node(&concrete);
15515 self.visit_branch_node_leave();
15516 }
15517 Node::AndNode { parser, pointer, marker } => {
15518 let concrete = AndNode { parser: *parser, pointer: *pointer, marker: *marker };
15519 self.visit_branch_node_enter(concrete.as_node());
15520 self.visit_and_node(&concrete);
15521 self.visit_branch_node_leave();
15522 }
15523 Node::ArgumentsNode { parser, pointer, marker } => {
15524 let concrete = ArgumentsNode { parser: *parser, pointer: *pointer, marker: *marker };
15525 self.visit_branch_node_enter(concrete.as_node());
15526 self.visit_arguments_node(&concrete);
15527 self.visit_branch_node_leave();
15528 }
15529 Node::ArrayNode { parser, pointer, marker } => {
15530 let concrete = ArrayNode { parser: *parser, pointer: *pointer, marker: *marker };
15531 self.visit_branch_node_enter(concrete.as_node());
15532 self.visit_array_node(&concrete);
15533 self.visit_branch_node_leave();
15534 }
15535 Node::ArrayPatternNode { parser, pointer, marker } => {
15536 let concrete = ArrayPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
15537 self.visit_branch_node_enter(concrete.as_node());
15538 self.visit_array_pattern_node(&concrete);
15539 self.visit_branch_node_leave();
15540 }
15541 Node::AssocNode { parser, pointer, marker } => {
15542 let concrete = AssocNode { parser: *parser, pointer: *pointer, marker: *marker };
15543 self.visit_branch_node_enter(concrete.as_node());
15544 self.visit_assoc_node(&concrete);
15545 self.visit_branch_node_leave();
15546 }
15547 Node::AssocSplatNode { parser, pointer, marker } => {
15548 let concrete = AssocSplatNode { parser: *parser, pointer: *pointer, marker: *marker };
15549 self.visit_branch_node_enter(concrete.as_node());
15550 self.visit_assoc_splat_node(&concrete);
15551 self.visit_branch_node_leave();
15552 }
15553 Node::BackReferenceReadNode { parser, pointer, marker } => {
15554 let concrete = BackReferenceReadNode { parser: *parser, pointer: *pointer, marker: *marker };
15555 self.visit_leaf_node_enter(concrete.as_node());
15556 self.visit_back_reference_read_node(&concrete);
15557 self.visit_leaf_node_leave();
15558 }
15559 Node::BeginNode { parser, pointer, marker } => {
15560 let concrete = BeginNode { parser: *parser, pointer: *pointer, marker: *marker };
15561 self.visit_branch_node_enter(concrete.as_node());
15562 self.visit_begin_node(&concrete);
15563 self.visit_branch_node_leave();
15564 }
15565 Node::BlockArgumentNode { parser, pointer, marker } => {
15566 let concrete = BlockArgumentNode { parser: *parser, pointer: *pointer, marker: *marker };
15567 self.visit_branch_node_enter(concrete.as_node());
15568 self.visit_block_argument_node(&concrete);
15569 self.visit_branch_node_leave();
15570 }
15571 Node::BlockLocalVariableNode { parser, pointer, marker } => {
15572 let concrete = BlockLocalVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
15573 self.visit_leaf_node_enter(concrete.as_node());
15574 self.visit_block_local_variable_node(&concrete);
15575 self.visit_leaf_node_leave();
15576 }
15577 Node::BlockNode { parser, pointer, marker } => {
15578 let concrete = BlockNode { parser: *parser, pointer: *pointer, marker: *marker };
15579 self.visit_branch_node_enter(concrete.as_node());
15580 self.visit_block_node(&concrete);
15581 self.visit_branch_node_leave();
15582 }
15583 Node::BlockParameterNode { parser, pointer, marker } => {
15584 let concrete = BlockParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
15585 self.visit_leaf_node_enter(concrete.as_node());
15586 self.visit_block_parameter_node(&concrete);
15587 self.visit_leaf_node_leave();
15588 }
15589 Node::BlockParametersNode { parser, pointer, marker } => {
15590 let concrete = BlockParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
15591 self.visit_branch_node_enter(concrete.as_node());
15592 self.visit_block_parameters_node(&concrete);
15593 self.visit_branch_node_leave();
15594 }
15595 Node::BreakNode { parser, pointer, marker } => {
15596 let concrete = BreakNode { parser: *parser, pointer: *pointer, marker: *marker };
15597 self.visit_branch_node_enter(concrete.as_node());
15598 self.visit_break_node(&concrete);
15599 self.visit_branch_node_leave();
15600 }
15601 Node::CallAndWriteNode { parser, pointer, marker } => {
15602 let concrete = CallAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15603 self.visit_branch_node_enter(concrete.as_node());
15604 self.visit_call_and_write_node(&concrete);
15605 self.visit_branch_node_leave();
15606 }
15607 Node::CallNode { parser, pointer, marker } => {
15608 let concrete = CallNode { parser: *parser, pointer: *pointer, marker: *marker };
15609 self.visit_branch_node_enter(concrete.as_node());
15610 self.visit_call_node(&concrete);
15611 self.visit_branch_node_leave();
15612 }
15613 Node::CallOperatorWriteNode { parser, pointer, marker } => {
15614 let concrete = CallOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15615 self.visit_branch_node_enter(concrete.as_node());
15616 self.visit_call_operator_write_node(&concrete);
15617 self.visit_branch_node_leave();
15618 }
15619 Node::CallOrWriteNode { parser, pointer, marker } => {
15620 let concrete = CallOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15621 self.visit_branch_node_enter(concrete.as_node());
15622 self.visit_call_or_write_node(&concrete);
15623 self.visit_branch_node_leave();
15624 }
15625 Node::CallTargetNode { parser, pointer, marker } => {
15626 let concrete = CallTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15627 self.visit_branch_node_enter(concrete.as_node());
15628 self.visit_call_target_node(&concrete);
15629 self.visit_branch_node_leave();
15630 }
15631 Node::CapturePatternNode { parser, pointer, marker } => {
15632 let concrete = CapturePatternNode { parser: *parser, pointer: *pointer, marker: *marker };
15633 self.visit_branch_node_enter(concrete.as_node());
15634 self.visit_capture_pattern_node(&concrete);
15635 self.visit_branch_node_leave();
15636 }
15637 Node::CaseMatchNode { parser, pointer, marker } => {
15638 let concrete = CaseMatchNode { parser: *parser, pointer: *pointer, marker: *marker };
15639 self.visit_branch_node_enter(concrete.as_node());
15640 self.visit_case_match_node(&concrete);
15641 self.visit_branch_node_leave();
15642 }
15643 Node::CaseNode { parser, pointer, marker } => {
15644 let concrete = CaseNode { parser: *parser, pointer: *pointer, marker: *marker };
15645 self.visit_branch_node_enter(concrete.as_node());
15646 self.visit_case_node(&concrete);
15647 self.visit_branch_node_leave();
15648 }
15649 Node::ClassNode { parser, pointer, marker } => {
15650 let concrete = ClassNode { parser: *parser, pointer: *pointer, marker: *marker };
15651 self.visit_branch_node_enter(concrete.as_node());
15652 self.visit_class_node(&concrete);
15653 self.visit_branch_node_leave();
15654 }
15655 Node::ClassVariableAndWriteNode { parser, pointer, marker } => {
15656 let concrete = ClassVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15657 self.visit_branch_node_enter(concrete.as_node());
15658 self.visit_class_variable_and_write_node(&concrete);
15659 self.visit_branch_node_leave();
15660 }
15661 Node::ClassVariableOperatorWriteNode { parser, pointer, marker } => {
15662 let concrete = ClassVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15663 self.visit_branch_node_enter(concrete.as_node());
15664 self.visit_class_variable_operator_write_node(&concrete);
15665 self.visit_branch_node_leave();
15666 }
15667 Node::ClassVariableOrWriteNode { parser, pointer, marker } => {
15668 let concrete = ClassVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15669 self.visit_branch_node_enter(concrete.as_node());
15670 self.visit_class_variable_or_write_node(&concrete);
15671 self.visit_branch_node_leave();
15672 }
15673 Node::ClassVariableReadNode { parser, pointer, marker } => {
15674 let concrete = ClassVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
15675 self.visit_leaf_node_enter(concrete.as_node());
15676 self.visit_class_variable_read_node(&concrete);
15677 self.visit_leaf_node_leave();
15678 }
15679 Node::ClassVariableTargetNode { parser, pointer, marker } => {
15680 let concrete = ClassVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15681 self.visit_leaf_node_enter(concrete.as_node());
15682 self.visit_class_variable_target_node(&concrete);
15683 self.visit_leaf_node_leave();
15684 }
15685 Node::ClassVariableWriteNode { parser, pointer, marker } => {
15686 let concrete = ClassVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15687 self.visit_branch_node_enter(concrete.as_node());
15688 self.visit_class_variable_write_node(&concrete);
15689 self.visit_branch_node_leave();
15690 }
15691 Node::ConstantAndWriteNode { parser, pointer, marker } => {
15692 let concrete = ConstantAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15693 self.visit_branch_node_enter(concrete.as_node());
15694 self.visit_constant_and_write_node(&concrete);
15695 self.visit_branch_node_leave();
15696 }
15697 Node::ConstantOperatorWriteNode { parser, pointer, marker } => {
15698 let concrete = ConstantOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15699 self.visit_branch_node_enter(concrete.as_node());
15700 self.visit_constant_operator_write_node(&concrete);
15701 self.visit_branch_node_leave();
15702 }
15703 Node::ConstantOrWriteNode { parser, pointer, marker } => {
15704 let concrete = ConstantOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15705 self.visit_branch_node_enter(concrete.as_node());
15706 self.visit_constant_or_write_node(&concrete);
15707 self.visit_branch_node_leave();
15708 }
15709 Node::ConstantPathAndWriteNode { parser, pointer, marker } => {
15710 let concrete = ConstantPathAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15711 self.visit_branch_node_enter(concrete.as_node());
15712 self.visit_constant_path_and_write_node(&concrete);
15713 self.visit_branch_node_leave();
15714 }
15715 Node::ConstantPathNode { parser, pointer, marker } => {
15716 let concrete = ConstantPathNode { parser: *parser, pointer: *pointer, marker: *marker };
15717 self.visit_branch_node_enter(concrete.as_node());
15718 self.visit_constant_path_node(&concrete);
15719 self.visit_branch_node_leave();
15720 }
15721 Node::ConstantPathOperatorWriteNode { parser, pointer, marker } => {
15722 let concrete = ConstantPathOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15723 self.visit_branch_node_enter(concrete.as_node());
15724 self.visit_constant_path_operator_write_node(&concrete);
15725 self.visit_branch_node_leave();
15726 }
15727 Node::ConstantPathOrWriteNode { parser, pointer, marker } => {
15728 let concrete = ConstantPathOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15729 self.visit_branch_node_enter(concrete.as_node());
15730 self.visit_constant_path_or_write_node(&concrete);
15731 self.visit_branch_node_leave();
15732 }
15733 Node::ConstantPathTargetNode { parser, pointer, marker } => {
15734 let concrete = ConstantPathTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15735 self.visit_branch_node_enter(concrete.as_node());
15736 self.visit_constant_path_target_node(&concrete);
15737 self.visit_branch_node_leave();
15738 }
15739 Node::ConstantPathWriteNode { parser, pointer, marker } => {
15740 let concrete = ConstantPathWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15741 self.visit_branch_node_enter(concrete.as_node());
15742 self.visit_constant_path_write_node(&concrete);
15743 self.visit_branch_node_leave();
15744 }
15745 Node::ConstantReadNode { parser, pointer, marker } => {
15746 let concrete = ConstantReadNode { parser: *parser, pointer: *pointer, marker: *marker };
15747 self.visit_leaf_node_enter(concrete.as_node());
15748 self.visit_constant_read_node(&concrete);
15749 self.visit_leaf_node_leave();
15750 }
15751 Node::ConstantTargetNode { parser, pointer, marker } => {
15752 let concrete = ConstantTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15753 self.visit_leaf_node_enter(concrete.as_node());
15754 self.visit_constant_target_node(&concrete);
15755 self.visit_leaf_node_leave();
15756 }
15757 Node::ConstantWriteNode { parser, pointer, marker } => {
15758 let concrete = ConstantWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15759 self.visit_branch_node_enter(concrete.as_node());
15760 self.visit_constant_write_node(&concrete);
15761 self.visit_branch_node_leave();
15762 }
15763 Node::DefNode { parser, pointer, marker } => {
15764 let concrete = DefNode { parser: *parser, pointer: *pointer, marker: *marker };
15765 self.visit_branch_node_enter(concrete.as_node());
15766 self.visit_def_node(&concrete);
15767 self.visit_branch_node_leave();
15768 }
15769 Node::DefinedNode { parser, pointer, marker } => {
15770 let concrete = DefinedNode { parser: *parser, pointer: *pointer, marker: *marker };
15771 self.visit_branch_node_enter(concrete.as_node());
15772 self.visit_defined_node(&concrete);
15773 self.visit_branch_node_leave();
15774 }
15775 Node::ElseNode { parser, pointer, marker } => {
15776 let concrete = ElseNode { parser: *parser, pointer: *pointer, marker: *marker };
15777 self.visit_branch_node_enter(concrete.as_node());
15778 self.visit_else_node(&concrete);
15779 self.visit_branch_node_leave();
15780 }
15781 Node::EmbeddedStatementsNode { parser, pointer, marker } => {
15782 let concrete = EmbeddedStatementsNode { parser: *parser, pointer: *pointer, marker: *marker };
15783 self.visit_branch_node_enter(concrete.as_node());
15784 self.visit_embedded_statements_node(&concrete);
15785 self.visit_branch_node_leave();
15786 }
15787 Node::EmbeddedVariableNode { parser, pointer, marker } => {
15788 let concrete = EmbeddedVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
15789 self.visit_branch_node_enter(concrete.as_node());
15790 self.visit_embedded_variable_node(&concrete);
15791 self.visit_branch_node_leave();
15792 }
15793 Node::EnsureNode { parser, pointer, marker } => {
15794 let concrete = EnsureNode { parser: *parser, pointer: *pointer, marker: *marker };
15795 self.visit_branch_node_enter(concrete.as_node());
15796 self.visit_ensure_node(&concrete);
15797 self.visit_branch_node_leave();
15798 }
15799 Node::ErrorRecoveryNode { parser, pointer, marker } => {
15800 let concrete = ErrorRecoveryNode { parser: *parser, pointer: *pointer, marker: *marker };
15801 self.visit_branch_node_enter(concrete.as_node());
15802 self.visit_error_recovery_node(&concrete);
15803 self.visit_branch_node_leave();
15804 }
15805 Node::FalseNode { parser, pointer, marker } => {
15806 let concrete = FalseNode { parser: *parser, pointer: *pointer, marker: *marker };
15807 self.visit_leaf_node_enter(concrete.as_node());
15808 self.visit_false_node(&concrete);
15809 self.visit_leaf_node_leave();
15810 }
15811 Node::FindPatternNode { parser, pointer, marker } => {
15812 let concrete = FindPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
15813 self.visit_branch_node_enter(concrete.as_node());
15814 self.visit_find_pattern_node(&concrete);
15815 self.visit_branch_node_leave();
15816 }
15817 Node::FlipFlopNode { parser, pointer, marker } => {
15818 let concrete = FlipFlopNode { parser: *parser, pointer: *pointer, marker: *marker };
15819 self.visit_branch_node_enter(concrete.as_node());
15820 self.visit_flip_flop_node(&concrete);
15821 self.visit_branch_node_leave();
15822 }
15823 Node::FloatNode { parser, pointer, marker } => {
15824 let concrete = FloatNode { parser: *parser, pointer: *pointer, marker: *marker };
15825 self.visit_leaf_node_enter(concrete.as_node());
15826 self.visit_float_node(&concrete);
15827 self.visit_leaf_node_leave();
15828 }
15829 Node::ForNode { parser, pointer, marker } => {
15830 let concrete = ForNode { parser: *parser, pointer: *pointer, marker: *marker };
15831 self.visit_branch_node_enter(concrete.as_node());
15832 self.visit_for_node(&concrete);
15833 self.visit_branch_node_leave();
15834 }
15835 Node::ForwardingArgumentsNode { parser, pointer, marker } => {
15836 let concrete = ForwardingArgumentsNode { parser: *parser, pointer: *pointer, marker: *marker };
15837 self.visit_leaf_node_enter(concrete.as_node());
15838 self.visit_forwarding_arguments_node(&concrete);
15839 self.visit_leaf_node_leave();
15840 }
15841 Node::ForwardingParameterNode { parser, pointer, marker } => {
15842 let concrete = ForwardingParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
15843 self.visit_leaf_node_enter(concrete.as_node());
15844 self.visit_forwarding_parameter_node(&concrete);
15845 self.visit_leaf_node_leave();
15846 }
15847 Node::ForwardingSuperNode { parser, pointer, marker } => {
15848 let concrete = ForwardingSuperNode { parser: *parser, pointer: *pointer, marker: *marker };
15849 self.visit_branch_node_enter(concrete.as_node());
15850 self.visit_forwarding_super_node(&concrete);
15851 self.visit_branch_node_leave();
15852 }
15853 Node::GlobalVariableAndWriteNode { parser, pointer, marker } => {
15854 let concrete = GlobalVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15855 self.visit_branch_node_enter(concrete.as_node());
15856 self.visit_global_variable_and_write_node(&concrete);
15857 self.visit_branch_node_leave();
15858 }
15859 Node::GlobalVariableOperatorWriteNode { parser, pointer, marker } => {
15860 let concrete = GlobalVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15861 self.visit_branch_node_enter(concrete.as_node());
15862 self.visit_global_variable_operator_write_node(&concrete);
15863 self.visit_branch_node_leave();
15864 }
15865 Node::GlobalVariableOrWriteNode { parser, pointer, marker } => {
15866 let concrete = GlobalVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15867 self.visit_branch_node_enter(concrete.as_node());
15868 self.visit_global_variable_or_write_node(&concrete);
15869 self.visit_branch_node_leave();
15870 }
15871 Node::GlobalVariableReadNode { parser, pointer, marker } => {
15872 let concrete = GlobalVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
15873 self.visit_leaf_node_enter(concrete.as_node());
15874 self.visit_global_variable_read_node(&concrete);
15875 self.visit_leaf_node_leave();
15876 }
15877 Node::GlobalVariableTargetNode { parser, pointer, marker } => {
15878 let concrete = GlobalVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15879 self.visit_leaf_node_enter(concrete.as_node());
15880 self.visit_global_variable_target_node(&concrete);
15881 self.visit_leaf_node_leave();
15882 }
15883 Node::GlobalVariableWriteNode { parser, pointer, marker } => {
15884 let concrete = GlobalVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15885 self.visit_branch_node_enter(concrete.as_node());
15886 self.visit_global_variable_write_node(&concrete);
15887 self.visit_branch_node_leave();
15888 }
15889 Node::HashNode { parser, pointer, marker } => {
15890 let concrete = HashNode { parser: *parser, pointer: *pointer, marker: *marker };
15891 self.visit_branch_node_enter(concrete.as_node());
15892 self.visit_hash_node(&concrete);
15893 self.visit_branch_node_leave();
15894 }
15895 Node::HashPatternNode { parser, pointer, marker } => {
15896 let concrete = HashPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
15897 self.visit_branch_node_enter(concrete.as_node());
15898 self.visit_hash_pattern_node(&concrete);
15899 self.visit_branch_node_leave();
15900 }
15901 Node::IfNode { parser, pointer, marker } => {
15902 let concrete = IfNode { parser: *parser, pointer: *pointer, marker: *marker };
15903 self.visit_branch_node_enter(concrete.as_node());
15904 self.visit_if_node(&concrete);
15905 self.visit_branch_node_leave();
15906 }
15907 Node::ImaginaryNode { parser, pointer, marker } => {
15908 let concrete = ImaginaryNode { parser: *parser, pointer: *pointer, marker: *marker };
15909 self.visit_branch_node_enter(concrete.as_node());
15910 self.visit_imaginary_node(&concrete);
15911 self.visit_branch_node_leave();
15912 }
15913 Node::ImplicitNode { parser, pointer, marker } => {
15914 let concrete = ImplicitNode { parser: *parser, pointer: *pointer, marker: *marker };
15915 self.visit_branch_node_enter(concrete.as_node());
15916 self.visit_implicit_node(&concrete);
15917 self.visit_branch_node_leave();
15918 }
15919 Node::ImplicitRestNode { parser, pointer, marker } => {
15920 let concrete = ImplicitRestNode { parser: *parser, pointer: *pointer, marker: *marker };
15921 self.visit_leaf_node_enter(concrete.as_node());
15922 self.visit_implicit_rest_node(&concrete);
15923 self.visit_leaf_node_leave();
15924 }
15925 Node::InNode { parser, pointer, marker } => {
15926 let concrete = InNode { parser: *parser, pointer: *pointer, marker: *marker };
15927 self.visit_branch_node_enter(concrete.as_node());
15928 self.visit_in_node(&concrete);
15929 self.visit_branch_node_leave();
15930 }
15931 Node::IndexAndWriteNode { parser, pointer, marker } => {
15932 let concrete = IndexAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15933 self.visit_branch_node_enter(concrete.as_node());
15934 self.visit_index_and_write_node(&concrete);
15935 self.visit_branch_node_leave();
15936 }
15937 Node::IndexOperatorWriteNode { parser, pointer, marker } => {
15938 let concrete = IndexOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15939 self.visit_branch_node_enter(concrete.as_node());
15940 self.visit_index_operator_write_node(&concrete);
15941 self.visit_branch_node_leave();
15942 }
15943 Node::IndexOrWriteNode { parser, pointer, marker } => {
15944 let concrete = IndexOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15945 self.visit_branch_node_enter(concrete.as_node());
15946 self.visit_index_or_write_node(&concrete);
15947 self.visit_branch_node_leave();
15948 }
15949 Node::IndexTargetNode { parser, pointer, marker } => {
15950 let concrete = IndexTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15951 self.visit_branch_node_enter(concrete.as_node());
15952 self.visit_index_target_node(&concrete);
15953 self.visit_branch_node_leave();
15954 }
15955 Node::InstanceVariableAndWriteNode { parser, pointer, marker } => {
15956 let concrete = InstanceVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15957 self.visit_branch_node_enter(concrete.as_node());
15958 self.visit_instance_variable_and_write_node(&concrete);
15959 self.visit_branch_node_leave();
15960 }
15961 Node::InstanceVariableOperatorWriteNode { parser, pointer, marker } => {
15962 let concrete = InstanceVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15963 self.visit_branch_node_enter(concrete.as_node());
15964 self.visit_instance_variable_operator_write_node(&concrete);
15965 self.visit_branch_node_leave();
15966 }
15967 Node::InstanceVariableOrWriteNode { parser, pointer, marker } => {
15968 let concrete = InstanceVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15969 self.visit_branch_node_enter(concrete.as_node());
15970 self.visit_instance_variable_or_write_node(&concrete);
15971 self.visit_branch_node_leave();
15972 }
15973 Node::InstanceVariableReadNode { parser, pointer, marker } => {
15974 let concrete = InstanceVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
15975 self.visit_leaf_node_enter(concrete.as_node());
15976 self.visit_instance_variable_read_node(&concrete);
15977 self.visit_leaf_node_leave();
15978 }
15979 Node::InstanceVariableTargetNode { parser, pointer, marker } => {
15980 let concrete = InstanceVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
15981 self.visit_leaf_node_enter(concrete.as_node());
15982 self.visit_instance_variable_target_node(&concrete);
15983 self.visit_leaf_node_leave();
15984 }
15985 Node::InstanceVariableWriteNode { parser, pointer, marker } => {
15986 let concrete = InstanceVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
15987 self.visit_branch_node_enter(concrete.as_node());
15988 self.visit_instance_variable_write_node(&concrete);
15989 self.visit_branch_node_leave();
15990 }
15991 Node::IntegerNode { parser, pointer, marker } => {
15992 let concrete = IntegerNode { parser: *parser, pointer: *pointer, marker: *marker };
15993 self.visit_leaf_node_enter(concrete.as_node());
15994 self.visit_integer_node(&concrete);
15995 self.visit_leaf_node_leave();
15996 }
15997 Node::InterpolatedMatchLastLineNode { parser, pointer, marker } => {
15998 let concrete = InterpolatedMatchLastLineNode { parser: *parser, pointer: *pointer, marker: *marker };
15999 self.visit_branch_node_enter(concrete.as_node());
16000 self.visit_interpolated_match_last_line_node(&concrete);
16001 self.visit_branch_node_leave();
16002 }
16003 Node::InterpolatedRegularExpressionNode { parser, pointer, marker } => {
16004 let concrete = InterpolatedRegularExpressionNode { parser: *parser, pointer: *pointer, marker: *marker };
16005 self.visit_branch_node_enter(concrete.as_node());
16006 self.visit_interpolated_regular_expression_node(&concrete);
16007 self.visit_branch_node_leave();
16008 }
16009 Node::InterpolatedStringNode { parser, pointer, marker } => {
16010 let concrete = InterpolatedStringNode { parser: *parser, pointer: *pointer, marker: *marker };
16011 self.visit_branch_node_enter(concrete.as_node());
16012 self.visit_interpolated_string_node(&concrete);
16013 self.visit_branch_node_leave();
16014 }
16015 Node::InterpolatedSymbolNode { parser, pointer, marker } => {
16016 let concrete = InterpolatedSymbolNode { parser: *parser, pointer: *pointer, marker: *marker };
16017 self.visit_branch_node_enter(concrete.as_node());
16018 self.visit_interpolated_symbol_node(&concrete);
16019 self.visit_branch_node_leave();
16020 }
16021 Node::InterpolatedXStringNode { parser, pointer, marker } => {
16022 let concrete = InterpolatedXStringNode { parser: *parser, pointer: *pointer, marker: *marker };
16023 self.visit_branch_node_enter(concrete.as_node());
16024 self.visit_interpolated_x_string_node(&concrete);
16025 self.visit_branch_node_leave();
16026 }
16027 Node::ItLocalVariableReadNode { parser, pointer, marker } => {
16028 let concrete = ItLocalVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
16029 self.visit_leaf_node_enter(concrete.as_node());
16030 self.visit_it_local_variable_read_node(&concrete);
16031 self.visit_leaf_node_leave();
16032 }
16033 Node::ItParametersNode { parser, pointer, marker } => {
16034 let concrete = ItParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
16035 self.visit_leaf_node_enter(concrete.as_node());
16036 self.visit_it_parameters_node(&concrete);
16037 self.visit_leaf_node_leave();
16038 }
16039 Node::KeywordHashNode { parser, pointer, marker } => {
16040 let concrete = KeywordHashNode { parser: *parser, pointer: *pointer, marker: *marker };
16041 self.visit_branch_node_enter(concrete.as_node());
16042 self.visit_keyword_hash_node(&concrete);
16043 self.visit_branch_node_leave();
16044 }
16045 Node::KeywordRestParameterNode { parser, pointer, marker } => {
16046 let concrete = KeywordRestParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16047 self.visit_leaf_node_enter(concrete.as_node());
16048 self.visit_keyword_rest_parameter_node(&concrete);
16049 self.visit_leaf_node_leave();
16050 }
16051 Node::LambdaNode { parser, pointer, marker } => {
16052 let concrete = LambdaNode { parser: *parser, pointer: *pointer, marker: *marker };
16053 self.visit_branch_node_enter(concrete.as_node());
16054 self.visit_lambda_node(&concrete);
16055 self.visit_branch_node_leave();
16056 }
16057 Node::LocalVariableAndWriteNode { parser, pointer, marker } => {
16058 let concrete = LocalVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
16059 self.visit_branch_node_enter(concrete.as_node());
16060 self.visit_local_variable_and_write_node(&concrete);
16061 self.visit_branch_node_leave();
16062 }
16063 Node::LocalVariableOperatorWriteNode { parser, pointer, marker } => {
16064 let concrete = LocalVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
16065 self.visit_branch_node_enter(concrete.as_node());
16066 self.visit_local_variable_operator_write_node(&concrete);
16067 self.visit_branch_node_leave();
16068 }
16069 Node::LocalVariableOrWriteNode { parser, pointer, marker } => {
16070 let concrete = LocalVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
16071 self.visit_branch_node_enter(concrete.as_node());
16072 self.visit_local_variable_or_write_node(&concrete);
16073 self.visit_branch_node_leave();
16074 }
16075 Node::LocalVariableReadNode { parser, pointer, marker } => {
16076 let concrete = LocalVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
16077 self.visit_leaf_node_enter(concrete.as_node());
16078 self.visit_local_variable_read_node(&concrete);
16079 self.visit_leaf_node_leave();
16080 }
16081 Node::LocalVariableTargetNode { parser, pointer, marker } => {
16082 let concrete = LocalVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
16083 self.visit_leaf_node_enter(concrete.as_node());
16084 self.visit_local_variable_target_node(&concrete);
16085 self.visit_leaf_node_leave();
16086 }
16087 Node::LocalVariableWriteNode { parser, pointer, marker } => {
16088 let concrete = LocalVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
16089 self.visit_branch_node_enter(concrete.as_node());
16090 self.visit_local_variable_write_node(&concrete);
16091 self.visit_branch_node_leave();
16092 }
16093 Node::MatchLastLineNode { parser, pointer, marker } => {
16094 let concrete = MatchLastLineNode { parser: *parser, pointer: *pointer, marker: *marker };
16095 self.visit_leaf_node_enter(concrete.as_node());
16096 self.visit_match_last_line_node(&concrete);
16097 self.visit_leaf_node_leave();
16098 }
16099 Node::MatchPredicateNode { parser, pointer, marker } => {
16100 let concrete = MatchPredicateNode { parser: *parser, pointer: *pointer, marker: *marker };
16101 self.visit_branch_node_enter(concrete.as_node());
16102 self.visit_match_predicate_node(&concrete);
16103 self.visit_branch_node_leave();
16104 }
16105 Node::MatchRequiredNode { parser, pointer, marker } => {
16106 let concrete = MatchRequiredNode { parser: *parser, pointer: *pointer, marker: *marker };
16107 self.visit_branch_node_enter(concrete.as_node());
16108 self.visit_match_required_node(&concrete);
16109 self.visit_branch_node_leave();
16110 }
16111 Node::MatchWriteNode { parser, pointer, marker } => {
16112 let concrete = MatchWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
16113 self.visit_branch_node_enter(concrete.as_node());
16114 self.visit_match_write_node(&concrete);
16115 self.visit_branch_node_leave();
16116 }
16117 Node::ModuleNode { parser, pointer, marker } => {
16118 let concrete = ModuleNode { parser: *parser, pointer: *pointer, marker: *marker };
16119 self.visit_branch_node_enter(concrete.as_node());
16120 self.visit_module_node(&concrete);
16121 self.visit_branch_node_leave();
16122 }
16123 Node::MultiTargetNode { parser, pointer, marker } => {
16124 let concrete = MultiTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
16125 self.visit_branch_node_enter(concrete.as_node());
16126 self.visit_multi_target_node(&concrete);
16127 self.visit_branch_node_leave();
16128 }
16129 Node::MultiWriteNode { parser, pointer, marker } => {
16130 let concrete = MultiWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
16131 self.visit_branch_node_enter(concrete.as_node());
16132 self.visit_multi_write_node(&concrete);
16133 self.visit_branch_node_leave();
16134 }
16135 Node::NextNode { parser, pointer, marker } => {
16136 let concrete = NextNode { parser: *parser, pointer: *pointer, marker: *marker };
16137 self.visit_branch_node_enter(concrete.as_node());
16138 self.visit_next_node(&concrete);
16139 self.visit_branch_node_leave();
16140 }
16141 Node::NilNode { parser, pointer, marker } => {
16142 let concrete = NilNode { parser: *parser, pointer: *pointer, marker: *marker };
16143 self.visit_leaf_node_enter(concrete.as_node());
16144 self.visit_nil_node(&concrete);
16145 self.visit_leaf_node_leave();
16146 }
16147 Node::NoBlockParameterNode { parser, pointer, marker } => {
16148 let concrete = NoBlockParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16149 self.visit_leaf_node_enter(concrete.as_node());
16150 self.visit_no_block_parameter_node(&concrete);
16151 self.visit_leaf_node_leave();
16152 }
16153 Node::NoKeywordsParameterNode { parser, pointer, marker } => {
16154 let concrete = NoKeywordsParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16155 self.visit_leaf_node_enter(concrete.as_node());
16156 self.visit_no_keywords_parameter_node(&concrete);
16157 self.visit_leaf_node_leave();
16158 }
16159 Node::NumberedParametersNode { parser, pointer, marker } => {
16160 let concrete = NumberedParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
16161 self.visit_leaf_node_enter(concrete.as_node());
16162 self.visit_numbered_parameters_node(&concrete);
16163 self.visit_leaf_node_leave();
16164 }
16165 Node::NumberedReferenceReadNode { parser, pointer, marker } => {
16166 let concrete = NumberedReferenceReadNode { parser: *parser, pointer: *pointer, marker: *marker };
16167 self.visit_leaf_node_enter(concrete.as_node());
16168 self.visit_numbered_reference_read_node(&concrete);
16169 self.visit_leaf_node_leave();
16170 }
16171 Node::OptionalKeywordParameterNode { parser, pointer, marker } => {
16172 let concrete = OptionalKeywordParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16173 self.visit_branch_node_enter(concrete.as_node());
16174 self.visit_optional_keyword_parameter_node(&concrete);
16175 self.visit_branch_node_leave();
16176 }
16177 Node::OptionalParameterNode { parser, pointer, marker } => {
16178 let concrete = OptionalParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16179 self.visit_branch_node_enter(concrete.as_node());
16180 self.visit_optional_parameter_node(&concrete);
16181 self.visit_branch_node_leave();
16182 }
16183 Node::OrNode { parser, pointer, marker } => {
16184 let concrete = OrNode { parser: *parser, pointer: *pointer, marker: *marker };
16185 self.visit_branch_node_enter(concrete.as_node());
16186 self.visit_or_node(&concrete);
16187 self.visit_branch_node_leave();
16188 }
16189 Node::ParametersNode { parser, pointer, marker } => {
16190 let concrete = ParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
16191 self.visit_branch_node_enter(concrete.as_node());
16192 self.visit_parameters_node(&concrete);
16193 self.visit_branch_node_leave();
16194 }
16195 Node::ParenthesesNode { parser, pointer, marker } => {
16196 let concrete = ParenthesesNode { parser: *parser, pointer: *pointer, marker: *marker };
16197 self.visit_branch_node_enter(concrete.as_node());
16198 self.visit_parentheses_node(&concrete);
16199 self.visit_branch_node_leave();
16200 }
16201 Node::PinnedExpressionNode { parser, pointer, marker } => {
16202 let concrete = PinnedExpressionNode { parser: *parser, pointer: *pointer, marker: *marker };
16203 self.visit_branch_node_enter(concrete.as_node());
16204 self.visit_pinned_expression_node(&concrete);
16205 self.visit_branch_node_leave();
16206 }
16207 Node::PinnedVariableNode { parser, pointer, marker } => {
16208 let concrete = PinnedVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
16209 self.visit_branch_node_enter(concrete.as_node());
16210 self.visit_pinned_variable_node(&concrete);
16211 self.visit_branch_node_leave();
16212 }
16213 Node::PostExecutionNode { parser, pointer, marker } => {
16214 let concrete = PostExecutionNode { parser: *parser, pointer: *pointer, marker: *marker };
16215 self.visit_branch_node_enter(concrete.as_node());
16216 self.visit_post_execution_node(&concrete);
16217 self.visit_branch_node_leave();
16218 }
16219 Node::PreExecutionNode { parser, pointer, marker } => {
16220 let concrete = PreExecutionNode { parser: *parser, pointer: *pointer, marker: *marker };
16221 self.visit_branch_node_enter(concrete.as_node());
16222 self.visit_pre_execution_node(&concrete);
16223 self.visit_branch_node_leave();
16224 }
16225 Node::ProgramNode { parser, pointer, marker } => {
16226 let concrete = ProgramNode { parser: *parser, pointer: *pointer, marker: *marker };
16227 self.visit_branch_node_enter(concrete.as_node());
16228 self.visit_program_node(&concrete);
16229 self.visit_branch_node_leave();
16230 }
16231 Node::RangeNode { parser, pointer, marker } => {
16232 let concrete = RangeNode { parser: *parser, pointer: *pointer, marker: *marker };
16233 self.visit_branch_node_enter(concrete.as_node());
16234 self.visit_range_node(&concrete);
16235 self.visit_branch_node_leave();
16236 }
16237 Node::RationalNode { parser, pointer, marker } => {
16238 let concrete = RationalNode { parser: *parser, pointer: *pointer, marker: *marker };
16239 self.visit_leaf_node_enter(concrete.as_node());
16240 self.visit_rational_node(&concrete);
16241 self.visit_leaf_node_leave();
16242 }
16243 Node::RedoNode { parser, pointer, marker } => {
16244 let concrete = RedoNode { parser: *parser, pointer: *pointer, marker: *marker };
16245 self.visit_leaf_node_enter(concrete.as_node());
16246 self.visit_redo_node(&concrete);
16247 self.visit_leaf_node_leave();
16248 }
16249 Node::RegularExpressionNode { parser, pointer, marker } => {
16250 let concrete = RegularExpressionNode { parser: *parser, pointer: *pointer, marker: *marker };
16251 self.visit_leaf_node_enter(concrete.as_node());
16252 self.visit_regular_expression_node(&concrete);
16253 self.visit_leaf_node_leave();
16254 }
16255 Node::RequiredKeywordParameterNode { parser, pointer, marker } => {
16256 let concrete = RequiredKeywordParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16257 self.visit_leaf_node_enter(concrete.as_node());
16258 self.visit_required_keyword_parameter_node(&concrete);
16259 self.visit_leaf_node_leave();
16260 }
16261 Node::RequiredParameterNode { parser, pointer, marker } => {
16262 let concrete = RequiredParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16263 self.visit_leaf_node_enter(concrete.as_node());
16264 self.visit_required_parameter_node(&concrete);
16265 self.visit_leaf_node_leave();
16266 }
16267 Node::RescueModifierNode { parser, pointer, marker } => {
16268 let concrete = RescueModifierNode { parser: *parser, pointer: *pointer, marker: *marker };
16269 self.visit_branch_node_enter(concrete.as_node());
16270 self.visit_rescue_modifier_node(&concrete);
16271 self.visit_branch_node_leave();
16272 }
16273 Node::RescueNode { parser, pointer, marker } => {
16274 let concrete = RescueNode { parser: *parser, pointer: *pointer, marker: *marker };
16275 self.visit_branch_node_enter(concrete.as_node());
16276 self.visit_rescue_node(&concrete);
16277 self.visit_branch_node_leave();
16278 }
16279 Node::RestParameterNode { parser, pointer, marker } => {
16280 let concrete = RestParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
16281 self.visit_leaf_node_enter(concrete.as_node());
16282 self.visit_rest_parameter_node(&concrete);
16283 self.visit_leaf_node_leave();
16284 }
16285 Node::RetryNode { parser, pointer, marker } => {
16286 let concrete = RetryNode { parser: *parser, pointer: *pointer, marker: *marker };
16287 self.visit_leaf_node_enter(concrete.as_node());
16288 self.visit_retry_node(&concrete);
16289 self.visit_leaf_node_leave();
16290 }
16291 Node::ReturnNode { parser, pointer, marker } => {
16292 let concrete = ReturnNode { parser: *parser, pointer: *pointer, marker: *marker };
16293 self.visit_branch_node_enter(concrete.as_node());
16294 self.visit_return_node(&concrete);
16295 self.visit_branch_node_leave();
16296 }
16297 Node::SelfNode { parser, pointer, marker } => {
16298 let concrete = SelfNode { parser: *parser, pointer: *pointer, marker: *marker };
16299 self.visit_leaf_node_enter(concrete.as_node());
16300 self.visit_self_node(&concrete);
16301 self.visit_leaf_node_leave();
16302 }
16303 Node::ShareableConstantNode { parser, pointer, marker } => {
16304 let concrete = ShareableConstantNode { parser: *parser, pointer: *pointer, marker: *marker };
16305 self.visit_branch_node_enter(concrete.as_node());
16306 self.visit_shareable_constant_node(&concrete);
16307 self.visit_branch_node_leave();
16308 }
16309 Node::SingletonClassNode { parser, pointer, marker } => {
16310 let concrete = SingletonClassNode { parser: *parser, pointer: *pointer, marker: *marker };
16311 self.visit_branch_node_enter(concrete.as_node());
16312 self.visit_singleton_class_node(&concrete);
16313 self.visit_branch_node_leave();
16314 }
16315 Node::SourceEncodingNode { parser, pointer, marker } => {
16316 let concrete = SourceEncodingNode { parser: *parser, pointer: *pointer, marker: *marker };
16317 self.visit_leaf_node_enter(concrete.as_node());
16318 self.visit_source_encoding_node(&concrete);
16319 self.visit_leaf_node_leave();
16320 }
16321 Node::SourceFileNode { parser, pointer, marker } => {
16322 let concrete = SourceFileNode { parser: *parser, pointer: *pointer, marker: *marker };
16323 self.visit_leaf_node_enter(concrete.as_node());
16324 self.visit_source_file_node(&concrete);
16325 self.visit_leaf_node_leave();
16326 }
16327 Node::SourceLineNode { parser, pointer, marker } => {
16328 let concrete = SourceLineNode { parser: *parser, pointer: *pointer, marker: *marker };
16329 self.visit_leaf_node_enter(concrete.as_node());
16330 self.visit_source_line_node(&concrete);
16331 self.visit_leaf_node_leave();
16332 }
16333 Node::SplatNode { parser, pointer, marker } => {
16334 let concrete = SplatNode { parser: *parser, pointer: *pointer, marker: *marker };
16335 self.visit_branch_node_enter(concrete.as_node());
16336 self.visit_splat_node(&concrete);
16337 self.visit_branch_node_leave();
16338 }
16339 Node::StatementsNode { parser, pointer, marker } => {
16340 let concrete = StatementsNode { parser: *parser, pointer: *pointer, marker: *marker };
16341 self.visit_branch_node_enter(concrete.as_node());
16342 self.visit_statements_node(&concrete);
16343 self.visit_branch_node_leave();
16344 }
16345 Node::StringNode { parser, pointer, marker } => {
16346 let concrete = StringNode { parser: *parser, pointer: *pointer, marker: *marker };
16347 self.visit_leaf_node_enter(concrete.as_node());
16348 self.visit_string_node(&concrete);
16349 self.visit_leaf_node_leave();
16350 }
16351 Node::SuperNode { parser, pointer, marker } => {
16352 let concrete = SuperNode { parser: *parser, pointer: *pointer, marker: *marker };
16353 self.visit_branch_node_enter(concrete.as_node());
16354 self.visit_super_node(&concrete);
16355 self.visit_branch_node_leave();
16356 }
16357 Node::SymbolNode { parser, pointer, marker } => {
16358 let concrete = SymbolNode { parser: *parser, pointer: *pointer, marker: *marker };
16359 self.visit_leaf_node_enter(concrete.as_node());
16360 self.visit_symbol_node(&concrete);
16361 self.visit_leaf_node_leave();
16362 }
16363 Node::TrueNode { parser, pointer, marker } => {
16364 let concrete = TrueNode { parser: *parser, pointer: *pointer, marker: *marker };
16365 self.visit_leaf_node_enter(concrete.as_node());
16366 self.visit_true_node(&concrete);
16367 self.visit_leaf_node_leave();
16368 }
16369 Node::UndefNode { parser, pointer, marker } => {
16370 let concrete = UndefNode { parser: *parser, pointer: *pointer, marker: *marker };
16371 self.visit_branch_node_enter(concrete.as_node());
16372 self.visit_undef_node(&concrete);
16373 self.visit_branch_node_leave();
16374 }
16375 Node::UnlessNode { parser, pointer, marker } => {
16376 let concrete = UnlessNode { parser: *parser, pointer: *pointer, marker: *marker };
16377 self.visit_branch_node_enter(concrete.as_node());
16378 self.visit_unless_node(&concrete);
16379 self.visit_branch_node_leave();
16380 }
16381 Node::UntilNode { parser, pointer, marker } => {
16382 let concrete = UntilNode { parser: *parser, pointer: *pointer, marker: *marker };
16383 self.visit_branch_node_enter(concrete.as_node());
16384 self.visit_until_node(&concrete);
16385 self.visit_branch_node_leave();
16386 }
16387 Node::WhenNode { parser, pointer, marker } => {
16388 let concrete = WhenNode { parser: *parser, pointer: *pointer, marker: *marker };
16389 self.visit_branch_node_enter(concrete.as_node());
16390 self.visit_when_node(&concrete);
16391 self.visit_branch_node_leave();
16392 }
16393 Node::WhileNode { parser, pointer, marker } => {
16394 let concrete = WhileNode { parser: *parser, pointer: *pointer, marker: *marker };
16395 self.visit_branch_node_enter(concrete.as_node());
16396 self.visit_while_node(&concrete);
16397 self.visit_branch_node_leave();
16398 }
16399 Node::XStringNode { parser, pointer, marker } => {
16400 let concrete = XStringNode { parser: *parser, pointer: *pointer, marker: *marker };
16401 self.visit_leaf_node_enter(concrete.as_node());
16402 self.visit_x_string_node(&concrete);
16403 self.visit_leaf_node_leave();
16404 }
16405 Node::YieldNode { parser, pointer, marker } => {
16406 let concrete = YieldNode { parser: *parser, pointer: *pointer, marker: *marker };
16407 self.visit_branch_node_enter(concrete.as_node());
16408 self.visit_yield_node(&concrete);
16409 self.visit_branch_node_leave();
16410 }
16411 }
16412 }
16413
16414 fn visit_alias_global_variable_node(&mut self, node: &AliasGlobalVariableNode<'pr>) {
16416 visit_alias_global_variable_node(self, node);
16417 }
16418
16419 fn visit_alias_method_node(&mut self, node: &AliasMethodNode<'pr>) {
16421 visit_alias_method_node(self, node);
16422 }
16423
16424 fn visit_alternation_pattern_node(&mut self, node: &AlternationPatternNode<'pr>) {
16426 visit_alternation_pattern_node(self, node);
16427 }
16428
16429 fn visit_and_node(&mut self, node: &AndNode<'pr>) {
16431 visit_and_node(self, node);
16432 }
16433
16434 fn visit_arguments_node(&mut self, node: &ArgumentsNode<'pr>) {
16436 visit_arguments_node(self, node);
16437 }
16438
16439 fn visit_array_node(&mut self, node: &ArrayNode<'pr>) {
16441 visit_array_node(self, node);
16442 }
16443
16444 fn visit_array_pattern_node(&mut self, node: &ArrayPatternNode<'pr>) {
16446 visit_array_pattern_node(self, node);
16447 }
16448
16449 fn visit_assoc_node(&mut self, node: &AssocNode<'pr>) {
16451 visit_assoc_node(self, node);
16452 }
16453
16454 fn visit_assoc_splat_node(&mut self, node: &AssocSplatNode<'pr>) {
16456 visit_assoc_splat_node(self, node);
16457 }
16458
16459 fn visit_back_reference_read_node(&mut self, node: &BackReferenceReadNode<'pr>) {
16461 visit_back_reference_read_node(self, node);
16462 }
16463
16464 fn visit_begin_node(&mut self, node: &BeginNode<'pr>) {
16466 visit_begin_node(self, node);
16467 }
16468
16469 fn visit_block_argument_node(&mut self, node: &BlockArgumentNode<'pr>) {
16471 visit_block_argument_node(self, node);
16472 }
16473
16474 fn visit_block_local_variable_node(&mut self, node: &BlockLocalVariableNode<'pr>) {
16476 visit_block_local_variable_node(self, node);
16477 }
16478
16479 fn visit_block_node(&mut self, node: &BlockNode<'pr>) {
16481 visit_block_node(self, node);
16482 }
16483
16484 fn visit_block_parameter_node(&mut self, node: &BlockParameterNode<'pr>) {
16486 visit_block_parameter_node(self, node);
16487 }
16488
16489 fn visit_block_parameters_node(&mut self, node: &BlockParametersNode<'pr>) {
16491 visit_block_parameters_node(self, node);
16492 }
16493
16494 fn visit_break_node(&mut self, node: &BreakNode<'pr>) {
16496 visit_break_node(self, node);
16497 }
16498
16499 fn visit_call_and_write_node(&mut self, node: &CallAndWriteNode<'pr>) {
16501 visit_call_and_write_node(self, node);
16502 }
16503
16504 fn visit_call_node(&mut self, node: &CallNode<'pr>) {
16506 visit_call_node(self, node);
16507 }
16508
16509 fn visit_call_operator_write_node(&mut self, node: &CallOperatorWriteNode<'pr>) {
16511 visit_call_operator_write_node(self, node);
16512 }
16513
16514 fn visit_call_or_write_node(&mut self, node: &CallOrWriteNode<'pr>) {
16516 visit_call_or_write_node(self, node);
16517 }
16518
16519 fn visit_call_target_node(&mut self, node: &CallTargetNode<'pr>) {
16521 visit_call_target_node(self, node);
16522 }
16523
16524 fn visit_capture_pattern_node(&mut self, node: &CapturePatternNode<'pr>) {
16526 visit_capture_pattern_node(self, node);
16527 }
16528
16529 fn visit_case_match_node(&mut self, node: &CaseMatchNode<'pr>) {
16531 visit_case_match_node(self, node);
16532 }
16533
16534 fn visit_case_node(&mut self, node: &CaseNode<'pr>) {
16536 visit_case_node(self, node);
16537 }
16538
16539 fn visit_class_node(&mut self, node: &ClassNode<'pr>) {
16541 visit_class_node(self, node);
16542 }
16543
16544 fn visit_class_variable_and_write_node(&mut self, node: &ClassVariableAndWriteNode<'pr>) {
16546 visit_class_variable_and_write_node(self, node);
16547 }
16548
16549 fn visit_class_variable_operator_write_node(&mut self, node: &ClassVariableOperatorWriteNode<'pr>) {
16551 visit_class_variable_operator_write_node(self, node);
16552 }
16553
16554 fn visit_class_variable_or_write_node(&mut self, node: &ClassVariableOrWriteNode<'pr>) {
16556 visit_class_variable_or_write_node(self, node);
16557 }
16558
16559 fn visit_class_variable_read_node(&mut self, node: &ClassVariableReadNode<'pr>) {
16561 visit_class_variable_read_node(self, node);
16562 }
16563
16564 fn visit_class_variable_target_node(&mut self, node: &ClassVariableTargetNode<'pr>) {
16566 visit_class_variable_target_node(self, node);
16567 }
16568
16569 fn visit_class_variable_write_node(&mut self, node: &ClassVariableWriteNode<'pr>) {
16571 visit_class_variable_write_node(self, node);
16572 }
16573
16574 fn visit_constant_and_write_node(&mut self, node: &ConstantAndWriteNode<'pr>) {
16576 visit_constant_and_write_node(self, node);
16577 }
16578
16579 fn visit_constant_operator_write_node(&mut self, node: &ConstantOperatorWriteNode<'pr>) {
16581 visit_constant_operator_write_node(self, node);
16582 }
16583
16584 fn visit_constant_or_write_node(&mut self, node: &ConstantOrWriteNode<'pr>) {
16586 visit_constant_or_write_node(self, node);
16587 }
16588
16589 fn visit_constant_path_and_write_node(&mut self, node: &ConstantPathAndWriteNode<'pr>) {
16591 visit_constant_path_and_write_node(self, node);
16592 }
16593
16594 fn visit_constant_path_node(&mut self, node: &ConstantPathNode<'pr>) {
16596 visit_constant_path_node(self, node);
16597 }
16598
16599 fn visit_constant_path_operator_write_node(&mut self, node: &ConstantPathOperatorWriteNode<'pr>) {
16601 visit_constant_path_operator_write_node(self, node);
16602 }
16603
16604 fn visit_constant_path_or_write_node(&mut self, node: &ConstantPathOrWriteNode<'pr>) {
16606 visit_constant_path_or_write_node(self, node);
16607 }
16608
16609 fn visit_constant_path_target_node(&mut self, node: &ConstantPathTargetNode<'pr>) {
16611 visit_constant_path_target_node(self, node);
16612 }
16613
16614 fn visit_constant_path_write_node(&mut self, node: &ConstantPathWriteNode<'pr>) {
16616 visit_constant_path_write_node(self, node);
16617 }
16618
16619 fn visit_constant_read_node(&mut self, node: &ConstantReadNode<'pr>) {
16621 visit_constant_read_node(self, node);
16622 }
16623
16624 fn visit_constant_target_node(&mut self, node: &ConstantTargetNode<'pr>) {
16626 visit_constant_target_node(self, node);
16627 }
16628
16629 fn visit_constant_write_node(&mut self, node: &ConstantWriteNode<'pr>) {
16631 visit_constant_write_node(self, node);
16632 }
16633
16634 fn visit_def_node(&mut self, node: &DefNode<'pr>) {
16636 visit_def_node(self, node);
16637 }
16638
16639 fn visit_defined_node(&mut self, node: &DefinedNode<'pr>) {
16641 visit_defined_node(self, node);
16642 }
16643
16644 fn visit_else_node(&mut self, node: &ElseNode<'pr>) {
16646 visit_else_node(self, node);
16647 }
16648
16649 fn visit_embedded_statements_node(&mut self, node: &EmbeddedStatementsNode<'pr>) {
16651 visit_embedded_statements_node(self, node);
16652 }
16653
16654 fn visit_embedded_variable_node(&mut self, node: &EmbeddedVariableNode<'pr>) {
16656 visit_embedded_variable_node(self, node);
16657 }
16658
16659 fn visit_ensure_node(&mut self, node: &EnsureNode<'pr>) {
16661 visit_ensure_node(self, node);
16662 }
16663
16664 fn visit_error_recovery_node(&mut self, node: &ErrorRecoveryNode<'pr>) {
16666 visit_error_recovery_node(self, node);
16667 }
16668
16669 fn visit_false_node(&mut self, node: &FalseNode<'pr>) {
16671 visit_false_node(self, node);
16672 }
16673
16674 fn visit_find_pattern_node(&mut self, node: &FindPatternNode<'pr>) {
16676 visit_find_pattern_node(self, node);
16677 }
16678
16679 fn visit_flip_flop_node(&mut self, node: &FlipFlopNode<'pr>) {
16681 visit_flip_flop_node(self, node);
16682 }
16683
16684 fn visit_float_node(&mut self, node: &FloatNode<'pr>) {
16686 visit_float_node(self, node);
16687 }
16688
16689 fn visit_for_node(&mut self, node: &ForNode<'pr>) {
16691 visit_for_node(self, node);
16692 }
16693
16694 fn visit_forwarding_arguments_node(&mut self, node: &ForwardingArgumentsNode<'pr>) {
16696 visit_forwarding_arguments_node(self, node);
16697 }
16698
16699 fn visit_forwarding_parameter_node(&mut self, node: &ForwardingParameterNode<'pr>) {
16701 visit_forwarding_parameter_node(self, node);
16702 }
16703
16704 fn visit_forwarding_super_node(&mut self, node: &ForwardingSuperNode<'pr>) {
16706 visit_forwarding_super_node(self, node);
16707 }
16708
16709 fn visit_global_variable_and_write_node(&mut self, node: &GlobalVariableAndWriteNode<'pr>) {
16711 visit_global_variable_and_write_node(self, node);
16712 }
16713
16714 fn visit_global_variable_operator_write_node(&mut self, node: &GlobalVariableOperatorWriteNode<'pr>) {
16716 visit_global_variable_operator_write_node(self, node);
16717 }
16718
16719 fn visit_global_variable_or_write_node(&mut self, node: &GlobalVariableOrWriteNode<'pr>) {
16721 visit_global_variable_or_write_node(self, node);
16722 }
16723
16724 fn visit_global_variable_read_node(&mut self, node: &GlobalVariableReadNode<'pr>) {
16726 visit_global_variable_read_node(self, node);
16727 }
16728
16729 fn visit_global_variable_target_node(&mut self, node: &GlobalVariableTargetNode<'pr>) {
16731 visit_global_variable_target_node(self, node);
16732 }
16733
16734 fn visit_global_variable_write_node(&mut self, node: &GlobalVariableWriteNode<'pr>) {
16736 visit_global_variable_write_node(self, node);
16737 }
16738
16739 fn visit_hash_node(&mut self, node: &HashNode<'pr>) {
16741 visit_hash_node(self, node);
16742 }
16743
16744 fn visit_hash_pattern_node(&mut self, node: &HashPatternNode<'pr>) {
16746 visit_hash_pattern_node(self, node);
16747 }
16748
16749 fn visit_if_node(&mut self, node: &IfNode<'pr>) {
16751 visit_if_node(self, node);
16752 }
16753
16754 fn visit_imaginary_node(&mut self, node: &ImaginaryNode<'pr>) {
16756 visit_imaginary_node(self, node);
16757 }
16758
16759 fn visit_implicit_node(&mut self, node: &ImplicitNode<'pr>) {
16761 visit_implicit_node(self, node);
16762 }
16763
16764 fn visit_implicit_rest_node(&mut self, node: &ImplicitRestNode<'pr>) {
16766 visit_implicit_rest_node(self, node);
16767 }
16768
16769 fn visit_in_node(&mut self, node: &InNode<'pr>) {
16771 visit_in_node(self, node);
16772 }
16773
16774 fn visit_index_and_write_node(&mut self, node: &IndexAndWriteNode<'pr>) {
16776 visit_index_and_write_node(self, node);
16777 }
16778
16779 fn visit_index_operator_write_node(&mut self, node: &IndexOperatorWriteNode<'pr>) {
16781 visit_index_operator_write_node(self, node);
16782 }
16783
16784 fn visit_index_or_write_node(&mut self, node: &IndexOrWriteNode<'pr>) {
16786 visit_index_or_write_node(self, node);
16787 }
16788
16789 fn visit_index_target_node(&mut self, node: &IndexTargetNode<'pr>) {
16791 visit_index_target_node(self, node);
16792 }
16793
16794 fn visit_instance_variable_and_write_node(&mut self, node: &InstanceVariableAndWriteNode<'pr>) {
16796 visit_instance_variable_and_write_node(self, node);
16797 }
16798
16799 fn visit_instance_variable_operator_write_node(&mut self, node: &InstanceVariableOperatorWriteNode<'pr>) {
16801 visit_instance_variable_operator_write_node(self, node);
16802 }
16803
16804 fn visit_instance_variable_or_write_node(&mut self, node: &InstanceVariableOrWriteNode<'pr>) {
16806 visit_instance_variable_or_write_node(self, node);
16807 }
16808
16809 fn visit_instance_variable_read_node(&mut self, node: &InstanceVariableReadNode<'pr>) {
16811 visit_instance_variable_read_node(self, node);
16812 }
16813
16814 fn visit_instance_variable_target_node(&mut self, node: &InstanceVariableTargetNode<'pr>) {
16816 visit_instance_variable_target_node(self, node);
16817 }
16818
16819 fn visit_instance_variable_write_node(&mut self, node: &InstanceVariableWriteNode<'pr>) {
16821 visit_instance_variable_write_node(self, node);
16822 }
16823
16824 fn visit_integer_node(&mut self, node: &IntegerNode<'pr>) {
16826 visit_integer_node(self, node);
16827 }
16828
16829 fn visit_interpolated_match_last_line_node(&mut self, node: &InterpolatedMatchLastLineNode<'pr>) {
16831 visit_interpolated_match_last_line_node(self, node);
16832 }
16833
16834 fn visit_interpolated_regular_expression_node(&mut self, node: &InterpolatedRegularExpressionNode<'pr>) {
16836 visit_interpolated_regular_expression_node(self, node);
16837 }
16838
16839 fn visit_interpolated_string_node(&mut self, node: &InterpolatedStringNode<'pr>) {
16841 visit_interpolated_string_node(self, node);
16842 }
16843
16844 fn visit_interpolated_symbol_node(&mut self, node: &InterpolatedSymbolNode<'pr>) {
16846 visit_interpolated_symbol_node(self, node);
16847 }
16848
16849 fn visit_interpolated_x_string_node(&mut self, node: &InterpolatedXStringNode<'pr>) {
16851 visit_interpolated_x_string_node(self, node);
16852 }
16853
16854 fn visit_it_local_variable_read_node(&mut self, node: &ItLocalVariableReadNode<'pr>) {
16856 visit_it_local_variable_read_node(self, node);
16857 }
16858
16859 fn visit_it_parameters_node(&mut self, node: &ItParametersNode<'pr>) {
16861 visit_it_parameters_node(self, node);
16862 }
16863
16864 fn visit_keyword_hash_node(&mut self, node: &KeywordHashNode<'pr>) {
16866 visit_keyword_hash_node(self, node);
16867 }
16868
16869 fn visit_keyword_rest_parameter_node(&mut self, node: &KeywordRestParameterNode<'pr>) {
16871 visit_keyword_rest_parameter_node(self, node);
16872 }
16873
16874 fn visit_lambda_node(&mut self, node: &LambdaNode<'pr>) {
16876 visit_lambda_node(self, node);
16877 }
16878
16879 fn visit_local_variable_and_write_node(&mut self, node: &LocalVariableAndWriteNode<'pr>) {
16881 visit_local_variable_and_write_node(self, node);
16882 }
16883
16884 fn visit_local_variable_operator_write_node(&mut self, node: &LocalVariableOperatorWriteNode<'pr>) {
16886 visit_local_variable_operator_write_node(self, node);
16887 }
16888
16889 fn visit_local_variable_or_write_node(&mut self, node: &LocalVariableOrWriteNode<'pr>) {
16891 visit_local_variable_or_write_node(self, node);
16892 }
16893
16894 fn visit_local_variable_read_node(&mut self, node: &LocalVariableReadNode<'pr>) {
16896 visit_local_variable_read_node(self, node);
16897 }
16898
16899 fn visit_local_variable_target_node(&mut self, node: &LocalVariableTargetNode<'pr>) {
16901 visit_local_variable_target_node(self, node);
16902 }
16903
16904 fn visit_local_variable_write_node(&mut self, node: &LocalVariableWriteNode<'pr>) {
16906 visit_local_variable_write_node(self, node);
16907 }
16908
16909 fn visit_match_last_line_node(&mut self, node: &MatchLastLineNode<'pr>) {
16911 visit_match_last_line_node(self, node);
16912 }
16913
16914 fn visit_match_predicate_node(&mut self, node: &MatchPredicateNode<'pr>) {
16916 visit_match_predicate_node(self, node);
16917 }
16918
16919 fn visit_match_required_node(&mut self, node: &MatchRequiredNode<'pr>) {
16921 visit_match_required_node(self, node);
16922 }
16923
16924 fn visit_match_write_node(&mut self, node: &MatchWriteNode<'pr>) {
16926 visit_match_write_node(self, node);
16927 }
16928
16929 fn visit_module_node(&mut self, node: &ModuleNode<'pr>) {
16931 visit_module_node(self, node);
16932 }
16933
16934 fn visit_multi_target_node(&mut self, node: &MultiTargetNode<'pr>) {
16936 visit_multi_target_node(self, node);
16937 }
16938
16939 fn visit_multi_write_node(&mut self, node: &MultiWriteNode<'pr>) {
16941 visit_multi_write_node(self, node);
16942 }
16943
16944 fn visit_next_node(&mut self, node: &NextNode<'pr>) {
16946 visit_next_node(self, node);
16947 }
16948
16949 fn visit_nil_node(&mut self, node: &NilNode<'pr>) {
16951 visit_nil_node(self, node);
16952 }
16953
16954 fn visit_no_block_parameter_node(&mut self, node: &NoBlockParameterNode<'pr>) {
16956 visit_no_block_parameter_node(self, node);
16957 }
16958
16959 fn visit_no_keywords_parameter_node(&mut self, node: &NoKeywordsParameterNode<'pr>) {
16961 visit_no_keywords_parameter_node(self, node);
16962 }
16963
16964 fn visit_numbered_parameters_node(&mut self, node: &NumberedParametersNode<'pr>) {
16966 visit_numbered_parameters_node(self, node);
16967 }
16968
16969 fn visit_numbered_reference_read_node(&mut self, node: &NumberedReferenceReadNode<'pr>) {
16971 visit_numbered_reference_read_node(self, node);
16972 }
16973
16974 fn visit_optional_keyword_parameter_node(&mut self, node: &OptionalKeywordParameterNode<'pr>) {
16976 visit_optional_keyword_parameter_node(self, node);
16977 }
16978
16979 fn visit_optional_parameter_node(&mut self, node: &OptionalParameterNode<'pr>) {
16981 visit_optional_parameter_node(self, node);
16982 }
16983
16984 fn visit_or_node(&mut self, node: &OrNode<'pr>) {
16986 visit_or_node(self, node);
16987 }
16988
16989 fn visit_parameters_node(&mut self, node: &ParametersNode<'pr>) {
16991 visit_parameters_node(self, node);
16992 }
16993
16994 fn visit_parentheses_node(&mut self, node: &ParenthesesNode<'pr>) {
16996 visit_parentheses_node(self, node);
16997 }
16998
16999 fn visit_pinned_expression_node(&mut self, node: &PinnedExpressionNode<'pr>) {
17001 visit_pinned_expression_node(self, node);
17002 }
17003
17004 fn visit_pinned_variable_node(&mut self, node: &PinnedVariableNode<'pr>) {
17006 visit_pinned_variable_node(self, node);
17007 }
17008
17009 fn visit_post_execution_node(&mut self, node: &PostExecutionNode<'pr>) {
17011 visit_post_execution_node(self, node);
17012 }
17013
17014 fn visit_pre_execution_node(&mut self, node: &PreExecutionNode<'pr>) {
17016 visit_pre_execution_node(self, node);
17017 }
17018
17019 fn visit_program_node(&mut self, node: &ProgramNode<'pr>) {
17021 visit_program_node(self, node);
17022 }
17023
17024 fn visit_range_node(&mut self, node: &RangeNode<'pr>) {
17026 visit_range_node(self, node);
17027 }
17028
17029 fn visit_rational_node(&mut self, node: &RationalNode<'pr>) {
17031 visit_rational_node(self, node);
17032 }
17033
17034 fn visit_redo_node(&mut self, node: &RedoNode<'pr>) {
17036 visit_redo_node(self, node);
17037 }
17038
17039 fn visit_regular_expression_node(&mut self, node: &RegularExpressionNode<'pr>) {
17041 visit_regular_expression_node(self, node);
17042 }
17043
17044 fn visit_required_keyword_parameter_node(&mut self, node: &RequiredKeywordParameterNode<'pr>) {
17046 visit_required_keyword_parameter_node(self, node);
17047 }
17048
17049 fn visit_required_parameter_node(&mut self, node: &RequiredParameterNode<'pr>) {
17051 visit_required_parameter_node(self, node);
17052 }
17053
17054 fn visit_rescue_modifier_node(&mut self, node: &RescueModifierNode<'pr>) {
17056 visit_rescue_modifier_node(self, node);
17057 }
17058
17059 fn visit_rescue_node(&mut self, node: &RescueNode<'pr>) {
17061 visit_rescue_node(self, node);
17062 }
17063
17064 fn visit_rest_parameter_node(&mut self, node: &RestParameterNode<'pr>) {
17066 visit_rest_parameter_node(self, node);
17067 }
17068
17069 fn visit_retry_node(&mut self, node: &RetryNode<'pr>) {
17071 visit_retry_node(self, node);
17072 }
17073
17074 fn visit_return_node(&mut self, node: &ReturnNode<'pr>) {
17076 visit_return_node(self, node);
17077 }
17078
17079 fn visit_self_node(&mut self, node: &SelfNode<'pr>) {
17081 visit_self_node(self, node);
17082 }
17083
17084 fn visit_shareable_constant_node(&mut self, node: &ShareableConstantNode<'pr>) {
17086 visit_shareable_constant_node(self, node);
17087 }
17088
17089 fn visit_singleton_class_node(&mut self, node: &SingletonClassNode<'pr>) {
17091 visit_singleton_class_node(self, node);
17092 }
17093
17094 fn visit_source_encoding_node(&mut self, node: &SourceEncodingNode<'pr>) {
17096 visit_source_encoding_node(self, node);
17097 }
17098
17099 fn visit_source_file_node(&mut self, node: &SourceFileNode<'pr>) {
17101 visit_source_file_node(self, node);
17102 }
17103
17104 fn visit_source_line_node(&mut self, node: &SourceLineNode<'pr>) {
17106 visit_source_line_node(self, node);
17107 }
17108
17109 fn visit_splat_node(&mut self, node: &SplatNode<'pr>) {
17111 visit_splat_node(self, node);
17112 }
17113
17114 fn visit_statements_node(&mut self, node: &StatementsNode<'pr>) {
17116 visit_statements_node(self, node);
17117 }
17118
17119 fn visit_string_node(&mut self, node: &StringNode<'pr>) {
17121 visit_string_node(self, node);
17122 }
17123
17124 fn visit_super_node(&mut self, node: &SuperNode<'pr>) {
17126 visit_super_node(self, node);
17127 }
17128
17129 fn visit_symbol_node(&mut self, node: &SymbolNode<'pr>) {
17131 visit_symbol_node(self, node);
17132 }
17133
17134 fn visit_true_node(&mut self, node: &TrueNode<'pr>) {
17136 visit_true_node(self, node);
17137 }
17138
17139 fn visit_undef_node(&mut self, node: &UndefNode<'pr>) {
17141 visit_undef_node(self, node);
17142 }
17143
17144 fn visit_unless_node(&mut self, node: &UnlessNode<'pr>) {
17146 visit_unless_node(self, node);
17147 }
17148
17149 fn visit_until_node(&mut self, node: &UntilNode<'pr>) {
17151 visit_until_node(self, node);
17152 }
17153
17154 fn visit_when_node(&mut self, node: &WhenNode<'pr>) {
17156 visit_when_node(self, node);
17157 }
17158
17159 fn visit_while_node(&mut self, node: &WhileNode<'pr>) {
17161 visit_while_node(self, node);
17162 }
17163
17164 fn visit_x_string_node(&mut self, node: &XStringNode<'pr>) {
17166 visit_x_string_node(self, node);
17167 }
17168
17169 fn visit_yield_node(&mut self, node: &YieldNode<'pr>) {
17171 visit_yield_node(self, node);
17172 }
17173}
17174
17175pub fn visit_alias_global_variable_node<'pr, V>(visitor: &mut V, node: &AliasGlobalVariableNode<'pr>)
17177where
17178 V: Visit<'pr> + ?Sized,
17179{
17180 visitor.visit(&node.new_name());
17181 visitor.visit(&node.old_name());
17182}
17183
17184pub fn visit_alias_method_node<'pr, V>(visitor: &mut V, node: &AliasMethodNode<'pr>)
17186where
17187 V: Visit<'pr> + ?Sized,
17188{
17189 visitor.visit(&node.new_name());
17190 visitor.visit(&node.old_name());
17191}
17192
17193pub fn visit_alternation_pattern_node<'pr, V>(visitor: &mut V, node: &AlternationPatternNode<'pr>)
17195where
17196 V: Visit<'pr> + ?Sized,
17197{
17198 visitor.visit(&node.left());
17199 visitor.visit(&node.right());
17200}
17201
17202pub fn visit_and_node<'pr, V>(visitor: &mut V, node: &AndNode<'pr>)
17204where
17205 V: Visit<'pr> + ?Sized,
17206{
17207 visitor.visit(&node.left());
17208 visitor.visit(&node.right());
17209}
17210
17211pub fn visit_arguments_node<'pr, V>(visitor: &mut V, node: &ArgumentsNode<'pr>)
17213where
17214 V: Visit<'pr> + ?Sized,
17215{
17216 for node in &node.arguments() {
17217 visitor.visit(&node);
17218 }
17219}
17220
17221pub fn visit_array_node<'pr, V>(visitor: &mut V, node: &ArrayNode<'pr>)
17223where
17224 V: Visit<'pr> + ?Sized,
17225{
17226 for node in &node.elements() {
17227 visitor.visit(&node);
17228 }
17229}
17230
17231pub fn visit_array_pattern_node<'pr, V>(visitor: &mut V, node: &ArrayPatternNode<'pr>)
17233where
17234 V: Visit<'pr> + ?Sized,
17235{
17236 if let Some(node) = node.constant() {
17237 visitor.visit(&node);
17238 }
17239 for node in &node.requireds() {
17240 visitor.visit(&node);
17241 }
17242 if let Some(node) = node.rest() {
17243 visitor.visit(&node);
17244 }
17245 for node in &node.posts() {
17246 visitor.visit(&node);
17247 }
17248}
17249
17250pub fn visit_assoc_node<'pr, V>(visitor: &mut V, node: &AssocNode<'pr>)
17252where
17253 V: Visit<'pr> + ?Sized,
17254{
17255 visitor.visit(&node.key());
17256 visitor.visit(&node.value());
17257}
17258
17259pub fn visit_assoc_splat_node<'pr, V>(visitor: &mut V, node: &AssocSplatNode<'pr>)
17261where
17262 V: Visit<'pr> + ?Sized,
17263{
17264 if let Some(node) = node.value() {
17265 visitor.visit(&node);
17266 }
17267}
17268
17269pub const fn visit_back_reference_read_node<'pr, V>(_visitor: &mut V, _node: &BackReferenceReadNode<'pr>)
17271where
17272 V: Visit<'pr> + ?Sized,
17273{}
17274
17275pub fn visit_begin_node<'pr, V>(visitor: &mut V, node: &BeginNode<'pr>)
17277where
17278 V: Visit<'pr> + ?Sized,
17279{
17280 if let Some(node) = node.statements() {
17281 visitor.visit_statements_node(&node);
17282 }
17283 if let Some(node) = node.rescue_clause() {
17284 visitor.visit_rescue_node(&node);
17285 }
17286 if let Some(node) = node.else_clause() {
17287 visitor.visit_else_node(&node);
17288 }
17289 if let Some(node) = node.ensure_clause() {
17290 visitor.visit_ensure_node(&node);
17291 }
17292}
17293
17294pub fn visit_block_argument_node<'pr, V>(visitor: &mut V, node: &BlockArgumentNode<'pr>)
17296where
17297 V: Visit<'pr> + ?Sized,
17298{
17299 if let Some(node) = node.expression() {
17300 visitor.visit(&node);
17301 }
17302}
17303
17304pub const fn visit_block_local_variable_node<'pr, V>(_visitor: &mut V, _node: &BlockLocalVariableNode<'pr>)
17306where
17307 V: Visit<'pr> + ?Sized,
17308{}
17309
17310pub fn visit_block_node<'pr, V>(visitor: &mut V, node: &BlockNode<'pr>)
17312where
17313 V: Visit<'pr> + ?Sized,
17314{
17315 if let Some(node) = node.parameters() {
17316 visitor.visit(&node);
17317 }
17318 if let Some(node) = node.body() {
17319 visitor.visit(&node);
17320 }
17321}
17322
17323pub const fn visit_block_parameter_node<'pr, V>(_visitor: &mut V, _node: &BlockParameterNode<'pr>)
17325where
17326 V: Visit<'pr> + ?Sized,
17327{}
17328
17329pub fn visit_block_parameters_node<'pr, V>(visitor: &mut V, node: &BlockParametersNode<'pr>)
17331where
17332 V: Visit<'pr> + ?Sized,
17333{
17334 if let Some(node) = node.parameters() {
17335 visitor.visit_parameters_node(&node);
17336 }
17337 for node in &node.locals() {
17338 visitor.visit(&node);
17339 }
17340}
17341
17342pub fn visit_break_node<'pr, V>(visitor: &mut V, node: &BreakNode<'pr>)
17344where
17345 V: Visit<'pr> + ?Sized,
17346{
17347 if let Some(node) = node.arguments() {
17348 visitor.visit_arguments_node(&node);
17349 }
17350}
17351
17352pub fn visit_call_and_write_node<'pr, V>(visitor: &mut V, node: &CallAndWriteNode<'pr>)
17354where
17355 V: Visit<'pr> + ?Sized,
17356{
17357 if let Some(node) = node.receiver() {
17358 visitor.visit(&node);
17359 }
17360 visitor.visit(&node.value());
17361}
17362
17363pub fn visit_call_node<'pr, V>(visitor: &mut V, node: &CallNode<'pr>)
17365where
17366 V: Visit<'pr> + ?Sized,
17367{
17368 if let Some(node) = node.receiver() {
17369 visitor.visit(&node);
17370 }
17371 if let Some(node) = node.arguments() {
17372 visitor.visit_arguments_node(&node);
17373 }
17374 if let Some(node) = node.block() {
17375 visitor.visit(&node);
17376 }
17377}
17378
17379pub fn visit_call_operator_write_node<'pr, V>(visitor: &mut V, node: &CallOperatorWriteNode<'pr>)
17381where
17382 V: Visit<'pr> + ?Sized,
17383{
17384 if let Some(node) = node.receiver() {
17385 visitor.visit(&node);
17386 }
17387 visitor.visit(&node.value());
17388}
17389
17390pub fn visit_call_or_write_node<'pr, V>(visitor: &mut V, node: &CallOrWriteNode<'pr>)
17392where
17393 V: Visit<'pr> + ?Sized,
17394{
17395 if let Some(node) = node.receiver() {
17396 visitor.visit(&node);
17397 }
17398 visitor.visit(&node.value());
17399}
17400
17401pub fn visit_call_target_node<'pr, V>(visitor: &mut V, node: &CallTargetNode<'pr>)
17403where
17404 V: Visit<'pr> + ?Sized,
17405{
17406 visitor.visit(&node.receiver());
17407}
17408
17409pub fn visit_capture_pattern_node<'pr, V>(visitor: &mut V, node: &CapturePatternNode<'pr>)
17411where
17412 V: Visit<'pr> + ?Sized,
17413{
17414 visitor.visit(&node.value());
17415 visitor.visit_local_variable_target_node(&node.target());
17416}
17417
17418pub fn visit_case_match_node<'pr, V>(visitor: &mut V, node: &CaseMatchNode<'pr>)
17420where
17421 V: Visit<'pr> + ?Sized,
17422{
17423 if let Some(node) = node.predicate() {
17424 visitor.visit(&node);
17425 }
17426 for node in &node.conditions() {
17427 visitor.visit(&node);
17428 }
17429 if let Some(node) = node.else_clause() {
17430 visitor.visit_else_node(&node);
17431 }
17432}
17433
17434pub fn visit_case_node<'pr, V>(visitor: &mut V, node: &CaseNode<'pr>)
17436where
17437 V: Visit<'pr> + ?Sized,
17438{
17439 if let Some(node) = node.predicate() {
17440 visitor.visit(&node);
17441 }
17442 for node in &node.conditions() {
17443 visitor.visit(&node);
17444 }
17445 if let Some(node) = node.else_clause() {
17446 visitor.visit_else_node(&node);
17447 }
17448}
17449
17450pub fn visit_class_node<'pr, V>(visitor: &mut V, node: &ClassNode<'pr>)
17452where
17453 V: Visit<'pr> + ?Sized,
17454{
17455 visitor.visit(&node.constant_path());
17456 if let Some(node) = node.superclass() {
17457 visitor.visit(&node);
17458 }
17459 if let Some(node) = node.body() {
17460 visitor.visit(&node);
17461 }
17462}
17463
17464pub fn visit_class_variable_and_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableAndWriteNode<'pr>)
17466where
17467 V: Visit<'pr> + ?Sized,
17468{
17469 visitor.visit(&node.value());
17470}
17471
17472pub fn visit_class_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableOperatorWriteNode<'pr>)
17474where
17475 V: Visit<'pr> + ?Sized,
17476{
17477 visitor.visit(&node.value());
17478}
17479
17480pub fn visit_class_variable_or_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableOrWriteNode<'pr>)
17482where
17483 V: Visit<'pr> + ?Sized,
17484{
17485 visitor.visit(&node.value());
17486}
17487
17488pub const fn visit_class_variable_read_node<'pr, V>(_visitor: &mut V, _node: &ClassVariableReadNode<'pr>)
17490where
17491 V: Visit<'pr> + ?Sized,
17492{}
17493
17494pub const fn visit_class_variable_target_node<'pr, V>(_visitor: &mut V, _node: &ClassVariableTargetNode<'pr>)
17496where
17497 V: Visit<'pr> + ?Sized,
17498{}
17499
17500pub fn visit_class_variable_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableWriteNode<'pr>)
17502where
17503 V: Visit<'pr> + ?Sized,
17504{
17505 visitor.visit(&node.value());
17506}
17507
17508pub fn visit_constant_and_write_node<'pr, V>(visitor: &mut V, node: &ConstantAndWriteNode<'pr>)
17510where
17511 V: Visit<'pr> + ?Sized,
17512{
17513 visitor.visit(&node.value());
17514}
17515
17516pub fn visit_constant_operator_write_node<'pr, V>(visitor: &mut V, node: &ConstantOperatorWriteNode<'pr>)
17518where
17519 V: Visit<'pr> + ?Sized,
17520{
17521 visitor.visit(&node.value());
17522}
17523
17524pub fn visit_constant_or_write_node<'pr, V>(visitor: &mut V, node: &ConstantOrWriteNode<'pr>)
17526where
17527 V: Visit<'pr> + ?Sized,
17528{
17529 visitor.visit(&node.value());
17530}
17531
17532pub fn visit_constant_path_and_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathAndWriteNode<'pr>)
17534where
17535 V: Visit<'pr> + ?Sized,
17536{
17537 visitor.visit_constant_path_node(&node.target());
17538 visitor.visit(&node.value());
17539}
17540
17541pub fn visit_constant_path_node<'pr, V>(visitor: &mut V, node: &ConstantPathNode<'pr>)
17543where
17544 V: Visit<'pr> + ?Sized,
17545{
17546 if let Some(node) = node.parent() {
17547 visitor.visit(&node);
17548 }
17549}
17550
17551pub fn visit_constant_path_operator_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathOperatorWriteNode<'pr>)
17553where
17554 V: Visit<'pr> + ?Sized,
17555{
17556 visitor.visit_constant_path_node(&node.target());
17557 visitor.visit(&node.value());
17558}
17559
17560pub fn visit_constant_path_or_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathOrWriteNode<'pr>)
17562where
17563 V: Visit<'pr> + ?Sized,
17564{
17565 visitor.visit_constant_path_node(&node.target());
17566 visitor.visit(&node.value());
17567}
17568
17569pub fn visit_constant_path_target_node<'pr, V>(visitor: &mut V, node: &ConstantPathTargetNode<'pr>)
17571where
17572 V: Visit<'pr> + ?Sized,
17573{
17574 if let Some(node) = node.parent() {
17575 visitor.visit(&node);
17576 }
17577}
17578
17579pub fn visit_constant_path_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathWriteNode<'pr>)
17581where
17582 V: Visit<'pr> + ?Sized,
17583{
17584 visitor.visit_constant_path_node(&node.target());
17585 visitor.visit(&node.value());
17586}
17587
17588pub const fn visit_constant_read_node<'pr, V>(_visitor: &mut V, _node: &ConstantReadNode<'pr>)
17590where
17591 V: Visit<'pr> + ?Sized,
17592{}
17593
17594pub const fn visit_constant_target_node<'pr, V>(_visitor: &mut V, _node: &ConstantTargetNode<'pr>)
17596where
17597 V: Visit<'pr> + ?Sized,
17598{}
17599
17600pub fn visit_constant_write_node<'pr, V>(visitor: &mut V, node: &ConstantWriteNode<'pr>)
17602where
17603 V: Visit<'pr> + ?Sized,
17604{
17605 visitor.visit(&node.value());
17606}
17607
17608pub fn visit_def_node<'pr, V>(visitor: &mut V, node: &DefNode<'pr>)
17610where
17611 V: Visit<'pr> + ?Sized,
17612{
17613 if let Some(node) = node.receiver() {
17614 visitor.visit(&node);
17615 }
17616 if let Some(node) = node.parameters() {
17617 visitor.visit_parameters_node(&node);
17618 }
17619 if let Some(node) = node.body() {
17620 visitor.visit(&node);
17621 }
17622}
17623
17624pub fn visit_defined_node<'pr, V>(visitor: &mut V, node: &DefinedNode<'pr>)
17626where
17627 V: Visit<'pr> + ?Sized,
17628{
17629 visitor.visit(&node.value());
17630}
17631
17632pub fn visit_else_node<'pr, V>(visitor: &mut V, node: &ElseNode<'pr>)
17634where
17635 V: Visit<'pr> + ?Sized,
17636{
17637 if let Some(node) = node.statements() {
17638 visitor.visit_statements_node(&node);
17639 }
17640}
17641
17642pub fn visit_embedded_statements_node<'pr, V>(visitor: &mut V, node: &EmbeddedStatementsNode<'pr>)
17644where
17645 V: Visit<'pr> + ?Sized,
17646{
17647 if let Some(node) = node.statements() {
17648 visitor.visit_statements_node(&node);
17649 }
17650}
17651
17652pub fn visit_embedded_variable_node<'pr, V>(visitor: &mut V, node: &EmbeddedVariableNode<'pr>)
17654where
17655 V: Visit<'pr> + ?Sized,
17656{
17657 visitor.visit(&node.variable());
17658}
17659
17660pub fn visit_ensure_node<'pr, V>(visitor: &mut V, node: &EnsureNode<'pr>)
17662where
17663 V: Visit<'pr> + ?Sized,
17664{
17665 if let Some(node) = node.statements() {
17666 visitor.visit_statements_node(&node);
17667 }
17668}
17669
17670pub fn visit_error_recovery_node<'pr, V>(visitor: &mut V, node: &ErrorRecoveryNode<'pr>)
17672where
17673 V: Visit<'pr> + ?Sized,
17674{
17675 if let Some(node) = node.unexpected() {
17676 visitor.visit(&node);
17677 }
17678}
17679
17680pub const fn visit_false_node<'pr, V>(_visitor: &mut V, _node: &FalseNode<'pr>)
17682where
17683 V: Visit<'pr> + ?Sized,
17684{}
17685
17686pub fn visit_find_pattern_node<'pr, V>(visitor: &mut V, node: &FindPatternNode<'pr>)
17688where
17689 V: Visit<'pr> + ?Sized,
17690{
17691 if let Some(node) = node.constant() {
17692 visitor.visit(&node);
17693 }
17694 visitor.visit_splat_node(&node.left());
17695 for node in &node.requireds() {
17696 visitor.visit(&node);
17697 }
17698 visitor.visit_splat_node(&node.right());
17699}
17700
17701pub fn visit_flip_flop_node<'pr, V>(visitor: &mut V, node: &FlipFlopNode<'pr>)
17703where
17704 V: Visit<'pr> + ?Sized,
17705{
17706 if let Some(node) = node.left() {
17707 visitor.visit(&node);
17708 }
17709 if let Some(node) = node.right() {
17710 visitor.visit(&node);
17711 }
17712}
17713
17714pub const fn visit_float_node<'pr, V>(_visitor: &mut V, _node: &FloatNode<'pr>)
17716where
17717 V: Visit<'pr> + ?Sized,
17718{}
17719
17720pub fn visit_for_node<'pr, V>(visitor: &mut V, node: &ForNode<'pr>)
17722where
17723 V: Visit<'pr> + ?Sized,
17724{
17725 visitor.visit(&node.index());
17726 visitor.visit(&node.collection());
17727 if let Some(node) = node.statements() {
17728 visitor.visit_statements_node(&node);
17729 }
17730}
17731
17732pub const fn visit_forwarding_arguments_node<'pr, V>(_visitor: &mut V, _node: &ForwardingArgumentsNode<'pr>)
17734where
17735 V: Visit<'pr> + ?Sized,
17736{}
17737
17738pub const fn visit_forwarding_parameter_node<'pr, V>(_visitor: &mut V, _node: &ForwardingParameterNode<'pr>)
17740where
17741 V: Visit<'pr> + ?Sized,
17742{}
17743
17744pub fn visit_forwarding_super_node<'pr, V>(visitor: &mut V, node: &ForwardingSuperNode<'pr>)
17746where
17747 V: Visit<'pr> + ?Sized,
17748{
17749 if let Some(node) = node.block() {
17750 visitor.visit_block_node(&node);
17751 }
17752}
17753
17754pub fn visit_global_variable_and_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableAndWriteNode<'pr>)
17756where
17757 V: Visit<'pr> + ?Sized,
17758{
17759 visitor.visit(&node.value());
17760}
17761
17762pub fn visit_global_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableOperatorWriteNode<'pr>)
17764where
17765 V: Visit<'pr> + ?Sized,
17766{
17767 visitor.visit(&node.value());
17768}
17769
17770pub fn visit_global_variable_or_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableOrWriteNode<'pr>)
17772where
17773 V: Visit<'pr> + ?Sized,
17774{
17775 visitor.visit(&node.value());
17776}
17777
17778pub const fn visit_global_variable_read_node<'pr, V>(_visitor: &mut V, _node: &GlobalVariableReadNode<'pr>)
17780where
17781 V: Visit<'pr> + ?Sized,
17782{}
17783
17784pub const fn visit_global_variable_target_node<'pr, V>(_visitor: &mut V, _node: &GlobalVariableTargetNode<'pr>)
17786where
17787 V: Visit<'pr> + ?Sized,
17788{}
17789
17790pub fn visit_global_variable_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableWriteNode<'pr>)
17792where
17793 V: Visit<'pr> + ?Sized,
17794{
17795 visitor.visit(&node.value());
17796}
17797
17798pub fn visit_hash_node<'pr, V>(visitor: &mut V, node: &HashNode<'pr>)
17800where
17801 V: Visit<'pr> + ?Sized,
17802{
17803 for node in &node.elements() {
17804 visitor.visit(&node);
17805 }
17806}
17807
17808pub fn visit_hash_pattern_node<'pr, V>(visitor: &mut V, node: &HashPatternNode<'pr>)
17810where
17811 V: Visit<'pr> + ?Sized,
17812{
17813 if let Some(node) = node.constant() {
17814 visitor.visit(&node);
17815 }
17816 for node in &node.elements() {
17817 visitor.visit(&node);
17818 }
17819 if let Some(node) = node.rest() {
17820 visitor.visit(&node);
17821 }
17822}
17823
17824pub fn visit_if_node<'pr, V>(visitor: &mut V, node: &IfNode<'pr>)
17826where
17827 V: Visit<'pr> + ?Sized,
17828{
17829 visitor.visit(&node.predicate());
17830 if let Some(node) = node.statements() {
17831 visitor.visit_statements_node(&node);
17832 }
17833 if let Some(node) = node.subsequent() {
17834 visitor.visit(&node);
17835 }
17836}
17837
17838pub fn visit_imaginary_node<'pr, V>(visitor: &mut V, node: &ImaginaryNode<'pr>)
17840where
17841 V: Visit<'pr> + ?Sized,
17842{
17843 visitor.visit(&node.numeric());
17844}
17845
17846pub fn visit_implicit_node<'pr, V>(visitor: &mut V, node: &ImplicitNode<'pr>)
17848where
17849 V: Visit<'pr> + ?Sized,
17850{
17851 visitor.visit(&node.value());
17852}
17853
17854pub const fn visit_implicit_rest_node<'pr, V>(_visitor: &mut V, _node: &ImplicitRestNode<'pr>)
17856where
17857 V: Visit<'pr> + ?Sized,
17858{}
17859
17860pub fn visit_in_node<'pr, V>(visitor: &mut V, node: &InNode<'pr>)
17862where
17863 V: Visit<'pr> + ?Sized,
17864{
17865 visitor.visit(&node.pattern());
17866 if let Some(node) = node.statements() {
17867 visitor.visit_statements_node(&node);
17868 }
17869}
17870
17871pub fn visit_index_and_write_node<'pr, V>(visitor: &mut V, node: &IndexAndWriteNode<'pr>)
17873where
17874 V: Visit<'pr> + ?Sized,
17875{
17876 if let Some(node) = node.receiver() {
17877 visitor.visit(&node);
17878 }
17879 if let Some(node) = node.arguments() {
17880 visitor.visit_arguments_node(&node);
17881 }
17882 if let Some(node) = node.block() {
17883 visitor.visit_block_argument_node(&node);
17884 }
17885 visitor.visit(&node.value());
17886}
17887
17888pub fn visit_index_operator_write_node<'pr, V>(visitor: &mut V, node: &IndexOperatorWriteNode<'pr>)
17890where
17891 V: Visit<'pr> + ?Sized,
17892{
17893 if let Some(node) = node.receiver() {
17894 visitor.visit(&node);
17895 }
17896 if let Some(node) = node.arguments() {
17897 visitor.visit_arguments_node(&node);
17898 }
17899 if let Some(node) = node.block() {
17900 visitor.visit_block_argument_node(&node);
17901 }
17902 visitor.visit(&node.value());
17903}
17904
17905pub fn visit_index_or_write_node<'pr, V>(visitor: &mut V, node: &IndexOrWriteNode<'pr>)
17907where
17908 V: Visit<'pr> + ?Sized,
17909{
17910 if let Some(node) = node.receiver() {
17911 visitor.visit(&node);
17912 }
17913 if let Some(node) = node.arguments() {
17914 visitor.visit_arguments_node(&node);
17915 }
17916 if let Some(node) = node.block() {
17917 visitor.visit_block_argument_node(&node);
17918 }
17919 visitor.visit(&node.value());
17920}
17921
17922pub fn visit_index_target_node<'pr, V>(visitor: &mut V, node: &IndexTargetNode<'pr>)
17924where
17925 V: Visit<'pr> + ?Sized,
17926{
17927 visitor.visit(&node.receiver());
17928 if let Some(node) = node.arguments() {
17929 visitor.visit_arguments_node(&node);
17930 }
17931 if let Some(node) = node.block() {
17932 visitor.visit_block_argument_node(&node);
17933 }
17934}
17935
17936pub fn visit_instance_variable_and_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableAndWriteNode<'pr>)
17938where
17939 V: Visit<'pr> + ?Sized,
17940{
17941 visitor.visit(&node.value());
17942}
17943
17944pub fn visit_instance_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableOperatorWriteNode<'pr>)
17946where
17947 V: Visit<'pr> + ?Sized,
17948{
17949 visitor.visit(&node.value());
17950}
17951
17952pub fn visit_instance_variable_or_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableOrWriteNode<'pr>)
17954where
17955 V: Visit<'pr> + ?Sized,
17956{
17957 visitor.visit(&node.value());
17958}
17959
17960pub const fn visit_instance_variable_read_node<'pr, V>(_visitor: &mut V, _node: &InstanceVariableReadNode<'pr>)
17962where
17963 V: Visit<'pr> + ?Sized,
17964{}
17965
17966pub const fn visit_instance_variable_target_node<'pr, V>(_visitor: &mut V, _node: &InstanceVariableTargetNode<'pr>)
17968where
17969 V: Visit<'pr> + ?Sized,
17970{}
17971
17972pub fn visit_instance_variable_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableWriteNode<'pr>)
17974where
17975 V: Visit<'pr> + ?Sized,
17976{
17977 visitor.visit(&node.value());
17978}
17979
17980pub const fn visit_integer_node<'pr, V>(_visitor: &mut V, _node: &IntegerNode<'pr>)
17982where
17983 V: Visit<'pr> + ?Sized,
17984{}
17985
17986pub fn visit_interpolated_match_last_line_node<'pr, V>(visitor: &mut V, node: &InterpolatedMatchLastLineNode<'pr>)
17988where
17989 V: Visit<'pr> + ?Sized,
17990{
17991 for node in &node.parts() {
17992 visitor.visit(&node);
17993 }
17994}
17995
17996pub fn visit_interpolated_regular_expression_node<'pr, V>(visitor: &mut V, node: &InterpolatedRegularExpressionNode<'pr>)
17998where
17999 V: Visit<'pr> + ?Sized,
18000{
18001 for node in &node.parts() {
18002 visitor.visit(&node);
18003 }
18004}
18005
18006pub fn visit_interpolated_string_node<'pr, V>(visitor: &mut V, node: &InterpolatedStringNode<'pr>)
18008where
18009 V: Visit<'pr> + ?Sized,
18010{
18011 for node in &node.parts() {
18012 visitor.visit(&node);
18013 }
18014}
18015
18016pub fn visit_interpolated_symbol_node<'pr, V>(visitor: &mut V, node: &InterpolatedSymbolNode<'pr>)
18018where
18019 V: Visit<'pr> + ?Sized,
18020{
18021 for node in &node.parts() {
18022 visitor.visit(&node);
18023 }
18024}
18025
18026pub fn visit_interpolated_x_string_node<'pr, V>(visitor: &mut V, node: &InterpolatedXStringNode<'pr>)
18028where
18029 V: Visit<'pr> + ?Sized,
18030{
18031 for node in &node.parts() {
18032 visitor.visit(&node);
18033 }
18034}
18035
18036pub const fn visit_it_local_variable_read_node<'pr, V>(_visitor: &mut V, _node: &ItLocalVariableReadNode<'pr>)
18038where
18039 V: Visit<'pr> + ?Sized,
18040{}
18041
18042pub const fn visit_it_parameters_node<'pr, V>(_visitor: &mut V, _node: &ItParametersNode<'pr>)
18044where
18045 V: Visit<'pr> + ?Sized,
18046{}
18047
18048pub fn visit_keyword_hash_node<'pr, V>(visitor: &mut V, node: &KeywordHashNode<'pr>)
18050where
18051 V: Visit<'pr> + ?Sized,
18052{
18053 for node in &node.elements() {
18054 visitor.visit(&node);
18055 }
18056}
18057
18058pub const fn visit_keyword_rest_parameter_node<'pr, V>(_visitor: &mut V, _node: &KeywordRestParameterNode<'pr>)
18060where
18061 V: Visit<'pr> + ?Sized,
18062{}
18063
18064pub fn visit_lambda_node<'pr, V>(visitor: &mut V, node: &LambdaNode<'pr>)
18066where
18067 V: Visit<'pr> + ?Sized,
18068{
18069 if let Some(node) = node.parameters() {
18070 visitor.visit(&node);
18071 }
18072 if let Some(node) = node.body() {
18073 visitor.visit(&node);
18074 }
18075}
18076
18077pub fn visit_local_variable_and_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableAndWriteNode<'pr>)
18079where
18080 V: Visit<'pr> + ?Sized,
18081{
18082 visitor.visit(&node.value());
18083}
18084
18085pub fn visit_local_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableOperatorWriteNode<'pr>)
18087where
18088 V: Visit<'pr> + ?Sized,
18089{
18090 visitor.visit(&node.value());
18091}
18092
18093pub fn visit_local_variable_or_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableOrWriteNode<'pr>)
18095where
18096 V: Visit<'pr> + ?Sized,
18097{
18098 visitor.visit(&node.value());
18099}
18100
18101pub const fn visit_local_variable_read_node<'pr, V>(_visitor: &mut V, _node: &LocalVariableReadNode<'pr>)
18103where
18104 V: Visit<'pr> + ?Sized,
18105{}
18106
18107pub const fn visit_local_variable_target_node<'pr, V>(_visitor: &mut V, _node: &LocalVariableTargetNode<'pr>)
18109where
18110 V: Visit<'pr> + ?Sized,
18111{}
18112
18113pub fn visit_local_variable_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableWriteNode<'pr>)
18115where
18116 V: Visit<'pr> + ?Sized,
18117{
18118 visitor.visit(&node.value());
18119}
18120
18121pub const fn visit_match_last_line_node<'pr, V>(_visitor: &mut V, _node: &MatchLastLineNode<'pr>)
18123where
18124 V: Visit<'pr> + ?Sized,
18125{}
18126
18127pub fn visit_match_predicate_node<'pr, V>(visitor: &mut V, node: &MatchPredicateNode<'pr>)
18129where
18130 V: Visit<'pr> + ?Sized,
18131{
18132 visitor.visit(&node.value());
18133 visitor.visit(&node.pattern());
18134}
18135
18136pub fn visit_match_required_node<'pr, V>(visitor: &mut V, node: &MatchRequiredNode<'pr>)
18138where
18139 V: Visit<'pr> + ?Sized,
18140{
18141 visitor.visit(&node.value());
18142 visitor.visit(&node.pattern());
18143}
18144
18145pub fn visit_match_write_node<'pr, V>(visitor: &mut V, node: &MatchWriteNode<'pr>)
18147where
18148 V: Visit<'pr> + ?Sized,
18149{
18150 visitor.visit_call_node(&node.call());
18151 for node in &node.targets() {
18152 visitor.visit(&node);
18153 }
18154}
18155
18156pub fn visit_module_node<'pr, V>(visitor: &mut V, node: &ModuleNode<'pr>)
18158where
18159 V: Visit<'pr> + ?Sized,
18160{
18161 visitor.visit(&node.constant_path());
18162 if let Some(node) = node.body() {
18163 visitor.visit(&node);
18164 }
18165}
18166
18167pub fn visit_multi_target_node<'pr, V>(visitor: &mut V, node: &MultiTargetNode<'pr>)
18169where
18170 V: Visit<'pr> + ?Sized,
18171{
18172 for node in &node.lefts() {
18173 visitor.visit(&node);
18174 }
18175 if let Some(node) = node.rest() {
18176 visitor.visit(&node);
18177 }
18178 for node in &node.rights() {
18179 visitor.visit(&node);
18180 }
18181}
18182
18183pub fn visit_multi_write_node<'pr, V>(visitor: &mut V, node: &MultiWriteNode<'pr>)
18185where
18186 V: Visit<'pr> + ?Sized,
18187{
18188 for node in &node.lefts() {
18189 visitor.visit(&node);
18190 }
18191 if let Some(node) = node.rest() {
18192 visitor.visit(&node);
18193 }
18194 for node in &node.rights() {
18195 visitor.visit(&node);
18196 }
18197 visitor.visit(&node.value());
18198}
18199
18200pub fn visit_next_node<'pr, V>(visitor: &mut V, node: &NextNode<'pr>)
18202where
18203 V: Visit<'pr> + ?Sized,
18204{
18205 if let Some(node) = node.arguments() {
18206 visitor.visit_arguments_node(&node);
18207 }
18208}
18209
18210pub const fn visit_nil_node<'pr, V>(_visitor: &mut V, _node: &NilNode<'pr>)
18212where
18213 V: Visit<'pr> + ?Sized,
18214{}
18215
18216pub const fn visit_no_block_parameter_node<'pr, V>(_visitor: &mut V, _node: &NoBlockParameterNode<'pr>)
18218where
18219 V: Visit<'pr> + ?Sized,
18220{}
18221
18222pub const fn visit_no_keywords_parameter_node<'pr, V>(_visitor: &mut V, _node: &NoKeywordsParameterNode<'pr>)
18224where
18225 V: Visit<'pr> + ?Sized,
18226{}
18227
18228pub const fn visit_numbered_parameters_node<'pr, V>(_visitor: &mut V, _node: &NumberedParametersNode<'pr>)
18230where
18231 V: Visit<'pr> + ?Sized,
18232{}
18233
18234pub const fn visit_numbered_reference_read_node<'pr, V>(_visitor: &mut V, _node: &NumberedReferenceReadNode<'pr>)
18236where
18237 V: Visit<'pr> + ?Sized,
18238{}
18239
18240pub fn visit_optional_keyword_parameter_node<'pr, V>(visitor: &mut V, node: &OptionalKeywordParameterNode<'pr>)
18242where
18243 V: Visit<'pr> + ?Sized,
18244{
18245 visitor.visit(&node.value());
18246}
18247
18248pub fn visit_optional_parameter_node<'pr, V>(visitor: &mut V, node: &OptionalParameterNode<'pr>)
18250where
18251 V: Visit<'pr> + ?Sized,
18252{
18253 visitor.visit(&node.value());
18254}
18255
18256pub fn visit_or_node<'pr, V>(visitor: &mut V, node: &OrNode<'pr>)
18258where
18259 V: Visit<'pr> + ?Sized,
18260{
18261 visitor.visit(&node.left());
18262 visitor.visit(&node.right());
18263}
18264
18265pub fn visit_parameters_node<'pr, V>(visitor: &mut V, node: &ParametersNode<'pr>)
18267where
18268 V: Visit<'pr> + ?Sized,
18269{
18270 for node in &node.requireds() {
18271 visitor.visit(&node);
18272 }
18273 for node in &node.optionals() {
18274 visitor.visit(&node);
18275 }
18276 if let Some(node) = node.rest() {
18277 visitor.visit(&node);
18278 }
18279 for node in &node.posts() {
18280 visitor.visit(&node);
18281 }
18282 for node in &node.keywords() {
18283 visitor.visit(&node);
18284 }
18285 if let Some(node) = node.keyword_rest() {
18286 visitor.visit(&node);
18287 }
18288 if let Some(node) = node.block() {
18289 visitor.visit(&node);
18290 }
18291}
18292
18293pub fn visit_parentheses_node<'pr, V>(visitor: &mut V, node: &ParenthesesNode<'pr>)
18295where
18296 V: Visit<'pr> + ?Sized,
18297{
18298 if let Some(node) = node.body() {
18299 visitor.visit(&node);
18300 }
18301}
18302
18303pub fn visit_pinned_expression_node<'pr, V>(visitor: &mut V, node: &PinnedExpressionNode<'pr>)
18305where
18306 V: Visit<'pr> + ?Sized,
18307{
18308 visitor.visit(&node.expression());
18309}
18310
18311pub fn visit_pinned_variable_node<'pr, V>(visitor: &mut V, node: &PinnedVariableNode<'pr>)
18313where
18314 V: Visit<'pr> + ?Sized,
18315{
18316 visitor.visit(&node.variable());
18317}
18318
18319pub fn visit_post_execution_node<'pr, V>(visitor: &mut V, node: &PostExecutionNode<'pr>)
18321where
18322 V: Visit<'pr> + ?Sized,
18323{
18324 if let Some(node) = node.statements() {
18325 visitor.visit_statements_node(&node);
18326 }
18327}
18328
18329pub fn visit_pre_execution_node<'pr, V>(visitor: &mut V, node: &PreExecutionNode<'pr>)
18331where
18332 V: Visit<'pr> + ?Sized,
18333{
18334 if let Some(node) = node.statements() {
18335 visitor.visit_statements_node(&node);
18336 }
18337}
18338
18339pub fn visit_program_node<'pr, V>(visitor: &mut V, node: &ProgramNode<'pr>)
18341where
18342 V: Visit<'pr> + ?Sized,
18343{
18344 visitor.visit_statements_node(&node.statements());
18345}
18346
18347pub fn visit_range_node<'pr, V>(visitor: &mut V, node: &RangeNode<'pr>)
18349where
18350 V: Visit<'pr> + ?Sized,
18351{
18352 if let Some(node) = node.left() {
18353 visitor.visit(&node);
18354 }
18355 if let Some(node) = node.right() {
18356 visitor.visit(&node);
18357 }
18358}
18359
18360pub const fn visit_rational_node<'pr, V>(_visitor: &mut V, _node: &RationalNode<'pr>)
18362where
18363 V: Visit<'pr> + ?Sized,
18364{}
18365
18366pub const fn visit_redo_node<'pr, V>(_visitor: &mut V, _node: &RedoNode<'pr>)
18368where
18369 V: Visit<'pr> + ?Sized,
18370{}
18371
18372pub const fn visit_regular_expression_node<'pr, V>(_visitor: &mut V, _node: &RegularExpressionNode<'pr>)
18374where
18375 V: Visit<'pr> + ?Sized,
18376{}
18377
18378pub const fn visit_required_keyword_parameter_node<'pr, V>(_visitor: &mut V, _node: &RequiredKeywordParameterNode<'pr>)
18380where
18381 V: Visit<'pr> + ?Sized,
18382{}
18383
18384pub const fn visit_required_parameter_node<'pr, V>(_visitor: &mut V, _node: &RequiredParameterNode<'pr>)
18386where
18387 V: Visit<'pr> + ?Sized,
18388{}
18389
18390pub fn visit_rescue_modifier_node<'pr, V>(visitor: &mut V, node: &RescueModifierNode<'pr>)
18392where
18393 V: Visit<'pr> + ?Sized,
18394{
18395 visitor.visit(&node.expression());
18396 visitor.visit(&node.rescue_expression());
18397}
18398
18399pub fn visit_rescue_node<'pr, V>(visitor: &mut V, node: &RescueNode<'pr>)
18401where
18402 V: Visit<'pr> + ?Sized,
18403{
18404 for node in &node.exceptions() {
18405 visitor.visit(&node);
18406 }
18407 if let Some(node) = node.reference() {
18408 visitor.visit(&node);
18409 }
18410 if let Some(node) = node.statements() {
18411 visitor.visit_statements_node(&node);
18412 }
18413 if let Some(node) = node.subsequent() {
18414 visitor.visit_rescue_node(&node);
18415 }
18416}
18417
18418pub const fn visit_rest_parameter_node<'pr, V>(_visitor: &mut V, _node: &RestParameterNode<'pr>)
18420where
18421 V: Visit<'pr> + ?Sized,
18422{}
18423
18424pub const fn visit_retry_node<'pr, V>(_visitor: &mut V, _node: &RetryNode<'pr>)
18426where
18427 V: Visit<'pr> + ?Sized,
18428{}
18429
18430pub fn visit_return_node<'pr, V>(visitor: &mut V, node: &ReturnNode<'pr>)
18432where
18433 V: Visit<'pr> + ?Sized,
18434{
18435 if let Some(node) = node.arguments() {
18436 visitor.visit_arguments_node(&node);
18437 }
18438}
18439
18440pub const fn visit_self_node<'pr, V>(_visitor: &mut V, _node: &SelfNode<'pr>)
18442where
18443 V: Visit<'pr> + ?Sized,
18444{}
18445
18446pub fn visit_shareable_constant_node<'pr, V>(visitor: &mut V, node: &ShareableConstantNode<'pr>)
18448where
18449 V: Visit<'pr> + ?Sized,
18450{
18451 visitor.visit(&node.write());
18452}
18453
18454pub fn visit_singleton_class_node<'pr, V>(visitor: &mut V, node: &SingletonClassNode<'pr>)
18456where
18457 V: Visit<'pr> + ?Sized,
18458{
18459 visitor.visit(&node.expression());
18460 if let Some(node) = node.body() {
18461 visitor.visit(&node);
18462 }
18463}
18464
18465pub const fn visit_source_encoding_node<'pr, V>(_visitor: &mut V, _node: &SourceEncodingNode<'pr>)
18467where
18468 V: Visit<'pr> + ?Sized,
18469{}
18470
18471pub const fn visit_source_file_node<'pr, V>(_visitor: &mut V, _node: &SourceFileNode<'pr>)
18473where
18474 V: Visit<'pr> + ?Sized,
18475{}
18476
18477pub const fn visit_source_line_node<'pr, V>(_visitor: &mut V, _node: &SourceLineNode<'pr>)
18479where
18480 V: Visit<'pr> + ?Sized,
18481{}
18482
18483pub fn visit_splat_node<'pr, V>(visitor: &mut V, node: &SplatNode<'pr>)
18485where
18486 V: Visit<'pr> + ?Sized,
18487{
18488 if let Some(node) = node.expression() {
18489 visitor.visit(&node);
18490 }
18491}
18492
18493pub fn visit_statements_node<'pr, V>(visitor: &mut V, node: &StatementsNode<'pr>)
18495where
18496 V: Visit<'pr> + ?Sized,
18497{
18498 for node in &node.body() {
18499 visitor.visit(&node);
18500 }
18501}
18502
18503pub const fn visit_string_node<'pr, V>(_visitor: &mut V, _node: &StringNode<'pr>)
18505where
18506 V: Visit<'pr> + ?Sized,
18507{}
18508
18509pub fn visit_super_node<'pr, V>(visitor: &mut V, node: &SuperNode<'pr>)
18511where
18512 V: Visit<'pr> + ?Sized,
18513{
18514 if let Some(node) = node.arguments() {
18515 visitor.visit_arguments_node(&node);
18516 }
18517 if let Some(node) = node.block() {
18518 visitor.visit(&node);
18519 }
18520}
18521
18522pub const fn visit_symbol_node<'pr, V>(_visitor: &mut V, _node: &SymbolNode<'pr>)
18524where
18525 V: Visit<'pr> + ?Sized,
18526{}
18527
18528pub const fn visit_true_node<'pr, V>(_visitor: &mut V, _node: &TrueNode<'pr>)
18530where
18531 V: Visit<'pr> + ?Sized,
18532{}
18533
18534pub fn visit_undef_node<'pr, V>(visitor: &mut V, node: &UndefNode<'pr>)
18536where
18537 V: Visit<'pr> + ?Sized,
18538{
18539 for node in &node.names() {
18540 visitor.visit(&node);
18541 }
18542}
18543
18544pub fn visit_unless_node<'pr, V>(visitor: &mut V, node: &UnlessNode<'pr>)
18546where
18547 V: Visit<'pr> + ?Sized,
18548{
18549 visitor.visit(&node.predicate());
18550 if let Some(node) = node.statements() {
18551 visitor.visit_statements_node(&node);
18552 }
18553 if let Some(node) = node.else_clause() {
18554 visitor.visit_else_node(&node);
18555 }
18556}
18557
18558pub fn visit_until_node<'pr, V>(visitor: &mut V, node: &UntilNode<'pr>)
18560where
18561 V: Visit<'pr> + ?Sized,
18562{
18563 visitor.visit(&node.predicate());
18564 if let Some(node) = node.statements() {
18565 visitor.visit_statements_node(&node);
18566 }
18567}
18568
18569pub fn visit_when_node<'pr, V>(visitor: &mut V, node: &WhenNode<'pr>)
18571where
18572 V: Visit<'pr> + ?Sized,
18573{
18574 for node in &node.conditions() {
18575 visitor.visit(&node);
18576 }
18577 if let Some(node) = node.statements() {
18578 visitor.visit_statements_node(&node);
18579 }
18580}
18581
18582pub fn visit_while_node<'pr, V>(visitor: &mut V, node: &WhileNode<'pr>)
18584where
18585 V: Visit<'pr> + ?Sized,
18586{
18587 visitor.visit(&node.predicate());
18588 if let Some(node) = node.statements() {
18589 visitor.visit_statements_node(&node);
18590 }
18591}
18592
18593pub const fn visit_x_string_node<'pr, V>(_visitor: &mut V, _node: &XStringNode<'pr>)
18595where
18596 V: Visit<'pr> + ?Sized,
18597{}
18598
18599pub fn visit_yield_node<'pr, V>(visitor: &mut V, node: &YieldNode<'pr>)
18601where
18602 V: Visit<'pr> + ?Sized,
18603{
18604 if let Some(node) = node.arguments() {
18605 visitor.visit_arguments_node(&node);
18606 }
18607}