use std::marker::PhantomData;
use std::ptr::NonNull;
#[allow(clippy::wildcard_imports)]
use ruby_prism_sys::*;
use crate::{ConstantId, ConstantList, Integer, Location, NodeList};
const PM_ALIAS_GLOBAL_VARIABLE_NODE: u16 = pm_node_type::PM_ALIAS_GLOBAL_VARIABLE_NODE as u16;
const PM_ALIAS_METHOD_NODE: u16 = pm_node_type::PM_ALIAS_METHOD_NODE as u16;
const PM_ALTERNATION_PATTERN_NODE: u16 = pm_node_type::PM_ALTERNATION_PATTERN_NODE as u16;
const PM_AND_NODE: u16 = pm_node_type::PM_AND_NODE as u16;
const PM_ARGUMENTS_NODE: u16 = pm_node_type::PM_ARGUMENTS_NODE as u16;
const PM_ARRAY_NODE: u16 = pm_node_type::PM_ARRAY_NODE as u16;
const PM_ARRAY_PATTERN_NODE: u16 = pm_node_type::PM_ARRAY_PATTERN_NODE as u16;
const PM_ASSOC_NODE: u16 = pm_node_type::PM_ASSOC_NODE as u16;
const PM_ASSOC_SPLAT_NODE: u16 = pm_node_type::PM_ASSOC_SPLAT_NODE as u16;
const PM_BACK_REFERENCE_READ_NODE: u16 = pm_node_type::PM_BACK_REFERENCE_READ_NODE as u16;
const PM_BEGIN_NODE: u16 = pm_node_type::PM_BEGIN_NODE as u16;
const PM_BLOCK_ARGUMENT_NODE: u16 = pm_node_type::PM_BLOCK_ARGUMENT_NODE as u16;
const PM_BLOCK_LOCAL_VARIABLE_NODE: u16 = pm_node_type::PM_BLOCK_LOCAL_VARIABLE_NODE as u16;
const PM_BLOCK_NODE: u16 = pm_node_type::PM_BLOCK_NODE as u16;
const PM_BLOCK_PARAMETER_NODE: u16 = pm_node_type::PM_BLOCK_PARAMETER_NODE as u16;
const PM_BLOCK_PARAMETERS_NODE: u16 = pm_node_type::PM_BLOCK_PARAMETERS_NODE as u16;
const PM_BREAK_NODE: u16 = pm_node_type::PM_BREAK_NODE as u16;
const PM_CALL_AND_WRITE_NODE: u16 = pm_node_type::PM_CALL_AND_WRITE_NODE as u16;
const PM_CALL_NODE: u16 = pm_node_type::PM_CALL_NODE as u16;
const PM_CALL_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CALL_OPERATOR_WRITE_NODE as u16;
const PM_CALL_OR_WRITE_NODE: u16 = pm_node_type::PM_CALL_OR_WRITE_NODE as u16;
const PM_CALL_TARGET_NODE: u16 = pm_node_type::PM_CALL_TARGET_NODE as u16;
const PM_CAPTURE_PATTERN_NODE: u16 = pm_node_type::PM_CAPTURE_PATTERN_NODE as u16;
const PM_CASE_MATCH_NODE: u16 = pm_node_type::PM_CASE_MATCH_NODE as u16;
const PM_CASE_NODE: u16 = pm_node_type::PM_CASE_NODE as u16;
const PM_CLASS_NODE: u16 = pm_node_type::PM_CLASS_NODE as u16;
const PM_CLASS_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_AND_WRITE_NODE as u16;
const PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE as u16;
const PM_CLASS_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_OR_WRITE_NODE as u16;
const PM_CLASS_VARIABLE_READ_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_READ_NODE as u16;
const PM_CLASS_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_TARGET_NODE as u16;
const PM_CLASS_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_CLASS_VARIABLE_WRITE_NODE as u16;
const PM_CONSTANT_AND_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_AND_WRITE_NODE as u16;
const PM_CONSTANT_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_OPERATOR_WRITE_NODE as u16;
const PM_CONSTANT_OR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_OR_WRITE_NODE as u16;
const PM_CONSTANT_PATH_AND_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_AND_WRITE_NODE as u16;
const PM_CONSTANT_PATH_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_NODE as u16;
const PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_OPERATOR_WRITE_NODE as u16;
const PM_CONSTANT_PATH_OR_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_OR_WRITE_NODE as u16;
const PM_CONSTANT_PATH_TARGET_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_TARGET_NODE as u16;
const PM_CONSTANT_PATH_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_PATH_WRITE_NODE as u16;
const PM_CONSTANT_READ_NODE: u16 = pm_node_type::PM_CONSTANT_READ_NODE as u16;
const PM_CONSTANT_TARGET_NODE: u16 = pm_node_type::PM_CONSTANT_TARGET_NODE as u16;
const PM_CONSTANT_WRITE_NODE: u16 = pm_node_type::PM_CONSTANT_WRITE_NODE as u16;
const PM_DEF_NODE: u16 = pm_node_type::PM_DEF_NODE as u16;
const PM_DEFINED_NODE: u16 = pm_node_type::PM_DEFINED_NODE as u16;
const PM_ELSE_NODE: u16 = pm_node_type::PM_ELSE_NODE as u16;
const PM_EMBEDDED_STATEMENTS_NODE: u16 = pm_node_type::PM_EMBEDDED_STATEMENTS_NODE as u16;
const PM_EMBEDDED_VARIABLE_NODE: u16 = pm_node_type::PM_EMBEDDED_VARIABLE_NODE as u16;
const PM_ENSURE_NODE: u16 = pm_node_type::PM_ENSURE_NODE as u16;
const PM_FALSE_NODE: u16 = pm_node_type::PM_FALSE_NODE as u16;
const PM_FIND_PATTERN_NODE: u16 = pm_node_type::PM_FIND_PATTERN_NODE as u16;
const PM_FLIP_FLOP_NODE: u16 = pm_node_type::PM_FLIP_FLOP_NODE as u16;
const PM_FLOAT_NODE: u16 = pm_node_type::PM_FLOAT_NODE as u16;
const PM_FOR_NODE: u16 = pm_node_type::PM_FOR_NODE as u16;
const PM_FORWARDING_ARGUMENTS_NODE: u16 = pm_node_type::PM_FORWARDING_ARGUMENTS_NODE as u16;
const PM_FORWARDING_PARAMETER_NODE: u16 = pm_node_type::PM_FORWARDING_PARAMETER_NODE as u16;
const PM_FORWARDING_SUPER_NODE: u16 = pm_node_type::PM_FORWARDING_SUPER_NODE as u16;
const PM_GLOBAL_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_AND_WRITE_NODE as u16;
const PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE as u16;
const PM_GLOBAL_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_OR_WRITE_NODE as u16;
const PM_GLOBAL_VARIABLE_READ_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_READ_NODE as u16;
const PM_GLOBAL_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_TARGET_NODE as u16;
const PM_GLOBAL_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_GLOBAL_VARIABLE_WRITE_NODE as u16;
const PM_HASH_NODE: u16 = pm_node_type::PM_HASH_NODE as u16;
const PM_HASH_PATTERN_NODE: u16 = pm_node_type::PM_HASH_PATTERN_NODE as u16;
const PM_IF_NODE: u16 = pm_node_type::PM_IF_NODE as u16;
const PM_IMAGINARY_NODE: u16 = pm_node_type::PM_IMAGINARY_NODE as u16;
const PM_IMPLICIT_NODE: u16 = pm_node_type::PM_IMPLICIT_NODE as u16;
const PM_IMPLICIT_REST_NODE: u16 = pm_node_type::PM_IMPLICIT_REST_NODE as u16;
const PM_IN_NODE: u16 = pm_node_type::PM_IN_NODE as u16;
const PM_INDEX_AND_WRITE_NODE: u16 = pm_node_type::PM_INDEX_AND_WRITE_NODE as u16;
const PM_INDEX_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_INDEX_OPERATOR_WRITE_NODE as u16;
const PM_INDEX_OR_WRITE_NODE: u16 = pm_node_type::PM_INDEX_OR_WRITE_NODE as u16;
const PM_INDEX_TARGET_NODE: u16 = pm_node_type::PM_INDEX_TARGET_NODE as u16;
const PM_INSTANCE_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_AND_WRITE_NODE as u16;
const PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE as u16;
const PM_INSTANCE_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_OR_WRITE_NODE as u16;
const PM_INSTANCE_VARIABLE_READ_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_READ_NODE as u16;
const PM_INSTANCE_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_TARGET_NODE as u16;
const PM_INSTANCE_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_INSTANCE_VARIABLE_WRITE_NODE as u16;
const PM_INTEGER_NODE: u16 = pm_node_type::PM_INTEGER_NODE as u16;
const PM_INTERPOLATED_MATCH_LAST_LINE_NODE: u16 = pm_node_type::PM_INTERPOLATED_MATCH_LAST_LINE_NODE as u16;
const PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: u16 = pm_node_type::PM_INTERPOLATED_REGULAR_EXPRESSION_NODE as u16;
const PM_INTERPOLATED_STRING_NODE: u16 = pm_node_type::PM_INTERPOLATED_STRING_NODE as u16;
const PM_INTERPOLATED_SYMBOL_NODE: u16 = pm_node_type::PM_INTERPOLATED_SYMBOL_NODE as u16;
const PM_INTERPOLATED_X_STRING_NODE: u16 = pm_node_type::PM_INTERPOLATED_X_STRING_NODE as u16;
const PM_IT_LOCAL_VARIABLE_READ_NODE: u16 = pm_node_type::PM_IT_LOCAL_VARIABLE_READ_NODE as u16;
const PM_IT_PARAMETERS_NODE: u16 = pm_node_type::PM_IT_PARAMETERS_NODE as u16;
const PM_KEYWORD_HASH_NODE: u16 = pm_node_type::PM_KEYWORD_HASH_NODE as u16;
const PM_KEYWORD_REST_PARAMETER_NODE: u16 = pm_node_type::PM_KEYWORD_REST_PARAMETER_NODE as u16;
const PM_LAMBDA_NODE: u16 = pm_node_type::PM_LAMBDA_NODE as u16;
const PM_LOCAL_VARIABLE_AND_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_AND_WRITE_NODE as u16;
const PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE as u16;
const PM_LOCAL_VARIABLE_OR_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_OR_WRITE_NODE as u16;
const PM_LOCAL_VARIABLE_READ_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_READ_NODE as u16;
const PM_LOCAL_VARIABLE_TARGET_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_TARGET_NODE as u16;
const PM_LOCAL_VARIABLE_WRITE_NODE: u16 = pm_node_type::PM_LOCAL_VARIABLE_WRITE_NODE as u16;
const PM_MATCH_LAST_LINE_NODE: u16 = pm_node_type::PM_MATCH_LAST_LINE_NODE as u16;
const PM_MATCH_PREDICATE_NODE: u16 = pm_node_type::PM_MATCH_PREDICATE_NODE as u16;
const PM_MATCH_REQUIRED_NODE: u16 = pm_node_type::PM_MATCH_REQUIRED_NODE as u16;
const PM_MATCH_WRITE_NODE: u16 = pm_node_type::PM_MATCH_WRITE_NODE as u16;
const PM_MISSING_NODE: u16 = pm_node_type::PM_MISSING_NODE as u16;
const PM_MODULE_NODE: u16 = pm_node_type::PM_MODULE_NODE as u16;
const PM_MULTI_TARGET_NODE: u16 = pm_node_type::PM_MULTI_TARGET_NODE as u16;
const PM_MULTI_WRITE_NODE: u16 = pm_node_type::PM_MULTI_WRITE_NODE as u16;
const PM_NEXT_NODE: u16 = pm_node_type::PM_NEXT_NODE as u16;
const PM_NIL_NODE: u16 = pm_node_type::PM_NIL_NODE as u16;
const PM_NO_KEYWORDS_PARAMETER_NODE: u16 = pm_node_type::PM_NO_KEYWORDS_PARAMETER_NODE as u16;
const PM_NUMBERED_PARAMETERS_NODE: u16 = pm_node_type::PM_NUMBERED_PARAMETERS_NODE as u16;
const PM_NUMBERED_REFERENCE_READ_NODE: u16 = pm_node_type::PM_NUMBERED_REFERENCE_READ_NODE as u16;
const PM_OPTIONAL_KEYWORD_PARAMETER_NODE: u16 = pm_node_type::PM_OPTIONAL_KEYWORD_PARAMETER_NODE as u16;
const PM_OPTIONAL_PARAMETER_NODE: u16 = pm_node_type::PM_OPTIONAL_PARAMETER_NODE as u16;
const PM_OR_NODE: u16 = pm_node_type::PM_OR_NODE as u16;
const PM_PARAMETERS_NODE: u16 = pm_node_type::PM_PARAMETERS_NODE as u16;
const PM_PARENTHESES_NODE: u16 = pm_node_type::PM_PARENTHESES_NODE as u16;
const PM_PINNED_EXPRESSION_NODE: u16 = pm_node_type::PM_PINNED_EXPRESSION_NODE as u16;
const PM_PINNED_VARIABLE_NODE: u16 = pm_node_type::PM_PINNED_VARIABLE_NODE as u16;
const PM_POST_EXECUTION_NODE: u16 = pm_node_type::PM_POST_EXECUTION_NODE as u16;
const PM_PRE_EXECUTION_NODE: u16 = pm_node_type::PM_PRE_EXECUTION_NODE as u16;
const PM_PROGRAM_NODE: u16 = pm_node_type::PM_PROGRAM_NODE as u16;
const PM_RANGE_NODE: u16 = pm_node_type::PM_RANGE_NODE as u16;
const PM_RATIONAL_NODE: u16 = pm_node_type::PM_RATIONAL_NODE as u16;
const PM_REDO_NODE: u16 = pm_node_type::PM_REDO_NODE as u16;
const PM_REGULAR_EXPRESSION_NODE: u16 = pm_node_type::PM_REGULAR_EXPRESSION_NODE as u16;
const PM_REQUIRED_KEYWORD_PARAMETER_NODE: u16 = pm_node_type::PM_REQUIRED_KEYWORD_PARAMETER_NODE as u16;
const PM_REQUIRED_PARAMETER_NODE: u16 = pm_node_type::PM_REQUIRED_PARAMETER_NODE as u16;
const PM_RESCUE_MODIFIER_NODE: u16 = pm_node_type::PM_RESCUE_MODIFIER_NODE as u16;
const PM_RESCUE_NODE: u16 = pm_node_type::PM_RESCUE_NODE as u16;
const PM_REST_PARAMETER_NODE: u16 = pm_node_type::PM_REST_PARAMETER_NODE as u16;
const PM_RETRY_NODE: u16 = pm_node_type::PM_RETRY_NODE as u16;
const PM_RETURN_NODE: u16 = pm_node_type::PM_RETURN_NODE as u16;
const PM_SELF_NODE: u16 = pm_node_type::PM_SELF_NODE as u16;
const PM_SHAREABLE_CONSTANT_NODE: u16 = pm_node_type::PM_SHAREABLE_CONSTANT_NODE as u16;
const PM_SINGLETON_CLASS_NODE: u16 = pm_node_type::PM_SINGLETON_CLASS_NODE as u16;
const PM_SOURCE_ENCODING_NODE: u16 = pm_node_type::PM_SOURCE_ENCODING_NODE as u16;
const PM_SOURCE_FILE_NODE: u16 = pm_node_type::PM_SOURCE_FILE_NODE as u16;
const PM_SOURCE_LINE_NODE: u16 = pm_node_type::PM_SOURCE_LINE_NODE as u16;
const PM_SPLAT_NODE: u16 = pm_node_type::PM_SPLAT_NODE as u16;
const PM_STATEMENTS_NODE: u16 = pm_node_type::PM_STATEMENTS_NODE as u16;
const PM_STRING_NODE: u16 = pm_node_type::PM_STRING_NODE as u16;
const PM_SUPER_NODE: u16 = pm_node_type::PM_SUPER_NODE as u16;
const PM_SYMBOL_NODE: u16 = pm_node_type::PM_SYMBOL_NODE as u16;
const PM_TRUE_NODE: u16 = pm_node_type::PM_TRUE_NODE as u16;
const PM_UNDEF_NODE: u16 = pm_node_type::PM_UNDEF_NODE as u16;
const PM_UNLESS_NODE: u16 = pm_node_type::PM_UNLESS_NODE as u16;
const PM_UNTIL_NODE: u16 = pm_node_type::PM_UNTIL_NODE as u16;
const PM_WHEN_NODE: u16 = pm_node_type::PM_WHEN_NODE as u16;
const PM_WHILE_NODE: u16 = pm_node_type::PM_WHILE_NODE as u16;
const PM_X_STRING_NODE: u16 = pm_node_type::PM_X_STRING_NODE as u16;
const PM_YIELD_NODE: u16 = pm_node_type::PM_YIELD_NODE as u16;
const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING as u16;
const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS as u16;
const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT as u16;
const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT as u16;
const PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS: u16 = pm_arguments_node_flags::PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS as u16;
const PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT: u16 = pm_array_node_flags::PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT as u16;
const PM_CALL_NODE_FLAGS_SAFE_NAVIGATION: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_SAFE_NAVIGATION as u16;
const PM_CALL_NODE_FLAGS_VARIABLE_CALL: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_VARIABLE_CALL as u16;
const PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE as u16;
const PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY: u16 = pm_call_node_flags::PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY as u16;
const PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_encoding_flags::PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING as u16;
const PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_encoding_flags::PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING as u16;
const PM_INTEGER_BASE_FLAGS_BINARY: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_BINARY as u16;
const PM_INTEGER_BASE_FLAGS_DECIMAL: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_DECIMAL as u16;
const PM_INTEGER_BASE_FLAGS_OCTAL: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_OCTAL as u16;
const PM_INTEGER_BASE_FLAGS_HEXADECIMAL: u16 = pm_integer_base_flags::PM_INTEGER_BASE_FLAGS_HEXADECIMAL as u16;
const PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN: u16 = pm_interpolated_string_node_flags::PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN as u16;
const PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE: u16 = pm_interpolated_string_node_flags::PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE as u16;
const PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS: u16 = pm_keyword_hash_node_flags::PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS as u16;
const PM_LOOP_FLAGS_BEGIN_MODIFIER: u16 = pm_loop_flags::PM_LOOP_FLAGS_BEGIN_MODIFIER as u16;
const PM_PARAMETER_FLAGS_REPEATED_PARAMETER: u16 = pm_parameter_flags::PM_PARAMETER_FLAGS_REPEATED_PARAMETER as u16;
const PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS: u16 = pm_parentheses_node_flags::PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS as u16;
const PM_RANGE_FLAGS_EXCLUDE_END: u16 = pm_range_flags::PM_RANGE_FLAGS_EXCLUDE_END as u16;
const PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE as u16;
const PM_REGULAR_EXPRESSION_FLAGS_EXTENDED: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_EXTENDED as u16;
const PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE as u16;
const PM_REGULAR_EXPRESSION_FLAGS_ONCE: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_ONCE as u16;
const PM_REGULAR_EXPRESSION_FLAGS_EUC_JP: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_EUC_JP as u16;
const PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT as u16;
const PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J as u16;
const PM_REGULAR_EXPRESSION_FLAGS_UTF_8: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_UTF_8 as u16;
const PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING as u16;
const PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING as u16;
const PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING: u16 = pm_regular_expression_flags::PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING as u16;
const PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL: u16 = pm_shareable_constant_node_flags::PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL as u16;
const PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING: u16 = pm_shareable_constant_node_flags::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING as u16;
const PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY: u16 = pm_shareable_constant_node_flags::PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY as u16;
const PM_STRING_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_string_flags::PM_STRING_FLAGS_FORCED_UTF8_ENCODING as u16;
const PM_STRING_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_string_flags::PM_STRING_FLAGS_FORCED_BINARY_ENCODING as u16;
const PM_STRING_FLAGS_FROZEN: u16 = pm_string_flags::PM_STRING_FLAGS_FROZEN as u16;
const PM_STRING_FLAGS_MUTABLE: u16 = pm_string_flags::PM_STRING_FLAGS_MUTABLE as u16;
const PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING: u16 = pm_symbol_flags::PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING as u16;
const PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING: u16 = pm_symbol_flags::PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING as u16;
const PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING: u16 = pm_symbol_flags::PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING as u16;
pub enum Node<'pr> {
AliasGlobalVariableNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_alias_global_variable_node_t,
marker: PhantomData<&'pr mut pm_alias_global_variable_node_t>
},
AliasMethodNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_alias_method_node_t,
marker: PhantomData<&'pr mut pm_alias_method_node_t>
},
AlternationPatternNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_alternation_pattern_node_t,
marker: PhantomData<&'pr mut pm_alternation_pattern_node_t>
},
AndNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_and_node_t,
marker: PhantomData<&'pr mut pm_and_node_t>
},
ArgumentsNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_arguments_node_t,
marker: PhantomData<&'pr mut pm_arguments_node_t>
},
ArrayNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_array_node_t,
marker: PhantomData<&'pr mut pm_array_node_t>
},
ArrayPatternNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_array_pattern_node_t,
marker: PhantomData<&'pr mut pm_array_pattern_node_t>
},
AssocNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_assoc_node_t,
marker: PhantomData<&'pr mut pm_assoc_node_t>
},
AssocSplatNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_assoc_splat_node_t,
marker: PhantomData<&'pr mut pm_assoc_splat_node_t>
},
BackReferenceReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_back_reference_read_node_t,
marker: PhantomData<&'pr mut pm_back_reference_read_node_t>
},
BeginNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_begin_node_t,
marker: PhantomData<&'pr mut pm_begin_node_t>
},
BlockArgumentNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_argument_node_t,
marker: PhantomData<&'pr mut pm_block_argument_node_t>
},
BlockLocalVariableNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_local_variable_node_t,
marker: PhantomData<&'pr mut pm_block_local_variable_node_t>
},
BlockNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_node_t,
marker: PhantomData<&'pr mut pm_block_node_t>
},
BlockParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_parameter_node_t,
marker: PhantomData<&'pr mut pm_block_parameter_node_t>
},
BlockParametersNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_parameters_node_t,
marker: PhantomData<&'pr mut pm_block_parameters_node_t>
},
BreakNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_break_node_t,
marker: PhantomData<&'pr mut pm_break_node_t>
},
CallAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_and_write_node_t,
marker: PhantomData<&'pr mut pm_call_and_write_node_t>
},
CallNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_node_t,
marker: PhantomData<&'pr mut pm_call_node_t>
},
CallOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_operator_write_node_t,
marker: PhantomData<&'pr mut pm_call_operator_write_node_t>
},
CallOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_or_write_node_t,
marker: PhantomData<&'pr mut pm_call_or_write_node_t>
},
CallTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_target_node_t,
marker: PhantomData<&'pr mut pm_call_target_node_t>
},
CapturePatternNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_capture_pattern_node_t,
marker: PhantomData<&'pr mut pm_capture_pattern_node_t>
},
CaseMatchNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_case_match_node_t,
marker: PhantomData<&'pr mut pm_case_match_node_t>
},
CaseNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_case_node_t,
marker: PhantomData<&'pr mut pm_case_node_t>
},
ClassNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_node_t,
marker: PhantomData<&'pr mut pm_class_node_t>
},
ClassVariableAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_and_write_node_t>
},
ClassVariableOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_operator_write_node_t>
},
ClassVariableOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_or_write_node_t>
},
ClassVariableReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_read_node_t,
marker: PhantomData<&'pr mut pm_class_variable_read_node_t>
},
ClassVariableTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_target_node_t,
marker: PhantomData<&'pr mut pm_class_variable_target_node_t>
},
ClassVariableWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_write_node_t>
},
ConstantAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_and_write_node_t,
marker: PhantomData<&'pr mut pm_constant_and_write_node_t>
},
ConstantOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_operator_write_node_t,
marker: PhantomData<&'pr mut pm_constant_operator_write_node_t>
},
ConstantOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_or_write_node_t,
marker: PhantomData<&'pr mut pm_constant_or_write_node_t>
},
ConstantPathAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_and_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_and_write_node_t>
},
ConstantPathNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_node_t,
marker: PhantomData<&'pr mut pm_constant_path_node_t>
},
ConstantPathOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_operator_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_operator_write_node_t>
},
ConstantPathOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_or_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_or_write_node_t>
},
ConstantPathTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_target_node_t,
marker: PhantomData<&'pr mut pm_constant_path_target_node_t>
},
ConstantPathWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_write_node_t>
},
ConstantReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_read_node_t,
marker: PhantomData<&'pr mut pm_constant_read_node_t>
},
ConstantTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_target_node_t,
marker: PhantomData<&'pr mut pm_constant_target_node_t>
},
ConstantWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_write_node_t,
marker: PhantomData<&'pr mut pm_constant_write_node_t>
},
DefNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_def_node_t,
marker: PhantomData<&'pr mut pm_def_node_t>
},
DefinedNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_defined_node_t,
marker: PhantomData<&'pr mut pm_defined_node_t>
},
ElseNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_else_node_t,
marker: PhantomData<&'pr mut pm_else_node_t>
},
EmbeddedStatementsNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_embedded_statements_node_t,
marker: PhantomData<&'pr mut pm_embedded_statements_node_t>
},
EmbeddedVariableNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_embedded_variable_node_t,
marker: PhantomData<&'pr mut pm_embedded_variable_node_t>
},
EnsureNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_ensure_node_t,
marker: PhantomData<&'pr mut pm_ensure_node_t>
},
FalseNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_false_node_t,
marker: PhantomData<&'pr mut pm_false_node_t>
},
FindPatternNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_find_pattern_node_t,
marker: PhantomData<&'pr mut pm_find_pattern_node_t>
},
FlipFlopNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_flip_flop_node_t,
marker: PhantomData<&'pr mut pm_flip_flop_node_t>
},
FloatNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_float_node_t,
marker: PhantomData<&'pr mut pm_float_node_t>
},
ForNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_for_node_t,
marker: PhantomData<&'pr mut pm_for_node_t>
},
ForwardingArgumentsNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_forwarding_arguments_node_t,
marker: PhantomData<&'pr mut pm_forwarding_arguments_node_t>
},
ForwardingParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_forwarding_parameter_node_t,
marker: PhantomData<&'pr mut pm_forwarding_parameter_node_t>
},
ForwardingSuperNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_forwarding_super_node_t,
marker: PhantomData<&'pr mut pm_forwarding_super_node_t>
},
GlobalVariableAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_and_write_node_t>
},
GlobalVariableOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_operator_write_node_t>
},
GlobalVariableOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_or_write_node_t>
},
GlobalVariableReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_read_node_t,
marker: PhantomData<&'pr mut pm_global_variable_read_node_t>
},
GlobalVariableTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_target_node_t,
marker: PhantomData<&'pr mut pm_global_variable_target_node_t>
},
GlobalVariableWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_write_node_t>
},
HashNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_hash_node_t,
marker: PhantomData<&'pr mut pm_hash_node_t>
},
HashPatternNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_hash_pattern_node_t,
marker: PhantomData<&'pr mut pm_hash_pattern_node_t>
},
IfNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_if_node_t,
marker: PhantomData<&'pr mut pm_if_node_t>
},
ImaginaryNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_imaginary_node_t,
marker: PhantomData<&'pr mut pm_imaginary_node_t>
},
ImplicitNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_implicit_node_t,
marker: PhantomData<&'pr mut pm_implicit_node_t>
},
ImplicitRestNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_implicit_rest_node_t,
marker: PhantomData<&'pr mut pm_implicit_rest_node_t>
},
InNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_in_node_t,
marker: PhantomData<&'pr mut pm_in_node_t>
},
IndexAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_and_write_node_t,
marker: PhantomData<&'pr mut pm_index_and_write_node_t>
},
IndexOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_operator_write_node_t,
marker: PhantomData<&'pr mut pm_index_operator_write_node_t>
},
IndexOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_or_write_node_t,
marker: PhantomData<&'pr mut pm_index_or_write_node_t>
},
IndexTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_target_node_t,
marker: PhantomData<&'pr mut pm_index_target_node_t>
},
InstanceVariableAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_and_write_node_t>
},
InstanceVariableOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_operator_write_node_t>
},
InstanceVariableOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_or_write_node_t>
},
InstanceVariableReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_read_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_read_node_t>
},
InstanceVariableTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_target_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_target_node_t>
},
InstanceVariableWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_write_node_t>
},
IntegerNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_integer_node_t,
marker: PhantomData<&'pr mut pm_integer_node_t>
},
InterpolatedMatchLastLineNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_match_last_line_node_t,
marker: PhantomData<&'pr mut pm_interpolated_match_last_line_node_t>
},
InterpolatedRegularExpressionNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_regular_expression_node_t,
marker: PhantomData<&'pr mut pm_interpolated_regular_expression_node_t>
},
InterpolatedStringNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_string_node_t,
marker: PhantomData<&'pr mut pm_interpolated_string_node_t>
},
InterpolatedSymbolNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_symbol_node_t,
marker: PhantomData<&'pr mut pm_interpolated_symbol_node_t>
},
InterpolatedXStringNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_x_string_node_t,
marker: PhantomData<&'pr mut pm_interpolated_x_string_node_t>
},
ItLocalVariableReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_it_local_variable_read_node_t,
marker: PhantomData<&'pr mut pm_it_local_variable_read_node_t>
},
ItParametersNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_it_parameters_node_t,
marker: PhantomData<&'pr mut pm_it_parameters_node_t>
},
KeywordHashNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_keyword_hash_node_t,
marker: PhantomData<&'pr mut pm_keyword_hash_node_t>
},
KeywordRestParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_keyword_rest_parameter_node_t,
marker: PhantomData<&'pr mut pm_keyword_rest_parameter_node_t>
},
LambdaNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_lambda_node_t,
marker: PhantomData<&'pr mut pm_lambda_node_t>
},
LocalVariableAndWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_and_write_node_t>
},
LocalVariableOperatorWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_operator_write_node_t>
},
LocalVariableOrWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_or_write_node_t>
},
LocalVariableReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_read_node_t,
marker: PhantomData<&'pr mut pm_local_variable_read_node_t>
},
LocalVariableTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_target_node_t,
marker: PhantomData<&'pr mut pm_local_variable_target_node_t>
},
LocalVariableWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_write_node_t>
},
MatchLastLineNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_last_line_node_t,
marker: PhantomData<&'pr mut pm_match_last_line_node_t>
},
MatchPredicateNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_predicate_node_t,
marker: PhantomData<&'pr mut pm_match_predicate_node_t>
},
MatchRequiredNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_required_node_t,
marker: PhantomData<&'pr mut pm_match_required_node_t>
},
MatchWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_write_node_t,
marker: PhantomData<&'pr mut pm_match_write_node_t>
},
MissingNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_missing_node_t,
marker: PhantomData<&'pr mut pm_missing_node_t>
},
ModuleNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_module_node_t,
marker: PhantomData<&'pr mut pm_module_node_t>
},
MultiTargetNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_multi_target_node_t,
marker: PhantomData<&'pr mut pm_multi_target_node_t>
},
MultiWriteNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_multi_write_node_t,
marker: PhantomData<&'pr mut pm_multi_write_node_t>
},
NextNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_next_node_t,
marker: PhantomData<&'pr mut pm_next_node_t>
},
NilNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_nil_node_t,
marker: PhantomData<&'pr mut pm_nil_node_t>
},
NoKeywordsParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_no_keywords_parameter_node_t,
marker: PhantomData<&'pr mut pm_no_keywords_parameter_node_t>
},
NumberedParametersNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_numbered_parameters_node_t,
marker: PhantomData<&'pr mut pm_numbered_parameters_node_t>
},
NumberedReferenceReadNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_numbered_reference_read_node_t,
marker: PhantomData<&'pr mut pm_numbered_reference_read_node_t>
},
OptionalKeywordParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_optional_keyword_parameter_node_t,
marker: PhantomData<&'pr mut pm_optional_keyword_parameter_node_t>
},
OptionalParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_optional_parameter_node_t,
marker: PhantomData<&'pr mut pm_optional_parameter_node_t>
},
OrNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_or_node_t,
marker: PhantomData<&'pr mut pm_or_node_t>
},
ParametersNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_parameters_node_t,
marker: PhantomData<&'pr mut pm_parameters_node_t>
},
ParenthesesNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_parentheses_node_t,
marker: PhantomData<&'pr mut pm_parentheses_node_t>
},
PinnedExpressionNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_pinned_expression_node_t,
marker: PhantomData<&'pr mut pm_pinned_expression_node_t>
},
PinnedVariableNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_pinned_variable_node_t,
marker: PhantomData<&'pr mut pm_pinned_variable_node_t>
},
PostExecutionNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_post_execution_node_t,
marker: PhantomData<&'pr mut pm_post_execution_node_t>
},
PreExecutionNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_pre_execution_node_t,
marker: PhantomData<&'pr mut pm_pre_execution_node_t>
},
ProgramNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_program_node_t,
marker: PhantomData<&'pr mut pm_program_node_t>
},
RangeNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_range_node_t,
marker: PhantomData<&'pr mut pm_range_node_t>
},
RationalNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rational_node_t,
marker: PhantomData<&'pr mut pm_rational_node_t>
},
RedoNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_redo_node_t,
marker: PhantomData<&'pr mut pm_redo_node_t>
},
RegularExpressionNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_regular_expression_node_t,
marker: PhantomData<&'pr mut pm_regular_expression_node_t>
},
RequiredKeywordParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_required_keyword_parameter_node_t,
marker: PhantomData<&'pr mut pm_required_keyword_parameter_node_t>
},
RequiredParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_required_parameter_node_t,
marker: PhantomData<&'pr mut pm_required_parameter_node_t>
},
RescueModifierNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rescue_modifier_node_t,
marker: PhantomData<&'pr mut pm_rescue_modifier_node_t>
},
RescueNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rescue_node_t,
marker: PhantomData<&'pr mut pm_rescue_node_t>
},
RestParameterNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rest_parameter_node_t,
marker: PhantomData<&'pr mut pm_rest_parameter_node_t>
},
RetryNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_retry_node_t,
marker: PhantomData<&'pr mut pm_retry_node_t>
},
ReturnNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_return_node_t,
marker: PhantomData<&'pr mut pm_return_node_t>
},
SelfNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_self_node_t,
marker: PhantomData<&'pr mut pm_self_node_t>
},
ShareableConstantNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_shareable_constant_node_t,
marker: PhantomData<&'pr mut pm_shareable_constant_node_t>
},
SingletonClassNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_singleton_class_node_t,
marker: PhantomData<&'pr mut pm_singleton_class_node_t>
},
SourceEncodingNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_source_encoding_node_t,
marker: PhantomData<&'pr mut pm_source_encoding_node_t>
},
SourceFileNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_source_file_node_t,
marker: PhantomData<&'pr mut pm_source_file_node_t>
},
SourceLineNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_source_line_node_t,
marker: PhantomData<&'pr mut pm_source_line_node_t>
},
SplatNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_splat_node_t,
marker: PhantomData<&'pr mut pm_splat_node_t>
},
StatementsNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_statements_node_t,
marker: PhantomData<&'pr mut pm_statements_node_t>
},
StringNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_string_node_t,
marker: PhantomData<&'pr mut pm_string_node_t>
},
SuperNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_super_node_t,
marker: PhantomData<&'pr mut pm_super_node_t>
},
SymbolNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_symbol_node_t,
marker: PhantomData<&'pr mut pm_symbol_node_t>
},
TrueNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_true_node_t,
marker: PhantomData<&'pr mut pm_true_node_t>
},
UndefNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_undef_node_t,
marker: PhantomData<&'pr mut pm_undef_node_t>
},
UnlessNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_unless_node_t,
marker: PhantomData<&'pr mut pm_unless_node_t>
},
UntilNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_until_node_t,
marker: PhantomData<&'pr mut pm_until_node_t>
},
WhenNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_when_node_t,
marker: PhantomData<&'pr mut pm_when_node_t>
},
WhileNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_while_node_t,
marker: PhantomData<&'pr mut pm_while_node_t>
},
XStringNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_x_string_node_t,
marker: PhantomData<&'pr mut pm_x_string_node_t>
},
YieldNode {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_yield_node_t,
marker: PhantomData<&'pr mut pm_yield_node_t>
},
}
impl<'pr> Node<'pr> {
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub(crate) fn new(parser: NonNull<pm_parser_t>, node: *mut pm_node_t) -> Self {
match unsafe { (*node).type_ } {
PM_ALIAS_GLOBAL_VARIABLE_NODE => Self::AliasGlobalVariableNode { parser, pointer: node.cast::<pm_alias_global_variable_node_t>(), marker: PhantomData },
PM_ALIAS_METHOD_NODE => Self::AliasMethodNode { parser, pointer: node.cast::<pm_alias_method_node_t>(), marker: PhantomData },
PM_ALTERNATION_PATTERN_NODE => Self::AlternationPatternNode { parser, pointer: node.cast::<pm_alternation_pattern_node_t>(), marker: PhantomData },
PM_AND_NODE => Self::AndNode { parser, pointer: node.cast::<pm_and_node_t>(), marker: PhantomData },
PM_ARGUMENTS_NODE => Self::ArgumentsNode { parser, pointer: node.cast::<pm_arguments_node_t>(), marker: PhantomData },
PM_ARRAY_NODE => Self::ArrayNode { parser, pointer: node.cast::<pm_array_node_t>(), marker: PhantomData },
PM_ARRAY_PATTERN_NODE => Self::ArrayPatternNode { parser, pointer: node.cast::<pm_array_pattern_node_t>(), marker: PhantomData },
PM_ASSOC_NODE => Self::AssocNode { parser, pointer: node.cast::<pm_assoc_node_t>(), marker: PhantomData },
PM_ASSOC_SPLAT_NODE => Self::AssocSplatNode { parser, pointer: node.cast::<pm_assoc_splat_node_t>(), marker: PhantomData },
PM_BACK_REFERENCE_READ_NODE => Self::BackReferenceReadNode { parser, pointer: node.cast::<pm_back_reference_read_node_t>(), marker: PhantomData },
PM_BEGIN_NODE => Self::BeginNode { parser, pointer: node.cast::<pm_begin_node_t>(), marker: PhantomData },
PM_BLOCK_ARGUMENT_NODE => Self::BlockArgumentNode { parser, pointer: node.cast::<pm_block_argument_node_t>(), marker: PhantomData },
PM_BLOCK_LOCAL_VARIABLE_NODE => Self::BlockLocalVariableNode { parser, pointer: node.cast::<pm_block_local_variable_node_t>(), marker: PhantomData },
PM_BLOCK_NODE => Self::BlockNode { parser, pointer: node.cast::<pm_block_node_t>(), marker: PhantomData },
PM_BLOCK_PARAMETER_NODE => Self::BlockParameterNode { parser, pointer: node.cast::<pm_block_parameter_node_t>(), marker: PhantomData },
PM_BLOCK_PARAMETERS_NODE => Self::BlockParametersNode { parser, pointer: node.cast::<pm_block_parameters_node_t>(), marker: PhantomData },
PM_BREAK_NODE => Self::BreakNode { parser, pointer: node.cast::<pm_break_node_t>(), marker: PhantomData },
PM_CALL_AND_WRITE_NODE => Self::CallAndWriteNode { parser, pointer: node.cast::<pm_call_and_write_node_t>(), marker: PhantomData },
PM_CALL_NODE => Self::CallNode { parser, pointer: node.cast::<pm_call_node_t>(), marker: PhantomData },
PM_CALL_OPERATOR_WRITE_NODE => Self::CallOperatorWriteNode { parser, pointer: node.cast::<pm_call_operator_write_node_t>(), marker: PhantomData },
PM_CALL_OR_WRITE_NODE => Self::CallOrWriteNode { parser, pointer: node.cast::<pm_call_or_write_node_t>(), marker: PhantomData },
PM_CALL_TARGET_NODE => Self::CallTargetNode { parser, pointer: node.cast::<pm_call_target_node_t>(), marker: PhantomData },
PM_CAPTURE_PATTERN_NODE => Self::CapturePatternNode { parser, pointer: node.cast::<pm_capture_pattern_node_t>(), marker: PhantomData },
PM_CASE_MATCH_NODE => Self::CaseMatchNode { parser, pointer: node.cast::<pm_case_match_node_t>(), marker: PhantomData },
PM_CASE_NODE => Self::CaseNode { parser, pointer: node.cast::<pm_case_node_t>(), marker: PhantomData },
PM_CLASS_NODE => Self::ClassNode { parser, pointer: node.cast::<pm_class_node_t>(), marker: PhantomData },
PM_CLASS_VARIABLE_AND_WRITE_NODE => Self::ClassVariableAndWriteNode { parser, pointer: node.cast::<pm_class_variable_and_write_node_t>(), marker: PhantomData },
PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE => Self::ClassVariableOperatorWriteNode { parser, pointer: node.cast::<pm_class_variable_operator_write_node_t>(), marker: PhantomData },
PM_CLASS_VARIABLE_OR_WRITE_NODE => Self::ClassVariableOrWriteNode { parser, pointer: node.cast::<pm_class_variable_or_write_node_t>(), marker: PhantomData },
PM_CLASS_VARIABLE_READ_NODE => Self::ClassVariableReadNode { parser, pointer: node.cast::<pm_class_variable_read_node_t>(), marker: PhantomData },
PM_CLASS_VARIABLE_TARGET_NODE => Self::ClassVariableTargetNode { parser, pointer: node.cast::<pm_class_variable_target_node_t>(), marker: PhantomData },
PM_CLASS_VARIABLE_WRITE_NODE => Self::ClassVariableWriteNode { parser, pointer: node.cast::<pm_class_variable_write_node_t>(), marker: PhantomData },
PM_CONSTANT_AND_WRITE_NODE => Self::ConstantAndWriteNode { parser, pointer: node.cast::<pm_constant_and_write_node_t>(), marker: PhantomData },
PM_CONSTANT_OPERATOR_WRITE_NODE => Self::ConstantOperatorWriteNode { parser, pointer: node.cast::<pm_constant_operator_write_node_t>(), marker: PhantomData },
PM_CONSTANT_OR_WRITE_NODE => Self::ConstantOrWriteNode { parser, pointer: node.cast::<pm_constant_or_write_node_t>(), marker: PhantomData },
PM_CONSTANT_PATH_AND_WRITE_NODE => Self::ConstantPathAndWriteNode { parser, pointer: node.cast::<pm_constant_path_and_write_node_t>(), marker: PhantomData },
PM_CONSTANT_PATH_NODE => Self::ConstantPathNode { parser, pointer: node.cast::<pm_constant_path_node_t>(), marker: PhantomData },
PM_CONSTANT_PATH_OPERATOR_WRITE_NODE => Self::ConstantPathOperatorWriteNode { parser, pointer: node.cast::<pm_constant_path_operator_write_node_t>(), marker: PhantomData },
PM_CONSTANT_PATH_OR_WRITE_NODE => Self::ConstantPathOrWriteNode { parser, pointer: node.cast::<pm_constant_path_or_write_node_t>(), marker: PhantomData },
PM_CONSTANT_PATH_TARGET_NODE => Self::ConstantPathTargetNode { parser, pointer: node.cast::<pm_constant_path_target_node_t>(), marker: PhantomData },
PM_CONSTANT_PATH_WRITE_NODE => Self::ConstantPathWriteNode { parser, pointer: node.cast::<pm_constant_path_write_node_t>(), marker: PhantomData },
PM_CONSTANT_READ_NODE => Self::ConstantReadNode { parser, pointer: node.cast::<pm_constant_read_node_t>(), marker: PhantomData },
PM_CONSTANT_TARGET_NODE => Self::ConstantTargetNode { parser, pointer: node.cast::<pm_constant_target_node_t>(), marker: PhantomData },
PM_CONSTANT_WRITE_NODE => Self::ConstantWriteNode { parser, pointer: node.cast::<pm_constant_write_node_t>(), marker: PhantomData },
PM_DEF_NODE => Self::DefNode { parser, pointer: node.cast::<pm_def_node_t>(), marker: PhantomData },
PM_DEFINED_NODE => Self::DefinedNode { parser, pointer: node.cast::<pm_defined_node_t>(), marker: PhantomData },
PM_ELSE_NODE => Self::ElseNode { parser, pointer: node.cast::<pm_else_node_t>(), marker: PhantomData },
PM_EMBEDDED_STATEMENTS_NODE => Self::EmbeddedStatementsNode { parser, pointer: node.cast::<pm_embedded_statements_node_t>(), marker: PhantomData },
PM_EMBEDDED_VARIABLE_NODE => Self::EmbeddedVariableNode { parser, pointer: node.cast::<pm_embedded_variable_node_t>(), marker: PhantomData },
PM_ENSURE_NODE => Self::EnsureNode { parser, pointer: node.cast::<pm_ensure_node_t>(), marker: PhantomData },
PM_FALSE_NODE => Self::FalseNode { parser, pointer: node.cast::<pm_false_node_t>(), marker: PhantomData },
PM_FIND_PATTERN_NODE => Self::FindPatternNode { parser, pointer: node.cast::<pm_find_pattern_node_t>(), marker: PhantomData },
PM_FLIP_FLOP_NODE => Self::FlipFlopNode { parser, pointer: node.cast::<pm_flip_flop_node_t>(), marker: PhantomData },
PM_FLOAT_NODE => Self::FloatNode { parser, pointer: node.cast::<pm_float_node_t>(), marker: PhantomData },
PM_FOR_NODE => Self::ForNode { parser, pointer: node.cast::<pm_for_node_t>(), marker: PhantomData },
PM_FORWARDING_ARGUMENTS_NODE => Self::ForwardingArgumentsNode { parser, pointer: node.cast::<pm_forwarding_arguments_node_t>(), marker: PhantomData },
PM_FORWARDING_PARAMETER_NODE => Self::ForwardingParameterNode { parser, pointer: node.cast::<pm_forwarding_parameter_node_t>(), marker: PhantomData },
PM_FORWARDING_SUPER_NODE => Self::ForwardingSuperNode { parser, pointer: node.cast::<pm_forwarding_super_node_t>(), marker: PhantomData },
PM_GLOBAL_VARIABLE_AND_WRITE_NODE => Self::GlobalVariableAndWriteNode { parser, pointer: node.cast::<pm_global_variable_and_write_node_t>(), marker: PhantomData },
PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE => Self::GlobalVariableOperatorWriteNode { parser, pointer: node.cast::<pm_global_variable_operator_write_node_t>(), marker: PhantomData },
PM_GLOBAL_VARIABLE_OR_WRITE_NODE => Self::GlobalVariableOrWriteNode { parser, pointer: node.cast::<pm_global_variable_or_write_node_t>(), marker: PhantomData },
PM_GLOBAL_VARIABLE_READ_NODE => Self::GlobalVariableReadNode { parser, pointer: node.cast::<pm_global_variable_read_node_t>(), marker: PhantomData },
PM_GLOBAL_VARIABLE_TARGET_NODE => Self::GlobalVariableTargetNode { parser, pointer: node.cast::<pm_global_variable_target_node_t>(), marker: PhantomData },
PM_GLOBAL_VARIABLE_WRITE_NODE => Self::GlobalVariableWriteNode { parser, pointer: node.cast::<pm_global_variable_write_node_t>(), marker: PhantomData },
PM_HASH_NODE => Self::HashNode { parser, pointer: node.cast::<pm_hash_node_t>(), marker: PhantomData },
PM_HASH_PATTERN_NODE => Self::HashPatternNode { parser, pointer: node.cast::<pm_hash_pattern_node_t>(), marker: PhantomData },
PM_IF_NODE => Self::IfNode { parser, pointer: node.cast::<pm_if_node_t>(), marker: PhantomData },
PM_IMAGINARY_NODE => Self::ImaginaryNode { parser, pointer: node.cast::<pm_imaginary_node_t>(), marker: PhantomData },
PM_IMPLICIT_NODE => Self::ImplicitNode { parser, pointer: node.cast::<pm_implicit_node_t>(), marker: PhantomData },
PM_IMPLICIT_REST_NODE => Self::ImplicitRestNode { parser, pointer: node.cast::<pm_implicit_rest_node_t>(), marker: PhantomData },
PM_IN_NODE => Self::InNode { parser, pointer: node.cast::<pm_in_node_t>(), marker: PhantomData },
PM_INDEX_AND_WRITE_NODE => Self::IndexAndWriteNode { parser, pointer: node.cast::<pm_index_and_write_node_t>(), marker: PhantomData },
PM_INDEX_OPERATOR_WRITE_NODE => Self::IndexOperatorWriteNode { parser, pointer: node.cast::<pm_index_operator_write_node_t>(), marker: PhantomData },
PM_INDEX_OR_WRITE_NODE => Self::IndexOrWriteNode { parser, pointer: node.cast::<pm_index_or_write_node_t>(), marker: PhantomData },
PM_INDEX_TARGET_NODE => Self::IndexTargetNode { parser, pointer: node.cast::<pm_index_target_node_t>(), marker: PhantomData },
PM_INSTANCE_VARIABLE_AND_WRITE_NODE => Self::InstanceVariableAndWriteNode { parser, pointer: node.cast::<pm_instance_variable_and_write_node_t>(), marker: PhantomData },
PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE => Self::InstanceVariableOperatorWriteNode { parser, pointer: node.cast::<pm_instance_variable_operator_write_node_t>(), marker: PhantomData },
PM_INSTANCE_VARIABLE_OR_WRITE_NODE => Self::InstanceVariableOrWriteNode { parser, pointer: node.cast::<pm_instance_variable_or_write_node_t>(), marker: PhantomData },
PM_INSTANCE_VARIABLE_READ_NODE => Self::InstanceVariableReadNode { parser, pointer: node.cast::<pm_instance_variable_read_node_t>(), marker: PhantomData },
PM_INSTANCE_VARIABLE_TARGET_NODE => Self::InstanceVariableTargetNode { parser, pointer: node.cast::<pm_instance_variable_target_node_t>(), marker: PhantomData },
PM_INSTANCE_VARIABLE_WRITE_NODE => Self::InstanceVariableWriteNode { parser, pointer: node.cast::<pm_instance_variable_write_node_t>(), marker: PhantomData },
PM_INTEGER_NODE => Self::IntegerNode { parser, pointer: node.cast::<pm_integer_node_t>(), marker: PhantomData },
PM_INTERPOLATED_MATCH_LAST_LINE_NODE => Self::InterpolatedMatchLastLineNode { parser, pointer: node.cast::<pm_interpolated_match_last_line_node_t>(), marker: PhantomData },
PM_INTERPOLATED_REGULAR_EXPRESSION_NODE => Self::InterpolatedRegularExpressionNode { parser, pointer: node.cast::<pm_interpolated_regular_expression_node_t>(), marker: PhantomData },
PM_INTERPOLATED_STRING_NODE => Self::InterpolatedStringNode { parser, pointer: node.cast::<pm_interpolated_string_node_t>(), marker: PhantomData },
PM_INTERPOLATED_SYMBOL_NODE => Self::InterpolatedSymbolNode { parser, pointer: node.cast::<pm_interpolated_symbol_node_t>(), marker: PhantomData },
PM_INTERPOLATED_X_STRING_NODE => Self::InterpolatedXStringNode { parser, pointer: node.cast::<pm_interpolated_x_string_node_t>(), marker: PhantomData },
PM_IT_LOCAL_VARIABLE_READ_NODE => Self::ItLocalVariableReadNode { parser, pointer: node.cast::<pm_it_local_variable_read_node_t>(), marker: PhantomData },
PM_IT_PARAMETERS_NODE => Self::ItParametersNode { parser, pointer: node.cast::<pm_it_parameters_node_t>(), marker: PhantomData },
PM_KEYWORD_HASH_NODE => Self::KeywordHashNode { parser, pointer: node.cast::<pm_keyword_hash_node_t>(), marker: PhantomData },
PM_KEYWORD_REST_PARAMETER_NODE => Self::KeywordRestParameterNode { parser, pointer: node.cast::<pm_keyword_rest_parameter_node_t>(), marker: PhantomData },
PM_LAMBDA_NODE => Self::LambdaNode { parser, pointer: node.cast::<pm_lambda_node_t>(), marker: PhantomData },
PM_LOCAL_VARIABLE_AND_WRITE_NODE => Self::LocalVariableAndWriteNode { parser, pointer: node.cast::<pm_local_variable_and_write_node_t>(), marker: PhantomData },
PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE => Self::LocalVariableOperatorWriteNode { parser, pointer: node.cast::<pm_local_variable_operator_write_node_t>(), marker: PhantomData },
PM_LOCAL_VARIABLE_OR_WRITE_NODE => Self::LocalVariableOrWriteNode { parser, pointer: node.cast::<pm_local_variable_or_write_node_t>(), marker: PhantomData },
PM_LOCAL_VARIABLE_READ_NODE => Self::LocalVariableReadNode { parser, pointer: node.cast::<pm_local_variable_read_node_t>(), marker: PhantomData },
PM_LOCAL_VARIABLE_TARGET_NODE => Self::LocalVariableTargetNode { parser, pointer: node.cast::<pm_local_variable_target_node_t>(), marker: PhantomData },
PM_LOCAL_VARIABLE_WRITE_NODE => Self::LocalVariableWriteNode { parser, pointer: node.cast::<pm_local_variable_write_node_t>(), marker: PhantomData },
PM_MATCH_LAST_LINE_NODE => Self::MatchLastLineNode { parser, pointer: node.cast::<pm_match_last_line_node_t>(), marker: PhantomData },
PM_MATCH_PREDICATE_NODE => Self::MatchPredicateNode { parser, pointer: node.cast::<pm_match_predicate_node_t>(), marker: PhantomData },
PM_MATCH_REQUIRED_NODE => Self::MatchRequiredNode { parser, pointer: node.cast::<pm_match_required_node_t>(), marker: PhantomData },
PM_MATCH_WRITE_NODE => Self::MatchWriteNode { parser, pointer: node.cast::<pm_match_write_node_t>(), marker: PhantomData },
PM_MISSING_NODE => Self::MissingNode { parser, pointer: node.cast::<pm_missing_node_t>(), marker: PhantomData },
PM_MODULE_NODE => Self::ModuleNode { parser, pointer: node.cast::<pm_module_node_t>(), marker: PhantomData },
PM_MULTI_TARGET_NODE => Self::MultiTargetNode { parser, pointer: node.cast::<pm_multi_target_node_t>(), marker: PhantomData },
PM_MULTI_WRITE_NODE => Self::MultiWriteNode { parser, pointer: node.cast::<pm_multi_write_node_t>(), marker: PhantomData },
PM_NEXT_NODE => Self::NextNode { parser, pointer: node.cast::<pm_next_node_t>(), marker: PhantomData },
PM_NIL_NODE => Self::NilNode { parser, pointer: node.cast::<pm_nil_node_t>(), marker: PhantomData },
PM_NO_KEYWORDS_PARAMETER_NODE => Self::NoKeywordsParameterNode { parser, pointer: node.cast::<pm_no_keywords_parameter_node_t>(), marker: PhantomData },
PM_NUMBERED_PARAMETERS_NODE => Self::NumberedParametersNode { parser, pointer: node.cast::<pm_numbered_parameters_node_t>(), marker: PhantomData },
PM_NUMBERED_REFERENCE_READ_NODE => Self::NumberedReferenceReadNode { parser, pointer: node.cast::<pm_numbered_reference_read_node_t>(), marker: PhantomData },
PM_OPTIONAL_KEYWORD_PARAMETER_NODE => Self::OptionalKeywordParameterNode { parser, pointer: node.cast::<pm_optional_keyword_parameter_node_t>(), marker: PhantomData },
PM_OPTIONAL_PARAMETER_NODE => Self::OptionalParameterNode { parser, pointer: node.cast::<pm_optional_parameter_node_t>(), marker: PhantomData },
PM_OR_NODE => Self::OrNode { parser, pointer: node.cast::<pm_or_node_t>(), marker: PhantomData },
PM_PARAMETERS_NODE => Self::ParametersNode { parser, pointer: node.cast::<pm_parameters_node_t>(), marker: PhantomData },
PM_PARENTHESES_NODE => Self::ParenthesesNode { parser, pointer: node.cast::<pm_parentheses_node_t>(), marker: PhantomData },
PM_PINNED_EXPRESSION_NODE => Self::PinnedExpressionNode { parser, pointer: node.cast::<pm_pinned_expression_node_t>(), marker: PhantomData },
PM_PINNED_VARIABLE_NODE => Self::PinnedVariableNode { parser, pointer: node.cast::<pm_pinned_variable_node_t>(), marker: PhantomData },
PM_POST_EXECUTION_NODE => Self::PostExecutionNode { parser, pointer: node.cast::<pm_post_execution_node_t>(), marker: PhantomData },
PM_PRE_EXECUTION_NODE => Self::PreExecutionNode { parser, pointer: node.cast::<pm_pre_execution_node_t>(), marker: PhantomData },
PM_PROGRAM_NODE => Self::ProgramNode { parser, pointer: node.cast::<pm_program_node_t>(), marker: PhantomData },
PM_RANGE_NODE => Self::RangeNode { parser, pointer: node.cast::<pm_range_node_t>(), marker: PhantomData },
PM_RATIONAL_NODE => Self::RationalNode { parser, pointer: node.cast::<pm_rational_node_t>(), marker: PhantomData },
PM_REDO_NODE => Self::RedoNode { parser, pointer: node.cast::<pm_redo_node_t>(), marker: PhantomData },
PM_REGULAR_EXPRESSION_NODE => Self::RegularExpressionNode { parser, pointer: node.cast::<pm_regular_expression_node_t>(), marker: PhantomData },
PM_REQUIRED_KEYWORD_PARAMETER_NODE => Self::RequiredKeywordParameterNode { parser, pointer: node.cast::<pm_required_keyword_parameter_node_t>(), marker: PhantomData },
PM_REQUIRED_PARAMETER_NODE => Self::RequiredParameterNode { parser, pointer: node.cast::<pm_required_parameter_node_t>(), marker: PhantomData },
PM_RESCUE_MODIFIER_NODE => Self::RescueModifierNode { parser, pointer: node.cast::<pm_rescue_modifier_node_t>(), marker: PhantomData },
PM_RESCUE_NODE => Self::RescueNode { parser, pointer: node.cast::<pm_rescue_node_t>(), marker: PhantomData },
PM_REST_PARAMETER_NODE => Self::RestParameterNode { parser, pointer: node.cast::<pm_rest_parameter_node_t>(), marker: PhantomData },
PM_RETRY_NODE => Self::RetryNode { parser, pointer: node.cast::<pm_retry_node_t>(), marker: PhantomData },
PM_RETURN_NODE => Self::ReturnNode { parser, pointer: node.cast::<pm_return_node_t>(), marker: PhantomData },
PM_SELF_NODE => Self::SelfNode { parser, pointer: node.cast::<pm_self_node_t>(), marker: PhantomData },
PM_SHAREABLE_CONSTANT_NODE => Self::ShareableConstantNode { parser, pointer: node.cast::<pm_shareable_constant_node_t>(), marker: PhantomData },
PM_SINGLETON_CLASS_NODE => Self::SingletonClassNode { parser, pointer: node.cast::<pm_singleton_class_node_t>(), marker: PhantomData },
PM_SOURCE_ENCODING_NODE => Self::SourceEncodingNode { parser, pointer: node.cast::<pm_source_encoding_node_t>(), marker: PhantomData },
PM_SOURCE_FILE_NODE => Self::SourceFileNode { parser, pointer: node.cast::<pm_source_file_node_t>(), marker: PhantomData },
PM_SOURCE_LINE_NODE => Self::SourceLineNode { parser, pointer: node.cast::<pm_source_line_node_t>(), marker: PhantomData },
PM_SPLAT_NODE => Self::SplatNode { parser, pointer: node.cast::<pm_splat_node_t>(), marker: PhantomData },
PM_STATEMENTS_NODE => Self::StatementsNode { parser, pointer: node.cast::<pm_statements_node_t>(), marker: PhantomData },
PM_STRING_NODE => Self::StringNode { parser, pointer: node.cast::<pm_string_node_t>(), marker: PhantomData },
PM_SUPER_NODE => Self::SuperNode { parser, pointer: node.cast::<pm_super_node_t>(), marker: PhantomData },
PM_SYMBOL_NODE => Self::SymbolNode { parser, pointer: node.cast::<pm_symbol_node_t>(), marker: PhantomData },
PM_TRUE_NODE => Self::TrueNode { parser, pointer: node.cast::<pm_true_node_t>(), marker: PhantomData },
PM_UNDEF_NODE => Self::UndefNode { parser, pointer: node.cast::<pm_undef_node_t>(), marker: PhantomData },
PM_UNLESS_NODE => Self::UnlessNode { parser, pointer: node.cast::<pm_unless_node_t>(), marker: PhantomData },
PM_UNTIL_NODE => Self::UntilNode { parser, pointer: node.cast::<pm_until_node_t>(), marker: PhantomData },
PM_WHEN_NODE => Self::WhenNode { parser, pointer: node.cast::<pm_when_node_t>(), marker: PhantomData },
PM_WHILE_NODE => Self::WhileNode { parser, pointer: node.cast::<pm_while_node_t>(), marker: PhantomData },
PM_X_STRING_NODE => Self::XStringNode { parser, pointer: node.cast::<pm_x_string_node_t>(), marker: PhantomData },
PM_YIELD_NODE => Self::YieldNode { parser, pointer: node.cast::<pm_yield_node_t>(), marker: PhantomData },
_ => panic!("Unknown node type: {}", unsafe { (*node).type_ })
}
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
match *self {
Self::AliasGlobalVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::AliasMethodNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::AlternationPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::AndNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ArgumentsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ArrayNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ArrayPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::AssocNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::AssocSplatNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BackReferenceReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BeginNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BlockArgumentNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BlockLocalVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BlockNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BlockParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BlockParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::BreakNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CallAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CallNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CallOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CallOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CallTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CapturePatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CaseMatchNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::CaseNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ClassVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantPathAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantPathNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantPathOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantPathOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantPathTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantPathWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ConstantWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::DefNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::DefinedNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ElseNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::EmbeddedStatementsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::EmbeddedVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::EnsureNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::FalseNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::FindPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::FlipFlopNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::FloatNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ForNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ForwardingArgumentsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ForwardingParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ForwardingSuperNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::GlobalVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::GlobalVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::GlobalVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::GlobalVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::GlobalVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::GlobalVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::HashNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::HashPatternNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::IfNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ImaginaryNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ImplicitNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ImplicitRestNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::IndexAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::IndexOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::IndexOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::IndexTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InstanceVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InstanceVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InstanceVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InstanceVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InstanceVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InstanceVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::IntegerNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InterpolatedMatchLastLineNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InterpolatedRegularExpressionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InterpolatedStringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InterpolatedSymbolNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::InterpolatedXStringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ItLocalVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ItParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::KeywordHashNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::KeywordRestParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LambdaNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LocalVariableAndWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LocalVariableOperatorWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LocalVariableOrWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LocalVariableReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LocalVariableTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::LocalVariableWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MatchLastLineNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MatchPredicateNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MatchRequiredNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MatchWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MissingNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ModuleNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MultiTargetNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::MultiWriteNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::NextNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::NilNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::NoKeywordsParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::NumberedParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::NumberedReferenceReadNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::OptionalKeywordParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::OptionalParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::OrNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ParametersNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ParenthesesNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::PinnedExpressionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::PinnedVariableNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::PostExecutionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::PreExecutionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ProgramNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RangeNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RationalNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RedoNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RegularExpressionNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RequiredKeywordParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RequiredParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RescueModifierNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RescueNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RestParameterNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::RetryNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ReturnNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SelfNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::ShareableConstantNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SingletonClassNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SourceEncodingNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SourceFileNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SourceLineNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SplatNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::StatementsNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::StringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SuperNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::SymbolNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::TrueNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::UndefNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::UnlessNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::UntilNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::WhenNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::WhileNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::XStringNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
Self::YieldNode { pointer, parser, .. } => Location::new(parser, unsafe { &((*pointer.cast::<pm_node_t>()).location) }),
}
}
#[must_use]
pub fn as_alias_global_variable_node(&self) -> Option<AliasGlobalVariableNode<'pr>> {
match *self {
Self::AliasGlobalVariableNode { parser, pointer, marker } => Some(AliasGlobalVariableNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_alias_method_node(&self) -> Option<AliasMethodNode<'pr>> {
match *self {
Self::AliasMethodNode { parser, pointer, marker } => Some(AliasMethodNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_alternation_pattern_node(&self) -> Option<AlternationPatternNode<'pr>> {
match *self {
Self::AlternationPatternNode { parser, pointer, marker } => Some(AlternationPatternNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_and_node(&self) -> Option<AndNode<'pr>> {
match *self {
Self::AndNode { parser, pointer, marker } => Some(AndNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_arguments_node(&self) -> Option<ArgumentsNode<'pr>> {
match *self {
Self::ArgumentsNode { parser, pointer, marker } => Some(ArgumentsNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_array_node(&self) -> Option<ArrayNode<'pr>> {
match *self {
Self::ArrayNode { parser, pointer, marker } => Some(ArrayNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_array_pattern_node(&self) -> Option<ArrayPatternNode<'pr>> {
match *self {
Self::ArrayPatternNode { parser, pointer, marker } => Some(ArrayPatternNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_assoc_node(&self) -> Option<AssocNode<'pr>> {
match *self {
Self::AssocNode { parser, pointer, marker } => Some(AssocNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_assoc_splat_node(&self) -> Option<AssocSplatNode<'pr>> {
match *self {
Self::AssocSplatNode { parser, pointer, marker } => Some(AssocSplatNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_back_reference_read_node(&self) -> Option<BackReferenceReadNode<'pr>> {
match *self {
Self::BackReferenceReadNode { parser, pointer, marker } => Some(BackReferenceReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_begin_node(&self) -> Option<BeginNode<'pr>> {
match *self {
Self::BeginNode { parser, pointer, marker } => Some(BeginNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_block_argument_node(&self) -> Option<BlockArgumentNode<'pr>> {
match *self {
Self::BlockArgumentNode { parser, pointer, marker } => Some(BlockArgumentNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_block_local_variable_node(&self) -> Option<BlockLocalVariableNode<'pr>> {
match *self {
Self::BlockLocalVariableNode { parser, pointer, marker } => Some(BlockLocalVariableNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_block_node(&self) -> Option<BlockNode<'pr>> {
match *self {
Self::BlockNode { parser, pointer, marker } => Some(BlockNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_block_parameter_node(&self) -> Option<BlockParameterNode<'pr>> {
match *self {
Self::BlockParameterNode { parser, pointer, marker } => Some(BlockParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_block_parameters_node(&self) -> Option<BlockParametersNode<'pr>> {
match *self {
Self::BlockParametersNode { parser, pointer, marker } => Some(BlockParametersNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_break_node(&self) -> Option<BreakNode<'pr>> {
match *self {
Self::BreakNode { parser, pointer, marker } => Some(BreakNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_call_and_write_node(&self) -> Option<CallAndWriteNode<'pr>> {
match *self {
Self::CallAndWriteNode { parser, pointer, marker } => Some(CallAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_call_node(&self) -> Option<CallNode<'pr>> {
match *self {
Self::CallNode { parser, pointer, marker } => Some(CallNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_call_operator_write_node(&self) -> Option<CallOperatorWriteNode<'pr>> {
match *self {
Self::CallOperatorWriteNode { parser, pointer, marker } => Some(CallOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_call_or_write_node(&self) -> Option<CallOrWriteNode<'pr>> {
match *self {
Self::CallOrWriteNode { parser, pointer, marker } => Some(CallOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_call_target_node(&self) -> Option<CallTargetNode<'pr>> {
match *self {
Self::CallTargetNode { parser, pointer, marker } => Some(CallTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_capture_pattern_node(&self) -> Option<CapturePatternNode<'pr>> {
match *self {
Self::CapturePatternNode { parser, pointer, marker } => Some(CapturePatternNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_case_match_node(&self) -> Option<CaseMatchNode<'pr>> {
match *self {
Self::CaseMatchNode { parser, pointer, marker } => Some(CaseMatchNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_case_node(&self) -> Option<CaseNode<'pr>> {
match *self {
Self::CaseNode { parser, pointer, marker } => Some(CaseNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_node(&self) -> Option<ClassNode<'pr>> {
match *self {
Self::ClassNode { parser, pointer, marker } => Some(ClassNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_variable_and_write_node(&self) -> Option<ClassVariableAndWriteNode<'pr>> {
match *self {
Self::ClassVariableAndWriteNode { parser, pointer, marker } => Some(ClassVariableAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_variable_operator_write_node(&self) -> Option<ClassVariableOperatorWriteNode<'pr>> {
match *self {
Self::ClassVariableOperatorWriteNode { parser, pointer, marker } => Some(ClassVariableOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_variable_or_write_node(&self) -> Option<ClassVariableOrWriteNode<'pr>> {
match *self {
Self::ClassVariableOrWriteNode { parser, pointer, marker } => Some(ClassVariableOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_variable_read_node(&self) -> Option<ClassVariableReadNode<'pr>> {
match *self {
Self::ClassVariableReadNode { parser, pointer, marker } => Some(ClassVariableReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_variable_target_node(&self) -> Option<ClassVariableTargetNode<'pr>> {
match *self {
Self::ClassVariableTargetNode { parser, pointer, marker } => Some(ClassVariableTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_class_variable_write_node(&self) -> Option<ClassVariableWriteNode<'pr>> {
match *self {
Self::ClassVariableWriteNode { parser, pointer, marker } => Some(ClassVariableWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_and_write_node(&self) -> Option<ConstantAndWriteNode<'pr>> {
match *self {
Self::ConstantAndWriteNode { parser, pointer, marker } => Some(ConstantAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_operator_write_node(&self) -> Option<ConstantOperatorWriteNode<'pr>> {
match *self {
Self::ConstantOperatorWriteNode { parser, pointer, marker } => Some(ConstantOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_or_write_node(&self) -> Option<ConstantOrWriteNode<'pr>> {
match *self {
Self::ConstantOrWriteNode { parser, pointer, marker } => Some(ConstantOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_path_and_write_node(&self) -> Option<ConstantPathAndWriteNode<'pr>> {
match *self {
Self::ConstantPathAndWriteNode { parser, pointer, marker } => Some(ConstantPathAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_path_node(&self) -> Option<ConstantPathNode<'pr>> {
match *self {
Self::ConstantPathNode { parser, pointer, marker } => Some(ConstantPathNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_path_operator_write_node(&self) -> Option<ConstantPathOperatorWriteNode<'pr>> {
match *self {
Self::ConstantPathOperatorWriteNode { parser, pointer, marker } => Some(ConstantPathOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_path_or_write_node(&self) -> Option<ConstantPathOrWriteNode<'pr>> {
match *self {
Self::ConstantPathOrWriteNode { parser, pointer, marker } => Some(ConstantPathOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_path_target_node(&self) -> Option<ConstantPathTargetNode<'pr>> {
match *self {
Self::ConstantPathTargetNode { parser, pointer, marker } => Some(ConstantPathTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_path_write_node(&self) -> Option<ConstantPathWriteNode<'pr>> {
match *self {
Self::ConstantPathWriteNode { parser, pointer, marker } => Some(ConstantPathWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_read_node(&self) -> Option<ConstantReadNode<'pr>> {
match *self {
Self::ConstantReadNode { parser, pointer, marker } => Some(ConstantReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_target_node(&self) -> Option<ConstantTargetNode<'pr>> {
match *self {
Self::ConstantTargetNode { parser, pointer, marker } => Some(ConstantTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_constant_write_node(&self) -> Option<ConstantWriteNode<'pr>> {
match *self {
Self::ConstantWriteNode { parser, pointer, marker } => Some(ConstantWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_def_node(&self) -> Option<DefNode<'pr>> {
match *self {
Self::DefNode { parser, pointer, marker } => Some(DefNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_defined_node(&self) -> Option<DefinedNode<'pr>> {
match *self {
Self::DefinedNode { parser, pointer, marker } => Some(DefinedNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_else_node(&self) -> Option<ElseNode<'pr>> {
match *self {
Self::ElseNode { parser, pointer, marker } => Some(ElseNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_embedded_statements_node(&self) -> Option<EmbeddedStatementsNode<'pr>> {
match *self {
Self::EmbeddedStatementsNode { parser, pointer, marker } => Some(EmbeddedStatementsNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_embedded_variable_node(&self) -> Option<EmbeddedVariableNode<'pr>> {
match *self {
Self::EmbeddedVariableNode { parser, pointer, marker } => Some(EmbeddedVariableNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_ensure_node(&self) -> Option<EnsureNode<'pr>> {
match *self {
Self::EnsureNode { parser, pointer, marker } => Some(EnsureNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_false_node(&self) -> Option<FalseNode<'pr>> {
match *self {
Self::FalseNode { parser, pointer, marker } => Some(FalseNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_find_pattern_node(&self) -> Option<FindPatternNode<'pr>> {
match *self {
Self::FindPatternNode { parser, pointer, marker } => Some(FindPatternNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_flip_flop_node(&self) -> Option<FlipFlopNode<'pr>> {
match *self {
Self::FlipFlopNode { parser, pointer, marker } => Some(FlipFlopNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_float_node(&self) -> Option<FloatNode<'pr>> {
match *self {
Self::FloatNode { parser, pointer, marker } => Some(FloatNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_for_node(&self) -> Option<ForNode<'pr>> {
match *self {
Self::ForNode { parser, pointer, marker } => Some(ForNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_forwarding_arguments_node(&self) -> Option<ForwardingArgumentsNode<'pr>> {
match *self {
Self::ForwardingArgumentsNode { parser, pointer, marker } => Some(ForwardingArgumentsNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_forwarding_parameter_node(&self) -> Option<ForwardingParameterNode<'pr>> {
match *self {
Self::ForwardingParameterNode { parser, pointer, marker } => Some(ForwardingParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_forwarding_super_node(&self) -> Option<ForwardingSuperNode<'pr>> {
match *self {
Self::ForwardingSuperNode { parser, pointer, marker } => Some(ForwardingSuperNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_global_variable_and_write_node(&self) -> Option<GlobalVariableAndWriteNode<'pr>> {
match *self {
Self::GlobalVariableAndWriteNode { parser, pointer, marker } => Some(GlobalVariableAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_global_variable_operator_write_node(&self) -> Option<GlobalVariableOperatorWriteNode<'pr>> {
match *self {
Self::GlobalVariableOperatorWriteNode { parser, pointer, marker } => Some(GlobalVariableOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_global_variable_or_write_node(&self) -> Option<GlobalVariableOrWriteNode<'pr>> {
match *self {
Self::GlobalVariableOrWriteNode { parser, pointer, marker } => Some(GlobalVariableOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_global_variable_read_node(&self) -> Option<GlobalVariableReadNode<'pr>> {
match *self {
Self::GlobalVariableReadNode { parser, pointer, marker } => Some(GlobalVariableReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_global_variable_target_node(&self) -> Option<GlobalVariableTargetNode<'pr>> {
match *self {
Self::GlobalVariableTargetNode { parser, pointer, marker } => Some(GlobalVariableTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_global_variable_write_node(&self) -> Option<GlobalVariableWriteNode<'pr>> {
match *self {
Self::GlobalVariableWriteNode { parser, pointer, marker } => Some(GlobalVariableWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_hash_node(&self) -> Option<HashNode<'pr>> {
match *self {
Self::HashNode { parser, pointer, marker } => Some(HashNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_hash_pattern_node(&self) -> Option<HashPatternNode<'pr>> {
match *self {
Self::HashPatternNode { parser, pointer, marker } => Some(HashPatternNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_if_node(&self) -> Option<IfNode<'pr>> {
match *self {
Self::IfNode { parser, pointer, marker } => Some(IfNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_imaginary_node(&self) -> Option<ImaginaryNode<'pr>> {
match *self {
Self::ImaginaryNode { parser, pointer, marker } => Some(ImaginaryNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_implicit_node(&self) -> Option<ImplicitNode<'pr>> {
match *self {
Self::ImplicitNode { parser, pointer, marker } => Some(ImplicitNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_implicit_rest_node(&self) -> Option<ImplicitRestNode<'pr>> {
match *self {
Self::ImplicitRestNode { parser, pointer, marker } => Some(ImplicitRestNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_in_node(&self) -> Option<InNode<'pr>> {
match *self {
Self::InNode { parser, pointer, marker } => Some(InNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_index_and_write_node(&self) -> Option<IndexAndWriteNode<'pr>> {
match *self {
Self::IndexAndWriteNode { parser, pointer, marker } => Some(IndexAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_index_operator_write_node(&self) -> Option<IndexOperatorWriteNode<'pr>> {
match *self {
Self::IndexOperatorWriteNode { parser, pointer, marker } => Some(IndexOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_index_or_write_node(&self) -> Option<IndexOrWriteNode<'pr>> {
match *self {
Self::IndexOrWriteNode { parser, pointer, marker } => Some(IndexOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_index_target_node(&self) -> Option<IndexTargetNode<'pr>> {
match *self {
Self::IndexTargetNode { parser, pointer, marker } => Some(IndexTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_instance_variable_and_write_node(&self) -> Option<InstanceVariableAndWriteNode<'pr>> {
match *self {
Self::InstanceVariableAndWriteNode { parser, pointer, marker } => Some(InstanceVariableAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_instance_variable_operator_write_node(&self) -> Option<InstanceVariableOperatorWriteNode<'pr>> {
match *self {
Self::InstanceVariableOperatorWriteNode { parser, pointer, marker } => Some(InstanceVariableOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_instance_variable_or_write_node(&self) -> Option<InstanceVariableOrWriteNode<'pr>> {
match *self {
Self::InstanceVariableOrWriteNode { parser, pointer, marker } => Some(InstanceVariableOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_instance_variable_read_node(&self) -> Option<InstanceVariableReadNode<'pr>> {
match *self {
Self::InstanceVariableReadNode { parser, pointer, marker } => Some(InstanceVariableReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_instance_variable_target_node(&self) -> Option<InstanceVariableTargetNode<'pr>> {
match *self {
Self::InstanceVariableTargetNode { parser, pointer, marker } => Some(InstanceVariableTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_instance_variable_write_node(&self) -> Option<InstanceVariableWriteNode<'pr>> {
match *self {
Self::InstanceVariableWriteNode { parser, pointer, marker } => Some(InstanceVariableWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_integer_node(&self) -> Option<IntegerNode<'pr>> {
match *self {
Self::IntegerNode { parser, pointer, marker } => Some(IntegerNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_interpolated_match_last_line_node(&self) -> Option<InterpolatedMatchLastLineNode<'pr>> {
match *self {
Self::InterpolatedMatchLastLineNode { parser, pointer, marker } => Some(InterpolatedMatchLastLineNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_interpolated_regular_expression_node(&self) -> Option<InterpolatedRegularExpressionNode<'pr>> {
match *self {
Self::InterpolatedRegularExpressionNode { parser, pointer, marker } => Some(InterpolatedRegularExpressionNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_interpolated_string_node(&self) -> Option<InterpolatedStringNode<'pr>> {
match *self {
Self::InterpolatedStringNode { parser, pointer, marker } => Some(InterpolatedStringNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_interpolated_symbol_node(&self) -> Option<InterpolatedSymbolNode<'pr>> {
match *self {
Self::InterpolatedSymbolNode { parser, pointer, marker } => Some(InterpolatedSymbolNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_interpolated_x_string_node(&self) -> Option<InterpolatedXStringNode<'pr>> {
match *self {
Self::InterpolatedXStringNode { parser, pointer, marker } => Some(InterpolatedXStringNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_it_local_variable_read_node(&self) -> Option<ItLocalVariableReadNode<'pr>> {
match *self {
Self::ItLocalVariableReadNode { parser, pointer, marker } => Some(ItLocalVariableReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_it_parameters_node(&self) -> Option<ItParametersNode<'pr>> {
match *self {
Self::ItParametersNode { parser, pointer, marker } => Some(ItParametersNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_keyword_hash_node(&self) -> Option<KeywordHashNode<'pr>> {
match *self {
Self::KeywordHashNode { parser, pointer, marker } => Some(KeywordHashNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_keyword_rest_parameter_node(&self) -> Option<KeywordRestParameterNode<'pr>> {
match *self {
Self::KeywordRestParameterNode { parser, pointer, marker } => Some(KeywordRestParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_lambda_node(&self) -> Option<LambdaNode<'pr>> {
match *self {
Self::LambdaNode { parser, pointer, marker } => Some(LambdaNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_local_variable_and_write_node(&self) -> Option<LocalVariableAndWriteNode<'pr>> {
match *self {
Self::LocalVariableAndWriteNode { parser, pointer, marker } => Some(LocalVariableAndWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_local_variable_operator_write_node(&self) -> Option<LocalVariableOperatorWriteNode<'pr>> {
match *self {
Self::LocalVariableOperatorWriteNode { parser, pointer, marker } => Some(LocalVariableOperatorWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_local_variable_or_write_node(&self) -> Option<LocalVariableOrWriteNode<'pr>> {
match *self {
Self::LocalVariableOrWriteNode { parser, pointer, marker } => Some(LocalVariableOrWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_local_variable_read_node(&self) -> Option<LocalVariableReadNode<'pr>> {
match *self {
Self::LocalVariableReadNode { parser, pointer, marker } => Some(LocalVariableReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_local_variable_target_node(&self) -> Option<LocalVariableTargetNode<'pr>> {
match *self {
Self::LocalVariableTargetNode { parser, pointer, marker } => Some(LocalVariableTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_local_variable_write_node(&self) -> Option<LocalVariableWriteNode<'pr>> {
match *self {
Self::LocalVariableWriteNode { parser, pointer, marker } => Some(LocalVariableWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_match_last_line_node(&self) -> Option<MatchLastLineNode<'pr>> {
match *self {
Self::MatchLastLineNode { parser, pointer, marker } => Some(MatchLastLineNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_match_predicate_node(&self) -> Option<MatchPredicateNode<'pr>> {
match *self {
Self::MatchPredicateNode { parser, pointer, marker } => Some(MatchPredicateNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_match_required_node(&self) -> Option<MatchRequiredNode<'pr>> {
match *self {
Self::MatchRequiredNode { parser, pointer, marker } => Some(MatchRequiredNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_match_write_node(&self) -> Option<MatchWriteNode<'pr>> {
match *self {
Self::MatchWriteNode { parser, pointer, marker } => Some(MatchWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_missing_node(&self) -> Option<MissingNode<'pr>> {
match *self {
Self::MissingNode { parser, pointer, marker } => Some(MissingNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_module_node(&self) -> Option<ModuleNode<'pr>> {
match *self {
Self::ModuleNode { parser, pointer, marker } => Some(ModuleNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_multi_target_node(&self) -> Option<MultiTargetNode<'pr>> {
match *self {
Self::MultiTargetNode { parser, pointer, marker } => Some(MultiTargetNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_multi_write_node(&self) -> Option<MultiWriteNode<'pr>> {
match *self {
Self::MultiWriteNode { parser, pointer, marker } => Some(MultiWriteNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_next_node(&self) -> Option<NextNode<'pr>> {
match *self {
Self::NextNode { parser, pointer, marker } => Some(NextNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_nil_node(&self) -> Option<NilNode<'pr>> {
match *self {
Self::NilNode { parser, pointer, marker } => Some(NilNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_no_keywords_parameter_node(&self) -> Option<NoKeywordsParameterNode<'pr>> {
match *self {
Self::NoKeywordsParameterNode { parser, pointer, marker } => Some(NoKeywordsParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_numbered_parameters_node(&self) -> Option<NumberedParametersNode<'pr>> {
match *self {
Self::NumberedParametersNode { parser, pointer, marker } => Some(NumberedParametersNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_numbered_reference_read_node(&self) -> Option<NumberedReferenceReadNode<'pr>> {
match *self {
Self::NumberedReferenceReadNode { parser, pointer, marker } => Some(NumberedReferenceReadNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_optional_keyword_parameter_node(&self) -> Option<OptionalKeywordParameterNode<'pr>> {
match *self {
Self::OptionalKeywordParameterNode { parser, pointer, marker } => Some(OptionalKeywordParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_optional_parameter_node(&self) -> Option<OptionalParameterNode<'pr>> {
match *self {
Self::OptionalParameterNode { parser, pointer, marker } => Some(OptionalParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_or_node(&self) -> Option<OrNode<'pr>> {
match *self {
Self::OrNode { parser, pointer, marker } => Some(OrNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_parameters_node(&self) -> Option<ParametersNode<'pr>> {
match *self {
Self::ParametersNode { parser, pointer, marker } => Some(ParametersNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_parentheses_node(&self) -> Option<ParenthesesNode<'pr>> {
match *self {
Self::ParenthesesNode { parser, pointer, marker } => Some(ParenthesesNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_pinned_expression_node(&self) -> Option<PinnedExpressionNode<'pr>> {
match *self {
Self::PinnedExpressionNode { parser, pointer, marker } => Some(PinnedExpressionNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_pinned_variable_node(&self) -> Option<PinnedVariableNode<'pr>> {
match *self {
Self::PinnedVariableNode { parser, pointer, marker } => Some(PinnedVariableNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_post_execution_node(&self) -> Option<PostExecutionNode<'pr>> {
match *self {
Self::PostExecutionNode { parser, pointer, marker } => Some(PostExecutionNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_pre_execution_node(&self) -> Option<PreExecutionNode<'pr>> {
match *self {
Self::PreExecutionNode { parser, pointer, marker } => Some(PreExecutionNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_program_node(&self) -> Option<ProgramNode<'pr>> {
match *self {
Self::ProgramNode { parser, pointer, marker } => Some(ProgramNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_range_node(&self) -> Option<RangeNode<'pr>> {
match *self {
Self::RangeNode { parser, pointer, marker } => Some(RangeNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_rational_node(&self) -> Option<RationalNode<'pr>> {
match *self {
Self::RationalNode { parser, pointer, marker } => Some(RationalNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_redo_node(&self) -> Option<RedoNode<'pr>> {
match *self {
Self::RedoNode { parser, pointer, marker } => Some(RedoNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_regular_expression_node(&self) -> Option<RegularExpressionNode<'pr>> {
match *self {
Self::RegularExpressionNode { parser, pointer, marker } => Some(RegularExpressionNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_required_keyword_parameter_node(&self) -> Option<RequiredKeywordParameterNode<'pr>> {
match *self {
Self::RequiredKeywordParameterNode { parser, pointer, marker } => Some(RequiredKeywordParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_required_parameter_node(&self) -> Option<RequiredParameterNode<'pr>> {
match *self {
Self::RequiredParameterNode { parser, pointer, marker } => Some(RequiredParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_rescue_modifier_node(&self) -> Option<RescueModifierNode<'pr>> {
match *self {
Self::RescueModifierNode { parser, pointer, marker } => Some(RescueModifierNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_rescue_node(&self) -> Option<RescueNode<'pr>> {
match *self {
Self::RescueNode { parser, pointer, marker } => Some(RescueNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_rest_parameter_node(&self) -> Option<RestParameterNode<'pr>> {
match *self {
Self::RestParameterNode { parser, pointer, marker } => Some(RestParameterNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_retry_node(&self) -> Option<RetryNode<'pr>> {
match *self {
Self::RetryNode { parser, pointer, marker } => Some(RetryNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_return_node(&self) -> Option<ReturnNode<'pr>> {
match *self {
Self::ReturnNode { parser, pointer, marker } => Some(ReturnNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_self_node(&self) -> Option<SelfNode<'pr>> {
match *self {
Self::SelfNode { parser, pointer, marker } => Some(SelfNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_shareable_constant_node(&self) -> Option<ShareableConstantNode<'pr>> {
match *self {
Self::ShareableConstantNode { parser, pointer, marker } => Some(ShareableConstantNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_singleton_class_node(&self) -> Option<SingletonClassNode<'pr>> {
match *self {
Self::SingletonClassNode { parser, pointer, marker } => Some(SingletonClassNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_source_encoding_node(&self) -> Option<SourceEncodingNode<'pr>> {
match *self {
Self::SourceEncodingNode { parser, pointer, marker } => Some(SourceEncodingNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_source_file_node(&self) -> Option<SourceFileNode<'pr>> {
match *self {
Self::SourceFileNode { parser, pointer, marker } => Some(SourceFileNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_source_line_node(&self) -> Option<SourceLineNode<'pr>> {
match *self {
Self::SourceLineNode { parser, pointer, marker } => Some(SourceLineNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_splat_node(&self) -> Option<SplatNode<'pr>> {
match *self {
Self::SplatNode { parser, pointer, marker } => Some(SplatNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_statements_node(&self) -> Option<StatementsNode<'pr>> {
match *self {
Self::StatementsNode { parser, pointer, marker } => Some(StatementsNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_string_node(&self) -> Option<StringNode<'pr>> {
match *self {
Self::StringNode { parser, pointer, marker } => Some(StringNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_super_node(&self) -> Option<SuperNode<'pr>> {
match *self {
Self::SuperNode { parser, pointer, marker } => Some(SuperNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_symbol_node(&self) -> Option<SymbolNode<'pr>> {
match *self {
Self::SymbolNode { parser, pointer, marker } => Some(SymbolNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_true_node(&self) -> Option<TrueNode<'pr>> {
match *self {
Self::TrueNode { parser, pointer, marker } => Some(TrueNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_undef_node(&self) -> Option<UndefNode<'pr>> {
match *self {
Self::UndefNode { parser, pointer, marker } => Some(UndefNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_unless_node(&self) -> Option<UnlessNode<'pr>> {
match *self {
Self::UnlessNode { parser, pointer, marker } => Some(UnlessNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_until_node(&self) -> Option<UntilNode<'pr>> {
match *self {
Self::UntilNode { parser, pointer, marker } => Some(UntilNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_when_node(&self) -> Option<WhenNode<'pr>> {
match *self {
Self::WhenNode { parser, pointer, marker } => Some(WhenNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_while_node(&self) -> Option<WhileNode<'pr>> {
match *self {
Self::WhileNode { parser, pointer, marker } => Some(WhileNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_x_string_node(&self) -> Option<XStringNode<'pr>> {
match *self {
Self::XStringNode { parser, pointer, marker } => Some(XStringNode { parser, pointer, marker }),
_ => None
}
}
#[must_use]
pub fn as_yield_node(&self) -> Option<YieldNode<'pr>> {
match *self {
Self::YieldNode { parser, pointer, marker } => Some(YieldNode { parser, pointer, marker }),
_ => None
}
}
}
impl std::fmt::Debug for Node<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match *self {
Self::AliasGlobalVariableNode { parser, pointer, marker } => write!(f, "{:?}", AliasGlobalVariableNode { parser, pointer, marker }),
Self::AliasMethodNode { parser, pointer, marker } => write!(f, "{:?}", AliasMethodNode { parser, pointer, marker }),
Self::AlternationPatternNode { parser, pointer, marker } => write!(f, "{:?}", AlternationPatternNode { parser, pointer, marker }),
Self::AndNode { parser, pointer, marker } => write!(f, "{:?}", AndNode { parser, pointer, marker }),
Self::ArgumentsNode { parser, pointer, marker } => write!(f, "{:?}", ArgumentsNode { parser, pointer, marker }),
Self::ArrayNode { parser, pointer, marker } => write!(f, "{:?}", ArrayNode { parser, pointer, marker }),
Self::ArrayPatternNode { parser, pointer, marker } => write!(f, "{:?}", ArrayPatternNode { parser, pointer, marker }),
Self::AssocNode { parser, pointer, marker } => write!(f, "{:?}", AssocNode { parser, pointer, marker }),
Self::AssocSplatNode { parser, pointer, marker } => write!(f, "{:?}", AssocSplatNode { parser, pointer, marker }),
Self::BackReferenceReadNode { parser, pointer, marker } => write!(f, "{:?}", BackReferenceReadNode { parser, pointer, marker }),
Self::BeginNode { parser, pointer, marker } => write!(f, "{:?}", BeginNode { parser, pointer, marker }),
Self::BlockArgumentNode { parser, pointer, marker } => write!(f, "{:?}", BlockArgumentNode { parser, pointer, marker }),
Self::BlockLocalVariableNode { parser, pointer, marker } => write!(f, "{:?}", BlockLocalVariableNode { parser, pointer, marker }),
Self::BlockNode { parser, pointer, marker } => write!(f, "{:?}", BlockNode { parser, pointer, marker }),
Self::BlockParameterNode { parser, pointer, marker } => write!(f, "{:?}", BlockParameterNode { parser, pointer, marker }),
Self::BlockParametersNode { parser, pointer, marker } => write!(f, "{:?}", BlockParametersNode { parser, pointer, marker }),
Self::BreakNode { parser, pointer, marker } => write!(f, "{:?}", BreakNode { parser, pointer, marker }),
Self::CallAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", CallAndWriteNode { parser, pointer, marker }),
Self::CallNode { parser, pointer, marker } => write!(f, "{:?}", CallNode { parser, pointer, marker }),
Self::CallOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", CallOperatorWriteNode { parser, pointer, marker }),
Self::CallOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", CallOrWriteNode { parser, pointer, marker }),
Self::CallTargetNode { parser, pointer, marker } => write!(f, "{:?}", CallTargetNode { parser, pointer, marker }),
Self::CapturePatternNode { parser, pointer, marker } => write!(f, "{:?}", CapturePatternNode { parser, pointer, marker }),
Self::CaseMatchNode { parser, pointer, marker } => write!(f, "{:?}", CaseMatchNode { parser, pointer, marker }),
Self::CaseNode { parser, pointer, marker } => write!(f, "{:?}", CaseNode { parser, pointer, marker }),
Self::ClassNode { parser, pointer, marker } => write!(f, "{:?}", ClassNode { parser, pointer, marker }),
Self::ClassVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableAndWriteNode { parser, pointer, marker }),
Self::ClassVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableOperatorWriteNode { parser, pointer, marker }),
Self::ClassVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableOrWriteNode { parser, pointer, marker }),
Self::ClassVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableReadNode { parser, pointer, marker }),
Self::ClassVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableTargetNode { parser, pointer, marker }),
Self::ClassVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", ClassVariableWriteNode { parser, pointer, marker }),
Self::ConstantAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantAndWriteNode { parser, pointer, marker }),
Self::ConstantOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantOperatorWriteNode { parser, pointer, marker }),
Self::ConstantOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantOrWriteNode { parser, pointer, marker }),
Self::ConstantPathAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathAndWriteNode { parser, pointer, marker }),
Self::ConstantPathNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathNode { parser, pointer, marker }),
Self::ConstantPathOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathOperatorWriteNode { parser, pointer, marker }),
Self::ConstantPathOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathOrWriteNode { parser, pointer, marker }),
Self::ConstantPathTargetNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathTargetNode { parser, pointer, marker }),
Self::ConstantPathWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantPathWriteNode { parser, pointer, marker }),
Self::ConstantReadNode { parser, pointer, marker } => write!(f, "{:?}", ConstantReadNode { parser, pointer, marker }),
Self::ConstantTargetNode { parser, pointer, marker } => write!(f, "{:?}", ConstantTargetNode { parser, pointer, marker }),
Self::ConstantWriteNode { parser, pointer, marker } => write!(f, "{:?}", ConstantWriteNode { parser, pointer, marker }),
Self::DefNode { parser, pointer, marker } => write!(f, "{:?}", DefNode { parser, pointer, marker }),
Self::DefinedNode { parser, pointer, marker } => write!(f, "{:?}", DefinedNode { parser, pointer, marker }),
Self::ElseNode { parser, pointer, marker } => write!(f, "{:?}", ElseNode { parser, pointer, marker }),
Self::EmbeddedStatementsNode { parser, pointer, marker } => write!(f, "{:?}", EmbeddedStatementsNode { parser, pointer, marker }),
Self::EmbeddedVariableNode { parser, pointer, marker } => write!(f, "{:?}", EmbeddedVariableNode { parser, pointer, marker }),
Self::EnsureNode { parser, pointer, marker } => write!(f, "{:?}", EnsureNode { parser, pointer, marker }),
Self::FalseNode { parser, pointer, marker } => write!(f, "{:?}", FalseNode { parser, pointer, marker }),
Self::FindPatternNode { parser, pointer, marker } => write!(f, "{:?}", FindPatternNode { parser, pointer, marker }),
Self::FlipFlopNode { parser, pointer, marker } => write!(f, "{:?}", FlipFlopNode { parser, pointer, marker }),
Self::FloatNode { parser, pointer, marker } => write!(f, "{:?}", FloatNode { parser, pointer, marker }),
Self::ForNode { parser, pointer, marker } => write!(f, "{:?}", ForNode { parser, pointer, marker }),
Self::ForwardingArgumentsNode { parser, pointer, marker } => write!(f, "{:?}", ForwardingArgumentsNode { parser, pointer, marker }),
Self::ForwardingParameterNode { parser, pointer, marker } => write!(f, "{:?}", ForwardingParameterNode { parser, pointer, marker }),
Self::ForwardingSuperNode { parser, pointer, marker } => write!(f, "{:?}", ForwardingSuperNode { parser, pointer, marker }),
Self::GlobalVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableAndWriteNode { parser, pointer, marker }),
Self::GlobalVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableOperatorWriteNode { parser, pointer, marker }),
Self::GlobalVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableOrWriteNode { parser, pointer, marker }),
Self::GlobalVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableReadNode { parser, pointer, marker }),
Self::GlobalVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableTargetNode { parser, pointer, marker }),
Self::GlobalVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", GlobalVariableWriteNode { parser, pointer, marker }),
Self::HashNode { parser, pointer, marker } => write!(f, "{:?}", HashNode { parser, pointer, marker }),
Self::HashPatternNode { parser, pointer, marker } => write!(f, "{:?}", HashPatternNode { parser, pointer, marker }),
Self::IfNode { parser, pointer, marker } => write!(f, "{:?}", IfNode { parser, pointer, marker }),
Self::ImaginaryNode { parser, pointer, marker } => write!(f, "{:?}", ImaginaryNode { parser, pointer, marker }),
Self::ImplicitNode { parser, pointer, marker } => write!(f, "{:?}", ImplicitNode { parser, pointer, marker }),
Self::ImplicitRestNode { parser, pointer, marker } => write!(f, "{:?}", ImplicitRestNode { parser, pointer, marker }),
Self::InNode { parser, pointer, marker } => write!(f, "{:?}", InNode { parser, pointer, marker }),
Self::IndexAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", IndexAndWriteNode { parser, pointer, marker }),
Self::IndexOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", IndexOperatorWriteNode { parser, pointer, marker }),
Self::IndexOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", IndexOrWriteNode { parser, pointer, marker }),
Self::IndexTargetNode { parser, pointer, marker } => write!(f, "{:?}", IndexTargetNode { parser, pointer, marker }),
Self::InstanceVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableAndWriteNode { parser, pointer, marker }),
Self::InstanceVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableOperatorWriteNode { parser, pointer, marker }),
Self::InstanceVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableOrWriteNode { parser, pointer, marker }),
Self::InstanceVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableReadNode { parser, pointer, marker }),
Self::InstanceVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableTargetNode { parser, pointer, marker }),
Self::InstanceVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", InstanceVariableWriteNode { parser, pointer, marker }),
Self::IntegerNode { parser, pointer, marker } => write!(f, "{:?}", IntegerNode { parser, pointer, marker }),
Self::InterpolatedMatchLastLineNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedMatchLastLineNode { parser, pointer, marker }),
Self::InterpolatedRegularExpressionNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedRegularExpressionNode { parser, pointer, marker }),
Self::InterpolatedStringNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedStringNode { parser, pointer, marker }),
Self::InterpolatedSymbolNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedSymbolNode { parser, pointer, marker }),
Self::InterpolatedXStringNode { parser, pointer, marker } => write!(f, "{:?}", InterpolatedXStringNode { parser, pointer, marker }),
Self::ItLocalVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", ItLocalVariableReadNode { parser, pointer, marker }),
Self::ItParametersNode { parser, pointer, marker } => write!(f, "{:?}", ItParametersNode { parser, pointer, marker }),
Self::KeywordHashNode { parser, pointer, marker } => write!(f, "{:?}", KeywordHashNode { parser, pointer, marker }),
Self::KeywordRestParameterNode { parser, pointer, marker } => write!(f, "{:?}", KeywordRestParameterNode { parser, pointer, marker }),
Self::LambdaNode { parser, pointer, marker } => write!(f, "{:?}", LambdaNode { parser, pointer, marker }),
Self::LocalVariableAndWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableAndWriteNode { parser, pointer, marker }),
Self::LocalVariableOperatorWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableOperatorWriteNode { parser, pointer, marker }),
Self::LocalVariableOrWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableOrWriteNode { parser, pointer, marker }),
Self::LocalVariableReadNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableReadNode { parser, pointer, marker }),
Self::LocalVariableTargetNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableTargetNode { parser, pointer, marker }),
Self::LocalVariableWriteNode { parser, pointer, marker } => write!(f, "{:?}", LocalVariableWriteNode { parser, pointer, marker }),
Self::MatchLastLineNode { parser, pointer, marker } => write!(f, "{:?}", MatchLastLineNode { parser, pointer, marker }),
Self::MatchPredicateNode { parser, pointer, marker } => write!(f, "{:?}", MatchPredicateNode { parser, pointer, marker }),
Self::MatchRequiredNode { parser, pointer, marker } => write!(f, "{:?}", MatchRequiredNode { parser, pointer, marker }),
Self::MatchWriteNode { parser, pointer, marker } => write!(f, "{:?}", MatchWriteNode { parser, pointer, marker }),
Self::MissingNode { parser, pointer, marker } => write!(f, "{:?}", MissingNode { parser, pointer, marker }),
Self::ModuleNode { parser, pointer, marker } => write!(f, "{:?}", ModuleNode { parser, pointer, marker }),
Self::MultiTargetNode { parser, pointer, marker } => write!(f, "{:?}", MultiTargetNode { parser, pointer, marker }),
Self::MultiWriteNode { parser, pointer, marker } => write!(f, "{:?}", MultiWriteNode { parser, pointer, marker }),
Self::NextNode { parser, pointer, marker } => write!(f, "{:?}", NextNode { parser, pointer, marker }),
Self::NilNode { parser, pointer, marker } => write!(f, "{:?}", NilNode { parser, pointer, marker }),
Self::NoKeywordsParameterNode { parser, pointer, marker } => write!(f, "{:?}", NoKeywordsParameterNode { parser, pointer, marker }),
Self::NumberedParametersNode { parser, pointer, marker } => write!(f, "{:?}", NumberedParametersNode { parser, pointer, marker }),
Self::NumberedReferenceReadNode { parser, pointer, marker } => write!(f, "{:?}", NumberedReferenceReadNode { parser, pointer, marker }),
Self::OptionalKeywordParameterNode { parser, pointer, marker } => write!(f, "{:?}", OptionalKeywordParameterNode { parser, pointer, marker }),
Self::OptionalParameterNode { parser, pointer, marker } => write!(f, "{:?}", OptionalParameterNode { parser, pointer, marker }),
Self::OrNode { parser, pointer, marker } => write!(f, "{:?}", OrNode { parser, pointer, marker }),
Self::ParametersNode { parser, pointer, marker } => write!(f, "{:?}", ParametersNode { parser, pointer, marker }),
Self::ParenthesesNode { parser, pointer, marker } => write!(f, "{:?}", ParenthesesNode { parser, pointer, marker }),
Self::PinnedExpressionNode { parser, pointer, marker } => write!(f, "{:?}", PinnedExpressionNode { parser, pointer, marker }),
Self::PinnedVariableNode { parser, pointer, marker } => write!(f, "{:?}", PinnedVariableNode { parser, pointer, marker }),
Self::PostExecutionNode { parser, pointer, marker } => write!(f, "{:?}", PostExecutionNode { parser, pointer, marker }),
Self::PreExecutionNode { parser, pointer, marker } => write!(f, "{:?}", PreExecutionNode { parser, pointer, marker }),
Self::ProgramNode { parser, pointer, marker } => write!(f, "{:?}", ProgramNode { parser, pointer, marker }),
Self::RangeNode { parser, pointer, marker } => write!(f, "{:?}", RangeNode { parser, pointer, marker }),
Self::RationalNode { parser, pointer, marker } => write!(f, "{:?}", RationalNode { parser, pointer, marker }),
Self::RedoNode { parser, pointer, marker } => write!(f, "{:?}", RedoNode { parser, pointer, marker }),
Self::RegularExpressionNode { parser, pointer, marker } => write!(f, "{:?}", RegularExpressionNode { parser, pointer, marker }),
Self::RequiredKeywordParameterNode { parser, pointer, marker } => write!(f, "{:?}", RequiredKeywordParameterNode { parser, pointer, marker }),
Self::RequiredParameterNode { parser, pointer, marker } => write!(f, "{:?}", RequiredParameterNode { parser, pointer, marker }),
Self::RescueModifierNode { parser, pointer, marker } => write!(f, "{:?}", RescueModifierNode { parser, pointer, marker }),
Self::RescueNode { parser, pointer, marker } => write!(f, "{:?}", RescueNode { parser, pointer, marker }),
Self::RestParameterNode { parser, pointer, marker } => write!(f, "{:?}", RestParameterNode { parser, pointer, marker }),
Self::RetryNode { parser, pointer, marker } => write!(f, "{:?}", RetryNode { parser, pointer, marker }),
Self::ReturnNode { parser, pointer, marker } => write!(f, "{:?}", ReturnNode { parser, pointer, marker }),
Self::SelfNode { parser, pointer, marker } => write!(f, "{:?}", SelfNode { parser, pointer, marker }),
Self::ShareableConstantNode { parser, pointer, marker } => write!(f, "{:?}", ShareableConstantNode { parser, pointer, marker }),
Self::SingletonClassNode { parser, pointer, marker } => write!(f, "{:?}", SingletonClassNode { parser, pointer, marker }),
Self::SourceEncodingNode { parser, pointer, marker } => write!(f, "{:?}", SourceEncodingNode { parser, pointer, marker }),
Self::SourceFileNode { parser, pointer, marker } => write!(f, "{:?}", SourceFileNode { parser, pointer, marker }),
Self::SourceLineNode { parser, pointer, marker } => write!(f, "{:?}", SourceLineNode { parser, pointer, marker }),
Self::SplatNode { parser, pointer, marker } => write!(f, "{:?}", SplatNode { parser, pointer, marker }),
Self::StatementsNode { parser, pointer, marker } => write!(f, "{:?}", StatementsNode { parser, pointer, marker }),
Self::StringNode { parser, pointer, marker } => write!(f, "{:?}", StringNode { parser, pointer, marker }),
Self::SuperNode { parser, pointer, marker } => write!(f, "{:?}", SuperNode { parser, pointer, marker }),
Self::SymbolNode { parser, pointer, marker } => write!(f, "{:?}", SymbolNode { parser, pointer, marker }),
Self::TrueNode { parser, pointer, marker } => write!(f, "{:?}", TrueNode { parser, pointer, marker }),
Self::UndefNode { parser, pointer, marker } => write!(f, "{:?}", UndefNode { parser, pointer, marker }),
Self::UnlessNode { parser, pointer, marker } => write!(f, "{:?}", UnlessNode { parser, pointer, marker }),
Self::UntilNode { parser, pointer, marker } => write!(f, "{:?}", UntilNode { parser, pointer, marker }),
Self::WhenNode { parser, pointer, marker } => write!(f, "{:?}", WhenNode { parser, pointer, marker }),
Self::WhileNode { parser, pointer, marker } => write!(f, "{:?}", WhileNode { parser, pointer, marker }),
Self::XStringNode { parser, pointer, marker } => write!(f, "{:?}", XStringNode { parser, pointer, marker }),
Self::YieldNode { parser, pointer, marker } => write!(f, "{:?}", YieldNode { parser, pointer, marker }),
}
}
}
pub struct AliasGlobalVariableNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_alias_global_variable_node_t,
marker: PhantomData<&'pr mut pm_alias_global_variable_node_t>
}
impl<'pr> AliasGlobalVariableNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::AliasGlobalVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn new_name(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).new_name };
Node::new(self.parser, node)
}
#[must_use]
pub fn old_name(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).old_name };
Node::new(self.parser, node)
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for AliasGlobalVariableNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AliasGlobalVariableNode({:?}, {:?}, {:?})", self.new_name(), self.old_name(), self.keyword_loc())
}
}
pub struct AliasMethodNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_alias_method_node_t,
marker: PhantomData<&'pr mut pm_alias_method_node_t>
}
impl<'pr> AliasMethodNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::AliasMethodNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn new_name(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).new_name };
Node::new(self.parser, node)
}
#[must_use]
pub fn old_name(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).old_name };
Node::new(self.parser, node)
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for AliasMethodNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AliasMethodNode({:?}, {:?}, {:?})", self.new_name(), self.old_name(), self.keyword_loc())
}
}
pub struct AlternationPatternNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_alternation_pattern_node_t,
marker: PhantomData<&'pr mut pm_alternation_pattern_node_t>
}
impl<'pr> AlternationPatternNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::AlternationPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn left(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).left };
Node::new(self.parser, node)
}
#[must_use]
pub fn right(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).right };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for AlternationPatternNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AlternationPatternNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
}
}
pub struct AndNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_and_node_t,
marker: PhantomData<&'pr mut pm_and_node_t>
}
impl<'pr> AndNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::AndNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn left(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).left };
Node::new(self.parser, node)
}
#[must_use]
pub fn right(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).right };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for AndNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AndNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
}
}
pub struct ArgumentsNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_arguments_node_t,
marker: PhantomData<&'pr mut pm_arguments_node_t>
}
impl<'pr> ArgumentsNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ArgumentsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_contains_forwarding(&self) -> bool {
(self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING) != 0
}
#[must_use]
pub fn is_contains_keywords(&self) -> bool {
(self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS) != 0
}
#[must_use]
pub fn is_contains_keyword_splat(&self) -> bool {
(self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORD_SPLAT) != 0
}
#[must_use]
pub fn is_contains_splat(&self) -> bool {
(self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_SPLAT) != 0
}
#[must_use]
pub fn is_contains_multiple_splats(&self) -> bool {
(self.flags() & PM_ARGUMENTS_NODE_FLAGS_CONTAINS_MULTIPLE_SPLATS) != 0
}
#[must_use]
pub fn arguments(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).arguments };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
}
impl std::fmt::Debug for ArgumentsNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ArgumentsNode({:?})", self.arguments())
}
}
pub struct ArrayNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_array_node_t,
marker: PhantomData<&'pr mut pm_array_node_t>
}
impl<'pr> ArrayNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ArrayNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_contains_splat(&self) -> bool {
(self.flags() & PM_ARRAY_NODE_FLAGS_CONTAINS_SPLAT) != 0
}
#[must_use]
pub fn elements(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).elements };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for ArrayNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ArrayNode({:?}, {:?}, {:?})", self.elements(), self.opening_loc(), self.closing_loc())
}
}
pub struct ArrayPatternNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_array_pattern_node_t,
marker: PhantomData<&'pr mut pm_array_pattern_node_t>
}
impl<'pr> ArrayPatternNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ArrayPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn constant(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).constant };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn requireds(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).requireds };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn rest(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn posts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).posts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for ArrayPatternNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ArrayPatternNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.constant(), self.requireds(), self.rest(), self.posts(), self.opening_loc(), self.closing_loc())
}
}
pub struct AssocNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_assoc_node_t,
marker: PhantomData<&'pr mut pm_assoc_node_t>
}
impl<'pr> AssocNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::AssocNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn key(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).key };
Node::new(self.parser, node)
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for AssocNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AssocNode({:?}, {:?}, {:?})", self.key(), self.value(), self.operator_loc())
}
}
pub struct AssocSplatNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_assoc_splat_node_t,
marker: PhantomData<&'pr mut pm_assoc_splat_node_t>
}
impl<'pr> AssocSplatNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::AssocSplatNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn value(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for AssocSplatNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "AssocSplatNode({:?}, {:?})", self.value(), self.operator_loc())
}
}
pub struct BackReferenceReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_back_reference_read_node_t,
marker: PhantomData<&'pr mut pm_back_reference_read_node_t>
}
impl<'pr> BackReferenceReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BackReferenceReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for BackReferenceReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BackReferenceReadNode({:?})", self.name())
}
}
pub struct BeginNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_begin_node_t,
marker: PhantomData<&'pr mut pm_begin_node_t>
}
impl<'pr> BeginNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BeginNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn begin_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).begin_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn rescue_clause(&self) -> Option<RescueNode<'pr>> {
let node: *mut pm_rescue_node_t = unsafe { (*self.pointer).rescue_clause };
if node.is_null() {
None
} else {
Some(RescueNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
if node.is_null() {
None
} else {
Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn ensure_clause(&self) -> Option<EnsureNode<'pr>> {
let node: *mut pm_ensure_node_t = unsafe { (*self.pointer).ensure_clause };
if node.is_null() {
None
} else {
Some(EnsureNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for BeginNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BeginNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.begin_keyword_loc(), self.statements(), self.rescue_clause(), self.else_clause(), self.ensure_clause(), self.end_keyword_loc())
}
}
pub struct BlockArgumentNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_argument_node_t,
marker: PhantomData<&'pr mut pm_block_argument_node_t>
}
impl<'pr> BlockArgumentNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BlockArgumentNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn expression(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for BlockArgumentNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BlockArgumentNode({:?}, {:?})", self.expression(), self.operator_loc())
}
}
pub struct BlockLocalVariableNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_local_variable_node_t,
marker: PhantomData<&'pr mut pm_block_local_variable_node_t>
}
impl<'pr> BlockLocalVariableNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BlockLocalVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for BlockLocalVariableNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BlockLocalVariableNode({:?})", self.name())
}
}
pub struct BlockNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_node_t,
marker: PhantomData<&'pr mut pm_block_node_t>
}
impl<'pr> BlockNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BlockNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn parameters(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).parameters };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for BlockNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BlockNode({:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.parameters(), self.body(), self.opening_loc(), self.closing_loc())
}
}
pub struct BlockParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_parameter_node_t,
marker: PhantomData<&'pr mut pm_block_parameter_node_t>
}
impl<'pr> BlockParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BlockParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> Option<ConstantId<'pr>> {
let id = unsafe { (*self.pointer).name };
if id == 0 {
None
} else {
Some(ConstantId::new(self.parser, id))
}
}
#[must_use]
pub fn name_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for BlockParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BlockParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc())
}
}
pub struct BlockParametersNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_block_parameters_node_t,
marker: PhantomData<&'pr mut pm_block_parameters_node_t>
}
impl<'pr> BlockParametersNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BlockParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn parameters(&self) -> Option<ParametersNode<'pr>> {
let node: *mut pm_parameters_node_t = unsafe { (*self.pointer).parameters };
if node.is_null() {
None
} else {
Some(ParametersNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn locals(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).locals };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for BlockParametersNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BlockParametersNode({:?}, {:?}, {:?}, {:?})", self.parameters(), self.locals(), self.opening_loc(), self.closing_loc())
}
}
pub struct BreakNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_break_node_t,
marker: PhantomData<&'pr mut pm_break_node_t>
}
impl<'pr> BreakNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::BreakNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for BreakNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "BreakNode({:?}, {:?})", self.arguments(), self.keyword_loc())
}
}
pub struct CallAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_and_write_node_t,
marker: PhantomData<&'pr mut pm_call_and_write_node_t>
}
impl<'pr> CallAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CallAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn message_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).message_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn read_name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).read_name })
}
#[must_use]
pub fn write_name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).write_name })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for CallAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CallAndWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.message_loc(), self.read_name(), self.write_name(), self.operator_loc(), self.value())
}
}
pub struct CallNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_node_t,
marker: PhantomData<&'pr mut pm_call_node_t>
}
impl<'pr> CallNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CallNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn message_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).message_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn block(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
}
impl std::fmt::Debug for CallNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CallNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.name(), self.message_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block())
}
}
pub struct CallOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_operator_write_node_t,
marker: PhantomData<&'pr mut pm_call_operator_write_node_t>
}
impl<'pr> CallOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CallOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn message_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).message_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn read_name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).read_name })
}
#[must_use]
pub fn write_name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).write_name })
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for CallOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
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())
}
}
pub struct CallOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_or_write_node_t,
marker: PhantomData<&'pr mut pm_call_or_write_node_t>
}
impl<'pr> CallOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CallOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn message_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).message_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn read_name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).read_name })
}
#[must_use]
pub fn write_name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).write_name })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for CallOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CallOrWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.message_loc(), self.read_name(), self.write_name(), self.operator_loc(), self.value())
}
}
pub struct CallTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_call_target_node_t,
marker: PhantomData<&'pr mut pm_call_target_node_t>
}
impl<'pr> CallTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CallTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
Node::new(self.parser, node)
}
#[must_use]
pub fn call_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn message_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).message_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for CallTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CallTargetNode({:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.name(), self.message_loc())
}
}
pub struct CapturePatternNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_capture_pattern_node_t,
marker: PhantomData<&'pr mut pm_capture_pattern_node_t>
}
impl<'pr> CapturePatternNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CapturePatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn target(&self) -> LocalVariableTargetNode<'pr> {
let node: *mut pm_local_variable_target_node_t = unsafe { (*self.pointer).target };
LocalVariableTargetNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for CapturePatternNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CapturePatternNode({:?}, {:?}, {:?})", self.value(), self.target(), self.operator_loc())
}
}
pub struct CaseMatchNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_case_match_node_t,
marker: PhantomData<&'pr mut pm_case_match_node_t>
}
impl<'pr> CaseMatchNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CaseMatchNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn predicate(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn conditions(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).conditions };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
if node.is_null() {
None
} else {
Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn case_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).case_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for CaseMatchNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CaseMatchNode({:?}, {:?}, {:?}, {:?}, {:?})", self.predicate(), self.conditions(), self.else_clause(), self.case_keyword_loc(), self.end_keyword_loc())
}
}
pub struct CaseNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_case_node_t,
marker: PhantomData<&'pr mut pm_case_node_t>
}
impl<'pr> CaseNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::CaseNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn predicate(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn conditions(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).conditions };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
if node.is_null() {
None
} else {
Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn case_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).case_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for CaseNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "CaseNode({:?}, {:?}, {:?}, {:?}, {:?})", self.predicate(), self.conditions(), self.else_clause(), self.case_keyword_loc(), self.end_keyword_loc())
}
}
pub struct ClassNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_node_t,
marker: PhantomData<&'pr mut pm_class_node_t>
}
impl<'pr> ClassNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn class_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).class_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn constant_path(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).constant_path };
Node::new(self.parser, node)
}
#[must_use]
pub fn inheritance_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).inheritance_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn superclass(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).superclass };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for ClassNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
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())
}
}
pub struct ClassVariableAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_and_write_node_t>
}
impl<'pr> ClassVariableAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ClassVariableAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ClassVariableAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct ClassVariableOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_operator_write_node_t>
}
impl<'pr> ClassVariableOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
}
impl std::fmt::Debug for ClassVariableOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ClassVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
}
}
pub struct ClassVariableOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_or_write_node_t>
}
impl<'pr> ClassVariableOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ClassVariableOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ClassVariableOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct ClassVariableReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_read_node_t,
marker: PhantomData<&'pr mut pm_class_variable_read_node_t>
}
impl<'pr> ClassVariableReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for ClassVariableReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ClassVariableReadNode({:?})", self.name())
}
}
pub struct ClassVariableTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_target_node_t,
marker: PhantomData<&'pr mut pm_class_variable_target_node_t>
}
impl<'pr> ClassVariableTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for ClassVariableTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ClassVariableTargetNode({:?})", self.name())
}
}
pub struct ClassVariableWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_class_variable_write_node_t,
marker: PhantomData<&'pr mut pm_class_variable_write_node_t>
}
impl<'pr> ClassVariableWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ClassVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for ClassVariableWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ClassVariableWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
}
}
pub struct ConstantAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_and_write_node_t,
marker: PhantomData<&'pr mut pm_constant_and_write_node_t>
}
impl<'pr> ConstantAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ConstantAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct ConstantOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_operator_write_node_t,
marker: PhantomData<&'pr mut pm_constant_operator_write_node_t>
}
impl<'pr> ConstantOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
}
impl std::fmt::Debug for ConstantOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
}
}
pub struct ConstantOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_or_write_node_t,
marker: PhantomData<&'pr mut pm_constant_or_write_node_t>
}
impl<'pr> ConstantOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ConstantOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct ConstantPathAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_and_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_and_write_node_t>
}
impl<'pr> ConstantPathAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantPathAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn target(&self) -> ConstantPathNode<'pr> {
let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ConstantPathAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantPathAndWriteNode({:?}, {:?}, {:?})", self.target(), self.operator_loc(), self.value())
}
}
pub struct ConstantPathNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_node_t,
marker: PhantomData<&'pr mut pm_constant_path_node_t>
}
impl<'pr> ConstantPathNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantPathNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn parent(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).parent };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn name(&self) -> Option<ConstantId<'pr>> {
let id = unsafe { (*self.pointer).name };
if id == 0 {
None
} else {
Some(ConstantId::new(self.parser, id))
}
}
#[must_use]
pub fn delimiter_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).delimiter_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for ConstantPathNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantPathNode({:?}, {:?}, {:?}, {:?})", self.parent(), self.name(), self.delimiter_loc(), self.name_loc())
}
}
pub struct ConstantPathOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_operator_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_operator_write_node_t>
}
impl<'pr> ConstantPathOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantPathOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn target(&self) -> ConstantPathNode<'pr> {
let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
}
impl std::fmt::Debug for ConstantPathOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantPathOperatorWriteNode({:?}, {:?}, {:?}, {:?})", self.target(), self.binary_operator_loc(), self.value(), self.binary_operator())
}
}
pub struct ConstantPathOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_or_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_or_write_node_t>
}
impl<'pr> ConstantPathOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantPathOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn target(&self) -> ConstantPathNode<'pr> {
let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ConstantPathOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantPathOrWriteNode({:?}, {:?}, {:?})", self.target(), self.operator_loc(), self.value())
}
}
pub struct ConstantPathTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_target_node_t,
marker: PhantomData<&'pr mut pm_constant_path_target_node_t>
}
impl<'pr> ConstantPathTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantPathTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn parent(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).parent };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn name(&self) -> Option<ConstantId<'pr>> {
let id = unsafe { (*self.pointer).name };
if id == 0 {
None
} else {
Some(ConstantId::new(self.parser, id))
}
}
#[must_use]
pub fn delimiter_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).delimiter_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for ConstantPathTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantPathTargetNode({:?}, {:?}, {:?}, {:?})", self.parent(), self.name(), self.delimiter_loc(), self.name_loc())
}
}
pub struct ConstantPathWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_path_write_node_t,
marker: PhantomData<&'pr mut pm_constant_path_write_node_t>
}
impl<'pr> ConstantPathWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantPathWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn target(&self) -> ConstantPathNode<'pr> {
let node: *mut pm_constant_path_node_t = unsafe { (*self.pointer).target };
ConstantPathNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ConstantPathWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantPathWriteNode({:?}, {:?}, {:?})", self.target(), self.operator_loc(), self.value())
}
}
pub struct ConstantReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_read_node_t,
marker: PhantomData<&'pr mut pm_constant_read_node_t>
}
impl<'pr> ConstantReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for ConstantReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantReadNode({:?})", self.name())
}
}
pub struct ConstantTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_target_node_t,
marker: PhantomData<&'pr mut pm_constant_target_node_t>
}
impl<'pr> ConstantTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for ConstantTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantTargetNode({:?})", self.name())
}
}
pub struct ConstantWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_constant_write_node_t,
marker: PhantomData<&'pr mut pm_constant_write_node_t>
}
impl<'pr> ConstantWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ConstantWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for ConstantWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ConstantWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
}
}
pub struct DefNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_def_node_t,
marker: PhantomData<&'pr mut pm_def_node_t>
}
impl<'pr> DefNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::DefNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn parameters(&self) -> Option<ParametersNode<'pr>> {
let node: *mut pm_parameters_node_t = unsafe { (*self.pointer).parameters };
if node.is_null() {
None
} else {
Some(ParametersNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn def_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).def_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn lparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn rparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn equal_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).equal_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for DefNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
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())
}
}
pub struct DefinedNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_defined_node_t,
marker: PhantomData<&'pr mut pm_defined_node_t>
}
impl<'pr> DefinedNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::DefinedNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn lparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn rparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for DefinedNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "DefinedNode({:?}, {:?}, {:?}, {:?})", self.lparen_loc(), self.value(), self.rparen_loc(), self.keyword_loc())
}
}
pub struct ElseNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_else_node_t,
marker: PhantomData<&'pr mut pm_else_node_t>
}
impl<'pr> ElseNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ElseNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn else_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).else_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for ElseNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ElseNode({:?}, {:?}, {:?})", self.else_keyword_loc(), self.statements(), self.end_keyword_loc())
}
}
pub struct EmbeddedStatementsNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_embedded_statements_node_t,
marker: PhantomData<&'pr mut pm_embedded_statements_node_t>
}
impl<'pr> EmbeddedStatementsNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::EmbeddedStatementsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for EmbeddedStatementsNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "EmbeddedStatementsNode({:?}, {:?}, {:?})", self.opening_loc(), self.statements(), self.closing_loc())
}
}
pub struct EmbeddedVariableNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_embedded_variable_node_t,
marker: PhantomData<&'pr mut pm_embedded_variable_node_t>
}
impl<'pr> EmbeddedVariableNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::EmbeddedVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn variable(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).variable };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for EmbeddedVariableNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "EmbeddedVariableNode({:?}, {:?})", self.operator_loc(), self.variable())
}
}
pub struct EnsureNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_ensure_node_t,
marker: PhantomData<&'pr mut pm_ensure_node_t>
}
impl<'pr> EnsureNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::EnsureNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn ensure_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).ensure_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for EnsureNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "EnsureNode({:?}, {:?}, {:?})", self.ensure_keyword_loc(), self.statements(), self.end_keyword_loc())
}
}
pub struct FalseNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_false_node_t,
marker: PhantomData<&'pr mut pm_false_node_t>
}
impl<'pr> FalseNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::FalseNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for FalseNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "FalseNode()")
}
}
pub struct FindPatternNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_find_pattern_node_t,
marker: PhantomData<&'pr mut pm_find_pattern_node_t>
}
impl<'pr> FindPatternNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::FindPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn constant(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).constant };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn left(&self) -> SplatNode<'pr> {
let node: *mut pm_splat_node_t = unsafe { (*self.pointer).left };
SplatNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn requireds(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).requireds };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn right(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).right };
Node::new(self.parser, node)
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for FindPatternNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "FindPatternNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.constant(), self.left(), self.requireds(), self.right(), self.opening_loc(), self.closing_loc())
}
}
pub struct FlipFlopNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_flip_flop_node_t,
marker: PhantomData<&'pr mut pm_flip_flop_node_t>
}
impl<'pr> FlipFlopNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::FlipFlopNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_exclude_end(&self) -> bool {
(self.flags() & PM_RANGE_FLAGS_EXCLUDE_END) != 0
}
#[must_use]
pub fn left(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).left };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn right(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).right };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for FlipFlopNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "FlipFlopNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
}
}
pub struct FloatNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_float_node_t,
marker: PhantomData<&'pr mut pm_float_node_t>
}
impl<'pr> FloatNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::FloatNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn value(&self) -> f64 {
unsafe { (*self.pointer).value }
}
}
impl std::fmt::Debug for FloatNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "FloatNode({:?})", self.value())
}
}
pub struct ForNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_for_node_t,
marker: PhantomData<&'pr mut pm_for_node_t>
}
impl<'pr> ForNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ForNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn index(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).index };
Node::new(self.parser, node)
}
#[must_use]
pub fn collection(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).collection };
Node::new(self.parser, node)
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn for_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).for_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn in_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).in_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn do_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).do_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for ForNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
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())
}
}
pub struct ForwardingArgumentsNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_forwarding_arguments_node_t,
marker: PhantomData<&'pr mut pm_forwarding_arguments_node_t>
}
impl<'pr> ForwardingArgumentsNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ForwardingArgumentsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for ForwardingArgumentsNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ForwardingArgumentsNode()")
}
}
pub struct ForwardingParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_forwarding_parameter_node_t,
marker: PhantomData<&'pr mut pm_forwarding_parameter_node_t>
}
impl<'pr> ForwardingParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ForwardingParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for ForwardingParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ForwardingParameterNode()")
}
}
pub struct ForwardingSuperNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_forwarding_super_node_t,
marker: PhantomData<&'pr mut pm_forwarding_super_node_t>
}
impl<'pr> ForwardingSuperNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ForwardingSuperNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn block(&self) -> Option<BlockNode<'pr>> {
let node: *mut pm_block_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(BlockNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for ForwardingSuperNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ForwardingSuperNode({:?})", self.block())
}
}
pub struct GlobalVariableAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_and_write_node_t>
}
impl<'pr> GlobalVariableAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::GlobalVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for GlobalVariableAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GlobalVariableAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct GlobalVariableOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_operator_write_node_t>
}
impl<'pr> GlobalVariableOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::GlobalVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
}
impl std::fmt::Debug for GlobalVariableOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GlobalVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
}
}
pub struct GlobalVariableOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_or_write_node_t>
}
impl<'pr> GlobalVariableOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::GlobalVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for GlobalVariableOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GlobalVariableOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct GlobalVariableReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_read_node_t,
marker: PhantomData<&'pr mut pm_global_variable_read_node_t>
}
impl<'pr> GlobalVariableReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::GlobalVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for GlobalVariableReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GlobalVariableReadNode({:?})", self.name())
}
}
pub struct GlobalVariableTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_target_node_t,
marker: PhantomData<&'pr mut pm_global_variable_target_node_t>
}
impl<'pr> GlobalVariableTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::GlobalVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for GlobalVariableTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GlobalVariableTargetNode({:?})", self.name())
}
}
pub struct GlobalVariableWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_global_variable_write_node_t,
marker: PhantomData<&'pr mut pm_global_variable_write_node_t>
}
impl<'pr> GlobalVariableWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::GlobalVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for GlobalVariableWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GlobalVariableWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
}
}
pub struct HashNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_hash_node_t,
marker: PhantomData<&'pr mut pm_hash_node_t>
}
impl<'pr> HashNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::HashNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn elements(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).elements };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for HashNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "HashNode({:?}, {:?}, {:?})", self.opening_loc(), self.elements(), self.closing_loc())
}
}
pub struct HashPatternNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_hash_pattern_node_t,
marker: PhantomData<&'pr mut pm_hash_pattern_node_t>
}
impl<'pr> HashPatternNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::HashPatternNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn constant(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).constant };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn elements(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).elements };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn rest(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for HashPatternNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "HashPatternNode({:?}, {:?}, {:?}, {:?}, {:?})", self.constant(), self.elements(), self.rest(), self.opening_loc(), self.closing_loc())
}
}
pub struct IfNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_if_node_t,
marker: PhantomData<&'pr mut pm_if_node_t>
}
impl<'pr> IfNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::IfNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn if_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).if_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn predicate(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
Node::new(self.parser, node)
}
#[must_use]
pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).then_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn subsequent(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).subsequent };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for IfNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "IfNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.if_keyword_loc(), self.predicate(), self.then_keyword_loc(), self.statements(), self.subsequent(), self.end_keyword_loc())
}
}
pub struct ImaginaryNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_imaginary_node_t,
marker: PhantomData<&'pr mut pm_imaginary_node_t>
}
impl<'pr> ImaginaryNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ImaginaryNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn numeric(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).numeric };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ImaginaryNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ImaginaryNode({:?})", self.numeric())
}
}
pub struct ImplicitNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_implicit_node_t,
marker: PhantomData<&'pr mut pm_implicit_node_t>
}
impl<'pr> ImplicitNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ImplicitNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ImplicitNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ImplicitNode({:?})", self.value())
}
}
pub struct ImplicitRestNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_implicit_rest_node_t,
marker: PhantomData<&'pr mut pm_implicit_rest_node_t>
}
impl<'pr> ImplicitRestNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ImplicitRestNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for ImplicitRestNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ImplicitRestNode()")
}
}
pub struct InNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_in_node_t,
marker: PhantomData<&'pr mut pm_in_node_t>
}
impl<'pr> InNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn pattern(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).pattern };
Node::new(self.parser, node)
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn in_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).in_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn then_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).then_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for InNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InNode({:?}, {:?}, {:?}, {:?})", self.pattern(), self.statements(), self.in_loc(), self.then_loc())
}
}
pub struct IndexAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_and_write_node_t,
marker: PhantomData<&'pr mut pm_index_and_write_node_t>
}
impl<'pr> IndexAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::IndexAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for IndexAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "IndexAndWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block(), self.operator_loc(), self.value())
}
}
pub struct IndexOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_operator_write_node_t,
marker: PhantomData<&'pr mut pm_index_operator_write_node_t>
}
impl<'pr> IndexOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::IndexOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for IndexOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
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())
}
}
pub struct IndexOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_or_write_node_t,
marker: PhantomData<&'pr mut pm_index_or_write_node_t>
}
impl<'pr> IndexOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::IndexOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn call_operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).call_operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for IndexOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "IndexOrWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.call_operator_loc(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block(), self.operator_loc(), self.value())
}
}
pub struct IndexTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_index_target_node_t,
marker: PhantomData<&'pr mut pm_index_target_node_t>
}
impl<'pr> IndexTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::IndexTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_safe_navigation(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_SAFE_NAVIGATION) != 0
}
#[must_use]
pub fn is_variable_call(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_VARIABLE_CALL) != 0
}
#[must_use]
pub fn is_attribute_write(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) != 0
}
#[must_use]
pub fn is_ignore_visibility(&self) -> bool {
(self.flags() & PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY) != 0
}
#[must_use]
pub fn receiver(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).receiver };
Node::new(self.parser, node)
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn block(&self) -> Option<BlockArgumentNode<'pr>> {
let node: *mut pm_block_argument_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(BlockArgumentNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for IndexTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "IndexTargetNode({:?}, {:?}, {:?}, {:?}, {:?})", self.receiver(), self.opening_loc(), self.arguments(), self.closing_loc(), self.block())
}
}
pub struct InstanceVariableAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_and_write_node_t>
}
impl<'pr> InstanceVariableAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InstanceVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for InstanceVariableAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InstanceVariableAndWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct InstanceVariableOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_operator_write_node_t>
}
impl<'pr> InstanceVariableOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InstanceVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
}
impl std::fmt::Debug for InstanceVariableOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InstanceVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.binary_operator_loc(), self.value(), self.binary_operator())
}
}
pub struct InstanceVariableOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_or_write_node_t>
}
impl<'pr> InstanceVariableOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InstanceVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for InstanceVariableOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InstanceVariableOrWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct InstanceVariableReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_read_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_read_node_t>
}
impl<'pr> InstanceVariableReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InstanceVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for InstanceVariableReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InstanceVariableReadNode({:?})", self.name())
}
}
pub struct InstanceVariableTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_target_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_target_node_t>
}
impl<'pr> InstanceVariableTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InstanceVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for InstanceVariableTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InstanceVariableTargetNode({:?})", self.name())
}
}
pub struct InstanceVariableWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_instance_variable_write_node_t,
marker: PhantomData<&'pr mut pm_instance_variable_write_node_t>
}
impl<'pr> InstanceVariableWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InstanceVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for InstanceVariableWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InstanceVariableWriteNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value(), self.operator_loc())
}
}
pub struct IntegerNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_integer_node_t,
marker: PhantomData<&'pr mut pm_integer_node_t>
}
impl<'pr> IntegerNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::IntegerNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_binary(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_BINARY) != 0
}
#[must_use]
pub fn is_decimal(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_DECIMAL) != 0
}
#[must_use]
pub fn is_octal(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_OCTAL) != 0
}
#[must_use]
pub fn is_hexadecimal(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_HEXADECIMAL) != 0
}
#[must_use]
pub fn value(&self) -> Integer<'pr> {
Integer::new(unsafe { &(*self.pointer).value })
}
}
impl std::fmt::Debug for IntegerNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "IntegerNode({:?})", self.value())
}
}
pub struct InterpolatedMatchLastLineNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_match_last_line_node_t,
marker: PhantomData<&'pr mut pm_interpolated_match_last_line_node_t>
}
impl<'pr> InterpolatedMatchLastLineNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InterpolatedMatchLastLineNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_ignore_case(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
}
#[must_use]
pub fn is_extended(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
}
#[must_use]
pub fn is_multi_line(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
}
#[must_use]
pub fn is_once(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
}
#[must_use]
pub fn is_euc_jp(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
}
#[must_use]
pub fn is_ascii_8bit(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
}
#[must_use]
pub fn is_windows_31j(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
}
#[must_use]
pub fn is_utf_8(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_forced_us_ascii_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn parts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).parts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for InterpolatedMatchLastLineNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InterpolatedMatchLastLineNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
}
}
pub struct InterpolatedRegularExpressionNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_regular_expression_node_t,
marker: PhantomData<&'pr mut pm_interpolated_regular_expression_node_t>
}
impl<'pr> InterpolatedRegularExpressionNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InterpolatedRegularExpressionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_ignore_case(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
}
#[must_use]
pub fn is_extended(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
}
#[must_use]
pub fn is_multi_line(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
}
#[must_use]
pub fn is_once(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
}
#[must_use]
pub fn is_euc_jp(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
}
#[must_use]
pub fn is_ascii_8bit(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
}
#[must_use]
pub fn is_windows_31j(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
}
#[must_use]
pub fn is_utf_8(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_forced_us_ascii_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn parts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).parts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for InterpolatedRegularExpressionNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InterpolatedRegularExpressionNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
}
}
pub struct InterpolatedStringNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_string_node_t,
marker: PhantomData<&'pr mut pm_interpolated_string_node_t>
}
impl<'pr> InterpolatedStringNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InterpolatedStringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_frozen(&self) -> bool {
(self.flags() & PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN) != 0
}
#[must_use]
pub fn is_mutable(&self) -> bool {
(self.flags() & PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn parts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).parts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for InterpolatedStringNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InterpolatedStringNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
}
}
pub struct InterpolatedSymbolNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_symbol_node_t,
marker: PhantomData<&'pr mut pm_interpolated_symbol_node_t>
}
impl<'pr> InterpolatedSymbolNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InterpolatedSymbolNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn parts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).parts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for InterpolatedSymbolNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InterpolatedSymbolNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
}
}
pub struct InterpolatedXStringNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_interpolated_x_string_node_t,
marker: PhantomData<&'pr mut pm_interpolated_x_string_node_t>
}
impl<'pr> InterpolatedXStringNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::InterpolatedXStringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn parts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).parts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for InterpolatedXStringNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "InterpolatedXStringNode({:?}, {:?}, {:?})", self.opening_loc(), self.parts(), self.closing_loc())
}
}
pub struct ItLocalVariableReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_it_local_variable_read_node_t,
marker: PhantomData<&'pr mut pm_it_local_variable_read_node_t>
}
impl<'pr> ItLocalVariableReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ItLocalVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for ItLocalVariableReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ItLocalVariableReadNode()")
}
}
pub struct ItParametersNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_it_parameters_node_t,
marker: PhantomData<&'pr mut pm_it_parameters_node_t>
}
impl<'pr> ItParametersNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ItParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for ItParametersNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ItParametersNode()")
}
}
pub struct KeywordHashNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_keyword_hash_node_t,
marker: PhantomData<&'pr mut pm_keyword_hash_node_t>
}
impl<'pr> KeywordHashNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::KeywordHashNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_symbol_keys(&self) -> bool {
(self.flags() & PM_KEYWORD_HASH_NODE_FLAGS_SYMBOL_KEYS) != 0
}
#[must_use]
pub fn elements(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).elements };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
}
impl std::fmt::Debug for KeywordHashNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "KeywordHashNode({:?})", self.elements())
}
}
pub struct KeywordRestParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_keyword_rest_parameter_node_t,
marker: PhantomData<&'pr mut pm_keyword_rest_parameter_node_t>
}
impl<'pr> KeywordRestParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::KeywordRestParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> Option<ConstantId<'pr>> {
let id = unsafe { (*self.pointer).name };
if id == 0 {
None
} else {
Some(ConstantId::new(self.parser, id))
}
}
#[must_use]
pub fn name_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for KeywordRestParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "KeywordRestParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc())
}
}
pub struct LambdaNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_lambda_node_t,
marker: PhantomData<&'pr mut pm_lambda_node_t>
}
impl<'pr> LambdaNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LambdaNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn parameters(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).parameters };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
}
impl std::fmt::Debug for LambdaNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LambdaNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.operator_loc(), self.opening_loc(), self.closing_loc(), self.parameters(), self.body())
}
}
pub struct LocalVariableAndWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_and_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_and_write_node_t>
}
impl<'pr> LocalVariableAndWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LocalVariableAndWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn depth(&self) -> u32 {
unsafe { (*self.pointer).depth }
}
}
impl std::fmt::Debug for LocalVariableAndWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LocalVariableAndWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name_loc(), self.operator_loc(), self.value(), self.name(), self.depth())
}
}
pub struct LocalVariableOperatorWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_operator_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_operator_write_node_t>
}
impl<'pr> LocalVariableOperatorWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LocalVariableOperatorWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn binary_operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).binary_operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn binary_operator(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).binary_operator })
}
#[must_use]
pub fn depth(&self) -> u32 {
unsafe { (*self.pointer).depth }
}
}
impl std::fmt::Debug for LocalVariableOperatorWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LocalVariableOperatorWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.name_loc(), self.binary_operator_loc(), self.value(), self.name(), self.binary_operator(), self.depth())
}
}
pub struct LocalVariableOrWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_or_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_or_write_node_t>
}
impl<'pr> LocalVariableOrWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LocalVariableOrWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn depth(&self) -> u32 {
unsafe { (*self.pointer).depth }
}
}
impl std::fmt::Debug for LocalVariableOrWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LocalVariableOrWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name_loc(), self.operator_loc(), self.value(), self.name(), self.depth())
}
}
pub struct LocalVariableReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_read_node_t,
marker: PhantomData<&'pr mut pm_local_variable_read_node_t>
}
impl<'pr> LocalVariableReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LocalVariableReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn depth(&self) -> u32 {
unsafe { (*self.pointer).depth }
}
}
impl std::fmt::Debug for LocalVariableReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LocalVariableReadNode({:?}, {:?})", self.name(), self.depth())
}
}
pub struct LocalVariableTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_target_node_t,
marker: PhantomData<&'pr mut pm_local_variable_target_node_t>
}
impl<'pr> LocalVariableTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LocalVariableTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn depth(&self) -> u32 {
unsafe { (*self.pointer).depth }
}
}
impl std::fmt::Debug for LocalVariableTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LocalVariableTargetNode({:?}, {:?})", self.name(), self.depth())
}
}
pub struct LocalVariableWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_local_variable_write_node_t,
marker: PhantomData<&'pr mut pm_local_variable_write_node_t>
}
impl<'pr> LocalVariableWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::LocalVariableWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn depth(&self) -> u32 {
unsafe { (*self.pointer).depth }
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for LocalVariableWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "LocalVariableWriteNode({:?}, {:?}, {:?}, {:?}, {:?})", self.name(), self.depth(), self.name_loc(), self.value(), self.operator_loc())
}
}
pub struct MatchLastLineNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_last_line_node_t,
marker: PhantomData<&'pr mut pm_match_last_line_node_t>
}
impl<'pr> MatchLastLineNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MatchLastLineNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_ignore_case(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
}
#[must_use]
pub fn is_extended(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
}
#[must_use]
pub fn is_multi_line(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
}
#[must_use]
pub fn is_once(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
}
#[must_use]
pub fn is_euc_jp(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
}
#[must_use]
pub fn is_ascii_8bit(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
}
#[must_use]
pub fn is_windows_31j(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
}
#[must_use]
pub fn is_utf_8(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_forced_us_ascii_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn content_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).content_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn unescaped(&self) -> &[u8] {
unsafe {
let source = (*self.pointer).unescaped.source;
if source.is_null() {
return &[];
}
let length = (*self.pointer).unescaped.length;
std::slice::from_raw_parts(source, length)
}
}
}
impl std::fmt::Debug for MatchLastLineNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MatchLastLineNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
}
}
pub struct MatchPredicateNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_predicate_node_t,
marker: PhantomData<&'pr mut pm_match_predicate_node_t>
}
impl<'pr> MatchPredicateNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MatchPredicateNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn pattern(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).pattern };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for MatchPredicateNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MatchPredicateNode({:?}, {:?}, {:?})", self.value(), self.pattern(), self.operator_loc())
}
}
pub struct MatchRequiredNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_required_node_t,
marker: PhantomData<&'pr mut pm_match_required_node_t>
}
impl<'pr> MatchRequiredNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MatchRequiredNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
#[must_use]
pub fn pattern(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).pattern };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for MatchRequiredNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MatchRequiredNode({:?}, {:?}, {:?})", self.value(), self.pattern(), self.operator_loc())
}
}
pub struct MatchWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_match_write_node_t,
marker: PhantomData<&'pr mut pm_match_write_node_t>
}
impl<'pr> MatchWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MatchWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn call(&self) -> CallNode<'pr> {
let node: *mut pm_call_node_t = unsafe { (*self.pointer).call };
CallNode { parser: self.parser, pointer: node, marker: PhantomData }
}
#[must_use]
pub fn targets(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).targets };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
}
impl std::fmt::Debug for MatchWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MatchWriteNode({:?}, {:?})", self.call(), self.targets())
}
}
pub struct MissingNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_missing_node_t,
marker: PhantomData<&'pr mut pm_missing_node_t>
}
impl<'pr> MissingNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MissingNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for MissingNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MissingNode()")
}
}
pub struct ModuleNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_module_node_t,
marker: PhantomData<&'pr mut pm_module_node_t>
}
impl<'pr> ModuleNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ModuleNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn module_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).module_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn constant_path(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).constant_path };
Node::new(self.parser, node)
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for ModuleNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ModuleNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.module_keyword_loc(), self.constant_path(), self.body(), self.end_keyword_loc(), self.name())
}
}
pub struct MultiTargetNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_multi_target_node_t,
marker: PhantomData<&'pr mut pm_multi_target_node_t>
}
impl<'pr> MultiTargetNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MultiTargetNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn lefts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).lefts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn rest(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn rights(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).rights };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn lparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn rparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for MultiTargetNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MultiTargetNode({:?}, {:?}, {:?}, {:?}, {:?})", self.lefts(), self.rest(), self.rights(), self.lparen_loc(), self.rparen_loc())
}
}
pub struct MultiWriteNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_multi_write_node_t,
marker: PhantomData<&'pr mut pm_multi_write_node_t>
}
impl<'pr> MultiWriteNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::MultiWriteNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn lefts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).lefts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn rest(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn rights(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).rights };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn lparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn rparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for MultiWriteNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "MultiWriteNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.lefts(), self.rest(), self.rights(), self.lparen_loc(), self.rparen_loc(), self.operator_loc(), self.value())
}
}
pub struct NextNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_next_node_t,
marker: PhantomData<&'pr mut pm_next_node_t>
}
impl<'pr> NextNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::NextNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for NextNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "NextNode({:?}, {:?})", self.arguments(), self.keyword_loc())
}
}
pub struct NilNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_nil_node_t,
marker: PhantomData<&'pr mut pm_nil_node_t>
}
impl<'pr> NilNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::NilNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for NilNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "NilNode()")
}
}
pub struct NoKeywordsParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_no_keywords_parameter_node_t,
marker: PhantomData<&'pr mut pm_no_keywords_parameter_node_t>
}
impl<'pr> NoKeywordsParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::NoKeywordsParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for NoKeywordsParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "NoKeywordsParameterNode({:?}, {:?})", self.operator_loc(), self.keyword_loc())
}
}
pub struct NumberedParametersNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_numbered_parameters_node_t,
marker: PhantomData<&'pr mut pm_numbered_parameters_node_t>
}
impl<'pr> NumberedParametersNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::NumberedParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn maximum(&self) -> u8 {
unsafe { (*self.pointer).maximum }
}
}
impl std::fmt::Debug for NumberedParametersNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "NumberedParametersNode({:?})", self.maximum())
}
}
pub struct NumberedReferenceReadNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_numbered_reference_read_node_t,
marker: PhantomData<&'pr mut pm_numbered_reference_read_node_t>
}
impl<'pr> NumberedReferenceReadNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::NumberedReferenceReadNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn number(&self) -> u32 {
unsafe { (*self.pointer).number }
}
}
impl std::fmt::Debug for NumberedReferenceReadNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "NumberedReferenceReadNode({:?})", self.number())
}
}
pub struct OptionalKeywordParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_optional_keyword_parameter_node_t,
marker: PhantomData<&'pr mut pm_optional_keyword_parameter_node_t>
}
impl<'pr> OptionalKeywordParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::OptionalKeywordParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for OptionalKeywordParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "OptionalKeywordParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.value())
}
}
pub struct OptionalParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_optional_parameter_node_t,
marker: PhantomData<&'pr mut pm_optional_parameter_node_t>
}
impl<'pr> OptionalParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::OptionalParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn value(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).value };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for OptionalParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "OptionalParameterNode({:?}, {:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc(), self.value())
}
}
pub struct OrNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_or_node_t,
marker: PhantomData<&'pr mut pm_or_node_t>
}
impl<'pr> OrNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::OrNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn left(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).left };
Node::new(self.parser, node)
}
#[must_use]
pub fn right(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).right };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for OrNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "OrNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
}
}
pub struct ParametersNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_parameters_node_t,
marker: PhantomData<&'pr mut pm_parameters_node_t>
}
impl<'pr> ParametersNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ParametersNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn requireds(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).requireds };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn optionals(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).optionals };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn rest(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).rest };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn posts(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).posts };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn keywords(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).keywords };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn keyword_rest(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).keyword_rest };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn block(&self) -> Option<BlockParameterNode<'pr>> {
let node: *mut pm_block_parameter_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(BlockParameterNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for ParametersNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ParametersNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.requireds(), self.optionals(), self.rest(), self.posts(), self.keywords(), self.keyword_rest(), self.block())
}
}
pub struct ParenthesesNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_parentheses_node_t,
marker: PhantomData<&'pr mut pm_parentheses_node_t>
}
impl<'pr> ParenthesesNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ParenthesesNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_multiple_statements(&self) -> bool {
(self.flags() & PM_PARENTHESES_NODE_FLAGS_MULTIPLE_STATEMENTS) != 0
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for ParenthesesNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ParenthesesNode({:?}, {:?}, {:?})", self.body(), self.opening_loc(), self.closing_loc())
}
}
pub struct PinnedExpressionNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_pinned_expression_node_t,
marker: PhantomData<&'pr mut pm_pinned_expression_node_t>
}
impl<'pr> PinnedExpressionNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::PinnedExpressionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn expression(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn lparen_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn rparen_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for PinnedExpressionNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "PinnedExpressionNode({:?}, {:?}, {:?}, {:?})", self.expression(), self.operator_loc(), self.lparen_loc(), self.rparen_loc())
}
}
pub struct PinnedVariableNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_pinned_variable_node_t,
marker: PhantomData<&'pr mut pm_pinned_variable_node_t>
}
impl<'pr> PinnedVariableNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::PinnedVariableNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn variable(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).variable };
Node::new(self.parser, node)
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for PinnedVariableNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "PinnedVariableNode({:?}, {:?})", self.variable(), self.operator_loc())
}
}
pub struct PostExecutionNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_post_execution_node_t,
marker: PhantomData<&'pr mut pm_post_execution_node_t>
}
impl<'pr> PostExecutionNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::PostExecutionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for PostExecutionNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "PostExecutionNode({:?}, {:?}, {:?}, {:?})", self.statements(), self.keyword_loc(), self.opening_loc(), self.closing_loc())
}
}
pub struct PreExecutionNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_pre_execution_node_t,
marker: PhantomData<&'pr mut pm_pre_execution_node_t>
}
impl<'pr> PreExecutionNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::PreExecutionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for PreExecutionNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "PreExecutionNode({:?}, {:?}, {:?}, {:?})", self.statements(), self.keyword_loc(), self.opening_loc(), self.closing_loc())
}
}
pub struct ProgramNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_program_node_t,
marker: PhantomData<&'pr mut pm_program_node_t>
}
impl<'pr> ProgramNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ProgramNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn statements(&self) -> StatementsNode<'pr> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
StatementsNode { parser: self.parser, pointer: node, marker: PhantomData }
}
}
impl std::fmt::Debug for ProgramNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ProgramNode({:?}, {:?})", self.locals(), self.statements())
}
}
pub struct RangeNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_range_node_t,
marker: PhantomData<&'pr mut pm_range_node_t>
}
impl<'pr> RangeNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RangeNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_exclude_end(&self) -> bool {
(self.flags() & PM_RANGE_FLAGS_EXCLUDE_END) != 0
}
#[must_use]
pub fn left(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).left };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn right(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).right };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for RangeNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RangeNode({:?}, {:?}, {:?})", self.left(), self.right(), self.operator_loc())
}
}
pub struct RationalNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rational_node_t,
marker: PhantomData<&'pr mut pm_rational_node_t>
}
impl<'pr> RationalNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RationalNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_binary(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_BINARY) != 0
}
#[must_use]
pub fn is_decimal(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_DECIMAL) != 0
}
#[must_use]
pub fn is_octal(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_OCTAL) != 0
}
#[must_use]
pub fn is_hexadecimal(&self) -> bool {
(self.flags() & PM_INTEGER_BASE_FLAGS_HEXADECIMAL) != 0
}
#[must_use]
pub fn numerator(&self) -> Integer<'pr> {
Integer::new(unsafe { &(*self.pointer).numerator })
}
#[must_use]
pub fn denominator(&self) -> Integer<'pr> {
Integer::new(unsafe { &(*self.pointer).denominator })
}
}
impl std::fmt::Debug for RationalNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RationalNode({:?}, {:?})", self.numerator(), self.denominator())
}
}
pub struct RedoNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_redo_node_t,
marker: PhantomData<&'pr mut pm_redo_node_t>
}
impl<'pr> RedoNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RedoNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for RedoNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RedoNode()")
}
}
pub struct RegularExpressionNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_regular_expression_node_t,
marker: PhantomData<&'pr mut pm_regular_expression_node_t>
}
impl<'pr> RegularExpressionNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RegularExpressionNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_ignore_case(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_IGNORE_CASE) != 0
}
#[must_use]
pub fn is_extended(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EXTENDED) != 0
}
#[must_use]
pub fn is_multi_line(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_MULTI_LINE) != 0
}
#[must_use]
pub fn is_once(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ONCE) != 0
}
#[must_use]
pub fn is_euc_jp(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_EUC_JP) != 0
}
#[must_use]
pub fn is_ascii_8bit(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_ASCII_8BIT) != 0
}
#[must_use]
pub fn is_windows_31j(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_WINDOWS_31J) != 0
}
#[must_use]
pub fn is_utf_8(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_UTF_8) != 0
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_forced_us_ascii_encoding(&self) -> bool {
(self.flags() & PM_REGULAR_EXPRESSION_FLAGS_FORCED_US_ASCII_ENCODING) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn content_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).content_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn unescaped(&self) -> &[u8] {
unsafe {
let source = (*self.pointer).unescaped.source;
if source.is_null() {
return &[];
}
let length = (*self.pointer).unescaped.length;
std::slice::from_raw_parts(source, length)
}
}
}
impl std::fmt::Debug for RegularExpressionNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RegularExpressionNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
}
}
pub struct RequiredKeywordParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_required_keyword_parameter_node_t,
marker: PhantomData<&'pr mut pm_required_keyword_parameter_node_t>
}
impl<'pr> RequiredKeywordParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RequiredKeywordParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
#[must_use]
pub fn name_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for RequiredKeywordParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RequiredKeywordParameterNode({:?}, {:?})", self.name(), self.name_loc())
}
}
pub struct RequiredParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_required_parameter_node_t,
marker: PhantomData<&'pr mut pm_required_parameter_node_t>
}
impl<'pr> RequiredParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RequiredParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> ConstantId<'pr> {
ConstantId::new(self.parser, unsafe { (*self.pointer).name })
}
}
impl std::fmt::Debug for RequiredParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RequiredParameterNode({:?})", self.name())
}
}
pub struct RescueModifierNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rescue_modifier_node_t,
marker: PhantomData<&'pr mut pm_rescue_modifier_node_t>
}
impl<'pr> RescueModifierNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RescueModifierNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn expression(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
Node::new(self.parser, node)
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn rescue_expression(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).rescue_expression };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for RescueModifierNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RescueModifierNode({:?}, {:?}, {:?})", self.expression(), self.keyword_loc(), self.rescue_expression())
}
}
pub struct RescueNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rescue_node_t,
marker: PhantomData<&'pr mut pm_rescue_node_t>
}
impl<'pr> RescueNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RescueNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn exceptions(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).exceptions };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn operator_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn reference(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).reference };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).then_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn subsequent(&self) -> Option<RescueNode<'pr>> {
let node: *mut pm_rescue_node_t = unsafe { (*self.pointer).subsequent };
if node.is_null() {
None
} else {
Some(RescueNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for RescueNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RescueNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.exceptions(), self.operator_loc(), self.reference(), self.then_keyword_loc(), self.statements(), self.subsequent())
}
}
pub struct RestParameterNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_rest_parameter_node_t,
marker: PhantomData<&'pr mut pm_rest_parameter_node_t>
}
impl<'pr> RestParameterNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RestParameterNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_repeated_parameter(&self) -> bool {
(self.flags() & PM_PARAMETER_FLAGS_REPEATED_PARAMETER) != 0
}
#[must_use]
pub fn name(&self) -> Option<ConstantId<'pr>> {
let id = unsafe { (*self.pointer).name };
if id == 0 {
None
} else {
Some(ConstantId::new(self.parser, id))
}
}
#[must_use]
pub fn name_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).name_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for RestParameterNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RestParameterNode({:?}, {:?}, {:?})", self.name(), self.name_loc(), self.operator_loc())
}
}
pub struct RetryNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_retry_node_t,
marker: PhantomData<&'pr mut pm_retry_node_t>
}
impl<'pr> RetryNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::RetryNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for RetryNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "RetryNode()")
}
}
pub struct ReturnNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_return_node_t,
marker: PhantomData<&'pr mut pm_return_node_t>
}
impl<'pr> ReturnNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ReturnNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for ReturnNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ReturnNode({:?}, {:?})", self.keyword_loc(), self.arguments())
}
}
pub struct SelfNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_self_node_t,
marker: PhantomData<&'pr mut pm_self_node_t>
}
impl<'pr> SelfNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SelfNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for SelfNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SelfNode()")
}
}
pub struct ShareableConstantNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_shareable_constant_node_t,
marker: PhantomData<&'pr mut pm_shareable_constant_node_t>
}
impl<'pr> ShareableConstantNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::ShareableConstantNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_literal(&self) -> bool {
(self.flags() & PM_SHAREABLE_CONSTANT_NODE_FLAGS_LITERAL) != 0
}
#[must_use]
pub fn is_experimental_everything(&self) -> bool {
(self.flags() & PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_EVERYTHING) != 0
}
#[must_use]
pub fn is_experimental_copy(&self) -> bool {
(self.flags() & PM_SHAREABLE_CONSTANT_NODE_FLAGS_EXPERIMENTAL_COPY) != 0
}
#[must_use]
pub fn write(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).write };
Node::new(self.parser, node)
}
}
impl std::fmt::Debug for ShareableConstantNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "ShareableConstantNode({:?})", self.write())
}
}
pub struct SingletonClassNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_singleton_class_node_t,
marker: PhantomData<&'pr mut pm_singleton_class_node_t>
}
impl<'pr> SingletonClassNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SingletonClassNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn locals(&self) -> ConstantList<'pr> {
let pointer: *mut pm_constant_id_list_t = unsafe { &mut (*self.pointer).locals };
ConstantList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn class_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).class_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn expression(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
Node::new(self.parser, node)
}
#[must_use]
pub fn body(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).body };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for SingletonClassNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SingletonClassNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.locals(), self.class_keyword_loc(), self.operator_loc(), self.expression(), self.body(), self.end_keyword_loc())
}
}
pub struct SourceEncodingNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_source_encoding_node_t,
marker: PhantomData<&'pr mut pm_source_encoding_node_t>
}
impl<'pr> SourceEncodingNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SourceEncodingNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for SourceEncodingNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SourceEncodingNode()")
}
}
pub struct SourceFileNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_source_file_node_t,
marker: PhantomData<&'pr mut pm_source_file_node_t>
}
impl<'pr> SourceFileNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SourceFileNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_frozen(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_FROZEN) != 0
}
#[must_use]
pub fn is_mutable(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_MUTABLE) != 0
}
#[must_use]
pub fn filepath(&self) -> &[u8] {
unsafe {
let source = (*self.pointer).filepath.source;
if source.is_null() {
return &[];
}
let length = (*self.pointer).filepath.length;
std::slice::from_raw_parts(source, length)
}
}
}
impl std::fmt::Debug for SourceFileNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SourceFileNode({:?})", self.filepath())
}
}
pub struct SourceLineNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_source_line_node_t,
marker: PhantomData<&'pr mut pm_source_line_node_t>
}
impl<'pr> SourceLineNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SourceLineNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for SourceLineNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SourceLineNode()")
}
}
pub struct SplatNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_splat_node_t,
marker: PhantomData<&'pr mut pm_splat_node_t>
}
impl<'pr> SplatNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SplatNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn operator_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).operator_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn expression(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).expression };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
}
impl std::fmt::Debug for SplatNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SplatNode({:?}, {:?})", self.operator_loc(), self.expression())
}
}
pub struct StatementsNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_statements_node_t,
marker: PhantomData<&'pr mut pm_statements_node_t>
}
impl<'pr> StatementsNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::StatementsNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn body(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).body };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
}
impl std::fmt::Debug for StatementsNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "StatementsNode({:?})", self.body())
}
}
pub struct StringNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_string_node_t,
marker: PhantomData<&'pr mut pm_string_node_t>
}
impl<'pr> StringNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::StringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_frozen(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_FROZEN) != 0
}
#[must_use]
pub fn is_mutable(&self) -> bool {
(self.flags() & PM_STRING_FLAGS_MUTABLE) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn content_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).content_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn unescaped(&self) -> &[u8] {
unsafe {
let source = (*self.pointer).unescaped.source;
if source.is_null() {
return &[];
}
let length = (*self.pointer).unescaped.length;
std::slice::from_raw_parts(source, length)
}
}
}
impl std::fmt::Debug for StringNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "StringNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
}
}
pub struct SuperNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_super_node_t,
marker: PhantomData<&'pr mut pm_super_node_t>
}
impl<'pr> SuperNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SuperNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn lparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn rparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn block(&self) -> Option<Node<'pr>> {
let node: *mut pm_node_t = unsafe { (*self.pointer).block };
if node.is_null() {
None
} else {
Some(Node::new(self.parser, node))
}
}
}
impl std::fmt::Debug for SuperNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SuperNode({:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.lparen_loc(), self.arguments(), self.rparen_loc(), self.block())
}
}
pub struct SymbolNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_symbol_node_t,
marker: PhantomData<&'pr mut pm_symbol_node_t>
}
impl<'pr> SymbolNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::SymbolNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_SYMBOL_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_SYMBOL_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn is_forced_us_ascii_encoding(&self) -> bool {
(self.flags() & PM_SYMBOL_FLAGS_FORCED_US_ASCII_ENCODING) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn value_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).value_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn unescaped(&self) -> &[u8] {
unsafe {
let source = (*self.pointer).unescaped.source;
if source.is_null() {
return &[];
}
let length = (*self.pointer).unescaped.length;
std::slice::from_raw_parts(source, length)
}
}
}
impl std::fmt::Debug for SymbolNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "SymbolNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.value_loc(), self.closing_loc(), self.unescaped())
}
}
pub struct TrueNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_true_node_t,
marker: PhantomData<&'pr mut pm_true_node_t>
}
impl<'pr> TrueNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::TrueNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
}
impl std::fmt::Debug for TrueNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "TrueNode()")
}
}
pub struct UndefNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_undef_node_t,
marker: PhantomData<&'pr mut pm_undef_node_t>
}
impl<'pr> UndefNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::UndefNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn names(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).names };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
}
impl std::fmt::Debug for UndefNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "UndefNode({:?}, {:?})", self.names(), self.keyword_loc())
}
}
pub struct UnlessNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_unless_node_t,
marker: PhantomData<&'pr mut pm_unless_node_t>
}
impl<'pr> UnlessNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::UnlessNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn predicate(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
Node::new(self.parser, node)
}
#[must_use]
pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).then_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn else_clause(&self) -> Option<ElseNode<'pr>> {
let node: *mut pm_else_node_t = unsafe { (*self.pointer).else_clause };
if node.is_null() {
None
} else {
Some(ElseNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn end_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).end_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for UnlessNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "UnlessNode({:?}, {:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.predicate(), self.then_keyword_loc(), self.statements(), self.else_clause(), self.end_keyword_loc())
}
}
pub struct UntilNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_until_node_t,
marker: PhantomData<&'pr mut pm_until_node_t>
}
impl<'pr> UntilNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::UntilNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_begin_modifier(&self) -> bool {
(self.flags() & PM_LOOP_FLAGS_BEGIN_MODIFIER) != 0
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn do_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).do_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn predicate(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
Node::new(self.parser, node)
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for UntilNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "UntilNode({:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.do_keyword_loc(), self.closing_loc(), self.predicate(), self.statements())
}
}
pub struct WhenNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_when_node_t,
marker: PhantomData<&'pr mut pm_when_node_t>
}
impl<'pr> WhenNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::WhenNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn conditions(&self) -> NodeList<'pr> {
let pointer: *mut pm_node_list = unsafe { &mut (*self.pointer).conditions };
NodeList { parser: self.parser, pointer: unsafe { NonNull::new_unchecked(pointer) }, marker: PhantomData }
}
#[must_use]
pub fn then_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).then_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for WhenNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "WhenNode({:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.conditions(), self.then_keyword_loc(), self.statements())
}
}
pub struct WhileNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_while_node_t,
marker: PhantomData<&'pr mut pm_while_node_t>
}
impl<'pr> WhileNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::WhileNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_begin_modifier(&self) -> bool {
(self.flags() & PM_LOOP_FLAGS_BEGIN_MODIFIER) != 0
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn do_keyword_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).do_keyword_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn closing_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn predicate(&self) -> Node<'pr> {
let node: *mut pm_node_t = unsafe { (*self.pointer).predicate };
Node::new(self.parser, node)
}
#[must_use]
pub fn statements(&self) -> Option<StatementsNode<'pr>> {
let node: *mut pm_statements_node_t = unsafe { (*self.pointer).statements };
if node.is_null() {
None
} else {
Some(StatementsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
}
impl std::fmt::Debug for WhileNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "WhileNode({:?}, {:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.do_keyword_loc(), self.closing_loc(), self.predicate(), self.statements())
}
}
pub struct XStringNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_x_string_node_t,
marker: PhantomData<&'pr mut pm_x_string_node_t>
}
impl<'pr> XStringNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::XStringNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn is_forced_utf8_encoding(&self) -> bool {
(self.flags() & PM_ENCODING_FLAGS_FORCED_UTF8_ENCODING) != 0
}
#[must_use]
pub fn is_forced_binary_encoding(&self) -> bool {
(self.flags() & PM_ENCODING_FLAGS_FORCED_BINARY_ENCODING) != 0
}
#[must_use]
pub fn opening_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).opening_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn content_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).content_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn closing_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).closing_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn unescaped(&self) -> &[u8] {
unsafe {
let source = (*self.pointer).unescaped.source;
if source.is_null() {
return &[];
}
let length = (*self.pointer).unescaped.length;
std::slice::from_raw_parts(source, length)
}
}
}
impl std::fmt::Debug for XStringNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "XStringNode({:?}, {:?}, {:?}, {:?})", self.opening_loc(), self.content_loc(), self.closing_loc(), self.unescaped())
}
}
pub struct YieldNode<'pr> {
parser: NonNull<pm_parser_t>,
pointer: *mut pm_yield_node_t,
marker: PhantomData<&'pr mut pm_yield_node_t>
}
impl<'pr> YieldNode<'pr> {
#[must_use]
pub fn as_node(&self) -> Node<'pr> {
Node::YieldNode { parser: self.parser, pointer: self.pointer, marker: PhantomData }
}
#[must_use]
pub fn location(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).base.location };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn flags(&self) -> pm_node_flags_t {
unsafe { (*self.pointer).base.flags }
}
#[must_use]
pub fn keyword_loc(&self) -> Location<'pr> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).keyword_loc };
Location::new(self.parser, unsafe { &(*pointer) })
}
#[must_use]
pub fn lparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).lparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
#[must_use]
pub fn arguments(&self) -> Option<ArgumentsNode<'pr>> {
let node: *mut pm_arguments_node_t = unsafe { (*self.pointer).arguments };
if node.is_null() {
None
} else {
Some(ArgumentsNode { parser: self.parser, pointer: node, marker: PhantomData })
}
}
#[must_use]
pub fn rparen_loc(&self) -> Option<Location<'pr>> {
let pointer: *mut pm_location_t = unsafe { &mut (*self.pointer).rparen_loc };
let start = unsafe { (*pointer).start };
if start.is_null() {
None
} else {
Some(Location::new(self.parser, unsafe { &(*pointer) }))
}
}
}
impl std::fmt::Debug for YieldNode<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "YieldNode({:?}, {:?}, {:?}, {:?})", self.keyword_loc(), self.lparen_loc(), self.arguments(), self.rparen_loc())
}
}
pub trait Visit<'pr> {
fn visit_branch_node_enter(&mut self, _node: Node<'pr>) {
}
fn visit_branch_node_leave(&mut self) {
}
fn visit_leaf_node_enter(&mut self, _node: Node<'pr>) {
}
fn visit_leaf_node_leave(&mut self) {
}
fn visit(&mut self, node: &Node<'pr>) {
match node {
Node::AliasGlobalVariableNode { parser, pointer, marker } => {
let concrete = AliasGlobalVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_alias_global_variable_node(&concrete);
self.visit_branch_node_leave();
}
Node::AliasMethodNode { parser, pointer, marker } => {
let concrete = AliasMethodNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_alias_method_node(&concrete);
self.visit_branch_node_leave();
}
Node::AlternationPatternNode { parser, pointer, marker } => {
let concrete = AlternationPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_alternation_pattern_node(&concrete);
self.visit_branch_node_leave();
}
Node::AndNode { parser, pointer, marker } => {
let concrete = AndNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_and_node(&concrete);
self.visit_branch_node_leave();
}
Node::ArgumentsNode { parser, pointer, marker } => {
let concrete = ArgumentsNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_arguments_node(&concrete);
self.visit_branch_node_leave();
}
Node::ArrayNode { parser, pointer, marker } => {
let concrete = ArrayNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_array_node(&concrete);
self.visit_branch_node_leave();
}
Node::ArrayPatternNode { parser, pointer, marker } => {
let concrete = ArrayPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_array_pattern_node(&concrete);
self.visit_branch_node_leave();
}
Node::AssocNode { parser, pointer, marker } => {
let concrete = AssocNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_assoc_node(&concrete);
self.visit_branch_node_leave();
}
Node::AssocSplatNode { parser, pointer, marker } => {
let concrete = AssocSplatNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_assoc_splat_node(&concrete);
self.visit_branch_node_leave();
}
Node::BackReferenceReadNode { parser, pointer, marker } => {
let concrete = BackReferenceReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_back_reference_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::BeginNode { parser, pointer, marker } => {
let concrete = BeginNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_begin_node(&concrete);
self.visit_branch_node_leave();
}
Node::BlockArgumentNode { parser, pointer, marker } => {
let concrete = BlockArgumentNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_block_argument_node(&concrete);
self.visit_branch_node_leave();
}
Node::BlockLocalVariableNode { parser, pointer, marker } => {
let concrete = BlockLocalVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_block_local_variable_node(&concrete);
self.visit_leaf_node_leave();
}
Node::BlockNode { parser, pointer, marker } => {
let concrete = BlockNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_block_node(&concrete);
self.visit_branch_node_leave();
}
Node::BlockParameterNode { parser, pointer, marker } => {
let concrete = BlockParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_block_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::BlockParametersNode { parser, pointer, marker } => {
let concrete = BlockParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_block_parameters_node(&concrete);
self.visit_branch_node_leave();
}
Node::BreakNode { parser, pointer, marker } => {
let concrete = BreakNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_break_node(&concrete);
self.visit_branch_node_leave();
}
Node::CallAndWriteNode { parser, pointer, marker } => {
let concrete = CallAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_call_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::CallNode { parser, pointer, marker } => {
let concrete = CallNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_call_node(&concrete);
self.visit_branch_node_leave();
}
Node::CallOperatorWriteNode { parser, pointer, marker } => {
let concrete = CallOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_call_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::CallOrWriteNode { parser, pointer, marker } => {
let concrete = CallOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_call_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::CallTargetNode { parser, pointer, marker } => {
let concrete = CallTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_call_target_node(&concrete);
self.visit_branch_node_leave();
}
Node::CapturePatternNode { parser, pointer, marker } => {
let concrete = CapturePatternNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_capture_pattern_node(&concrete);
self.visit_branch_node_leave();
}
Node::CaseMatchNode { parser, pointer, marker } => {
let concrete = CaseMatchNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_case_match_node(&concrete);
self.visit_branch_node_leave();
}
Node::CaseNode { parser, pointer, marker } => {
let concrete = CaseNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_case_node(&concrete);
self.visit_branch_node_leave();
}
Node::ClassNode { parser, pointer, marker } => {
let concrete = ClassNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_class_node(&concrete);
self.visit_branch_node_leave();
}
Node::ClassVariableAndWriteNode { parser, pointer, marker } => {
let concrete = ClassVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_class_variable_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ClassVariableOperatorWriteNode { parser, pointer, marker } => {
let concrete = ClassVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_class_variable_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ClassVariableOrWriteNode { parser, pointer, marker } => {
let concrete = ClassVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_class_variable_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ClassVariableReadNode { parser, pointer, marker } => {
let concrete = ClassVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_class_variable_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ClassVariableTargetNode { parser, pointer, marker } => {
let concrete = ClassVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_class_variable_target_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ClassVariableWriteNode { parser, pointer, marker } => {
let concrete = ClassVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_class_variable_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantAndWriteNode { parser, pointer, marker } => {
let concrete = ConstantAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantOperatorWriteNode { parser, pointer, marker } => {
let concrete = ConstantOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantOrWriteNode { parser, pointer, marker } => {
let concrete = ConstantOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantPathAndWriteNode { parser, pointer, marker } => {
let concrete = ConstantPathAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_path_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantPathNode { parser, pointer, marker } => {
let concrete = ConstantPathNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_path_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantPathOperatorWriteNode { parser, pointer, marker } => {
let concrete = ConstantPathOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_path_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantPathOrWriteNode { parser, pointer, marker } => {
let concrete = ConstantPathOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_path_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantPathTargetNode { parser, pointer, marker } => {
let concrete = ConstantPathTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_path_target_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantPathWriteNode { parser, pointer, marker } => {
let concrete = ConstantPathWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_path_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::ConstantReadNode { parser, pointer, marker } => {
let concrete = ConstantReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_constant_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ConstantTargetNode { parser, pointer, marker } => {
let concrete = ConstantTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_constant_target_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ConstantWriteNode { parser, pointer, marker } => {
let concrete = ConstantWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_constant_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::DefNode { parser, pointer, marker } => {
let concrete = DefNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_def_node(&concrete);
self.visit_branch_node_leave();
}
Node::DefinedNode { parser, pointer, marker } => {
let concrete = DefinedNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_defined_node(&concrete);
self.visit_branch_node_leave();
}
Node::ElseNode { parser, pointer, marker } => {
let concrete = ElseNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_else_node(&concrete);
self.visit_branch_node_leave();
}
Node::EmbeddedStatementsNode { parser, pointer, marker } => {
let concrete = EmbeddedStatementsNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_embedded_statements_node(&concrete);
self.visit_branch_node_leave();
}
Node::EmbeddedVariableNode { parser, pointer, marker } => {
let concrete = EmbeddedVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_embedded_variable_node(&concrete);
self.visit_branch_node_leave();
}
Node::EnsureNode { parser, pointer, marker } => {
let concrete = EnsureNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_ensure_node(&concrete);
self.visit_branch_node_leave();
}
Node::FalseNode { parser, pointer, marker } => {
let concrete = FalseNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_false_node(&concrete);
self.visit_leaf_node_leave();
}
Node::FindPatternNode { parser, pointer, marker } => {
let concrete = FindPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_find_pattern_node(&concrete);
self.visit_branch_node_leave();
}
Node::FlipFlopNode { parser, pointer, marker } => {
let concrete = FlipFlopNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_flip_flop_node(&concrete);
self.visit_branch_node_leave();
}
Node::FloatNode { parser, pointer, marker } => {
let concrete = FloatNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_float_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ForNode { parser, pointer, marker } => {
let concrete = ForNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_for_node(&concrete);
self.visit_branch_node_leave();
}
Node::ForwardingArgumentsNode { parser, pointer, marker } => {
let concrete = ForwardingArgumentsNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_forwarding_arguments_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ForwardingParameterNode { parser, pointer, marker } => {
let concrete = ForwardingParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_forwarding_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ForwardingSuperNode { parser, pointer, marker } => {
let concrete = ForwardingSuperNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_forwarding_super_node(&concrete);
self.visit_branch_node_leave();
}
Node::GlobalVariableAndWriteNode { parser, pointer, marker } => {
let concrete = GlobalVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_global_variable_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::GlobalVariableOperatorWriteNode { parser, pointer, marker } => {
let concrete = GlobalVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_global_variable_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::GlobalVariableOrWriteNode { parser, pointer, marker } => {
let concrete = GlobalVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_global_variable_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::GlobalVariableReadNode { parser, pointer, marker } => {
let concrete = GlobalVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_global_variable_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::GlobalVariableTargetNode { parser, pointer, marker } => {
let concrete = GlobalVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_global_variable_target_node(&concrete);
self.visit_leaf_node_leave();
}
Node::GlobalVariableWriteNode { parser, pointer, marker } => {
let concrete = GlobalVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_global_variable_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::HashNode { parser, pointer, marker } => {
let concrete = HashNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_hash_node(&concrete);
self.visit_branch_node_leave();
}
Node::HashPatternNode { parser, pointer, marker } => {
let concrete = HashPatternNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_hash_pattern_node(&concrete);
self.visit_branch_node_leave();
}
Node::IfNode { parser, pointer, marker } => {
let concrete = IfNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_if_node(&concrete);
self.visit_branch_node_leave();
}
Node::ImaginaryNode { parser, pointer, marker } => {
let concrete = ImaginaryNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_imaginary_node(&concrete);
self.visit_branch_node_leave();
}
Node::ImplicitNode { parser, pointer, marker } => {
let concrete = ImplicitNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_implicit_node(&concrete);
self.visit_branch_node_leave();
}
Node::ImplicitRestNode { parser, pointer, marker } => {
let concrete = ImplicitRestNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_implicit_rest_node(&concrete);
self.visit_leaf_node_leave();
}
Node::InNode { parser, pointer, marker } => {
let concrete = InNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_in_node(&concrete);
self.visit_branch_node_leave();
}
Node::IndexAndWriteNode { parser, pointer, marker } => {
let concrete = IndexAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_index_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::IndexOperatorWriteNode { parser, pointer, marker } => {
let concrete = IndexOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_index_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::IndexOrWriteNode { parser, pointer, marker } => {
let concrete = IndexOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_index_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::IndexTargetNode { parser, pointer, marker } => {
let concrete = IndexTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_index_target_node(&concrete);
self.visit_branch_node_leave();
}
Node::InstanceVariableAndWriteNode { parser, pointer, marker } => {
let concrete = InstanceVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_instance_variable_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::InstanceVariableOperatorWriteNode { parser, pointer, marker } => {
let concrete = InstanceVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_instance_variable_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::InstanceVariableOrWriteNode { parser, pointer, marker } => {
let concrete = InstanceVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_instance_variable_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::InstanceVariableReadNode { parser, pointer, marker } => {
let concrete = InstanceVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_instance_variable_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::InstanceVariableTargetNode { parser, pointer, marker } => {
let concrete = InstanceVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_instance_variable_target_node(&concrete);
self.visit_leaf_node_leave();
}
Node::InstanceVariableWriteNode { parser, pointer, marker } => {
let concrete = InstanceVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_instance_variable_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::IntegerNode { parser, pointer, marker } => {
let concrete = IntegerNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_integer_node(&concrete);
self.visit_leaf_node_leave();
}
Node::InterpolatedMatchLastLineNode { parser, pointer, marker } => {
let concrete = InterpolatedMatchLastLineNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_interpolated_match_last_line_node(&concrete);
self.visit_branch_node_leave();
}
Node::InterpolatedRegularExpressionNode { parser, pointer, marker } => {
let concrete = InterpolatedRegularExpressionNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_interpolated_regular_expression_node(&concrete);
self.visit_branch_node_leave();
}
Node::InterpolatedStringNode { parser, pointer, marker } => {
let concrete = InterpolatedStringNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_interpolated_string_node(&concrete);
self.visit_branch_node_leave();
}
Node::InterpolatedSymbolNode { parser, pointer, marker } => {
let concrete = InterpolatedSymbolNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_interpolated_symbol_node(&concrete);
self.visit_branch_node_leave();
}
Node::InterpolatedXStringNode { parser, pointer, marker } => {
let concrete = InterpolatedXStringNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_interpolated_x_string_node(&concrete);
self.visit_branch_node_leave();
}
Node::ItLocalVariableReadNode { parser, pointer, marker } => {
let concrete = ItLocalVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_it_local_variable_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ItParametersNode { parser, pointer, marker } => {
let concrete = ItParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_it_parameters_node(&concrete);
self.visit_leaf_node_leave();
}
Node::KeywordHashNode { parser, pointer, marker } => {
let concrete = KeywordHashNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_keyword_hash_node(&concrete);
self.visit_branch_node_leave();
}
Node::KeywordRestParameterNode { parser, pointer, marker } => {
let concrete = KeywordRestParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_keyword_rest_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::LambdaNode { parser, pointer, marker } => {
let concrete = LambdaNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_lambda_node(&concrete);
self.visit_branch_node_leave();
}
Node::LocalVariableAndWriteNode { parser, pointer, marker } => {
let concrete = LocalVariableAndWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_local_variable_and_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::LocalVariableOperatorWriteNode { parser, pointer, marker } => {
let concrete = LocalVariableOperatorWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_local_variable_operator_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::LocalVariableOrWriteNode { parser, pointer, marker } => {
let concrete = LocalVariableOrWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_local_variable_or_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::LocalVariableReadNode { parser, pointer, marker } => {
let concrete = LocalVariableReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_local_variable_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::LocalVariableTargetNode { parser, pointer, marker } => {
let concrete = LocalVariableTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_local_variable_target_node(&concrete);
self.visit_leaf_node_leave();
}
Node::LocalVariableWriteNode { parser, pointer, marker } => {
let concrete = LocalVariableWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_local_variable_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::MatchLastLineNode { parser, pointer, marker } => {
let concrete = MatchLastLineNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_match_last_line_node(&concrete);
self.visit_leaf_node_leave();
}
Node::MatchPredicateNode { parser, pointer, marker } => {
let concrete = MatchPredicateNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_match_predicate_node(&concrete);
self.visit_branch_node_leave();
}
Node::MatchRequiredNode { parser, pointer, marker } => {
let concrete = MatchRequiredNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_match_required_node(&concrete);
self.visit_branch_node_leave();
}
Node::MatchWriteNode { parser, pointer, marker } => {
let concrete = MatchWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_match_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::MissingNode { parser, pointer, marker } => {
let concrete = MissingNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_missing_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ModuleNode { parser, pointer, marker } => {
let concrete = ModuleNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_module_node(&concrete);
self.visit_branch_node_leave();
}
Node::MultiTargetNode { parser, pointer, marker } => {
let concrete = MultiTargetNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_multi_target_node(&concrete);
self.visit_branch_node_leave();
}
Node::MultiWriteNode { parser, pointer, marker } => {
let concrete = MultiWriteNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_multi_write_node(&concrete);
self.visit_branch_node_leave();
}
Node::NextNode { parser, pointer, marker } => {
let concrete = NextNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_next_node(&concrete);
self.visit_branch_node_leave();
}
Node::NilNode { parser, pointer, marker } => {
let concrete = NilNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_nil_node(&concrete);
self.visit_leaf_node_leave();
}
Node::NoKeywordsParameterNode { parser, pointer, marker } => {
let concrete = NoKeywordsParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_no_keywords_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::NumberedParametersNode { parser, pointer, marker } => {
let concrete = NumberedParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_numbered_parameters_node(&concrete);
self.visit_leaf_node_leave();
}
Node::NumberedReferenceReadNode { parser, pointer, marker } => {
let concrete = NumberedReferenceReadNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_numbered_reference_read_node(&concrete);
self.visit_leaf_node_leave();
}
Node::OptionalKeywordParameterNode { parser, pointer, marker } => {
let concrete = OptionalKeywordParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_optional_keyword_parameter_node(&concrete);
self.visit_branch_node_leave();
}
Node::OptionalParameterNode { parser, pointer, marker } => {
let concrete = OptionalParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_optional_parameter_node(&concrete);
self.visit_branch_node_leave();
}
Node::OrNode { parser, pointer, marker } => {
let concrete = OrNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_or_node(&concrete);
self.visit_branch_node_leave();
}
Node::ParametersNode { parser, pointer, marker } => {
let concrete = ParametersNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_parameters_node(&concrete);
self.visit_branch_node_leave();
}
Node::ParenthesesNode { parser, pointer, marker } => {
let concrete = ParenthesesNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_parentheses_node(&concrete);
self.visit_branch_node_leave();
}
Node::PinnedExpressionNode { parser, pointer, marker } => {
let concrete = PinnedExpressionNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_pinned_expression_node(&concrete);
self.visit_branch_node_leave();
}
Node::PinnedVariableNode { parser, pointer, marker } => {
let concrete = PinnedVariableNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_pinned_variable_node(&concrete);
self.visit_branch_node_leave();
}
Node::PostExecutionNode { parser, pointer, marker } => {
let concrete = PostExecutionNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_post_execution_node(&concrete);
self.visit_branch_node_leave();
}
Node::PreExecutionNode { parser, pointer, marker } => {
let concrete = PreExecutionNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_pre_execution_node(&concrete);
self.visit_branch_node_leave();
}
Node::ProgramNode { parser, pointer, marker } => {
let concrete = ProgramNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_program_node(&concrete);
self.visit_branch_node_leave();
}
Node::RangeNode { parser, pointer, marker } => {
let concrete = RangeNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_range_node(&concrete);
self.visit_branch_node_leave();
}
Node::RationalNode { parser, pointer, marker } => {
let concrete = RationalNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_rational_node(&concrete);
self.visit_leaf_node_leave();
}
Node::RedoNode { parser, pointer, marker } => {
let concrete = RedoNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_redo_node(&concrete);
self.visit_leaf_node_leave();
}
Node::RegularExpressionNode { parser, pointer, marker } => {
let concrete = RegularExpressionNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_regular_expression_node(&concrete);
self.visit_leaf_node_leave();
}
Node::RequiredKeywordParameterNode { parser, pointer, marker } => {
let concrete = RequiredKeywordParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_required_keyword_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::RequiredParameterNode { parser, pointer, marker } => {
let concrete = RequiredParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_required_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::RescueModifierNode { parser, pointer, marker } => {
let concrete = RescueModifierNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_rescue_modifier_node(&concrete);
self.visit_branch_node_leave();
}
Node::RescueNode { parser, pointer, marker } => {
let concrete = RescueNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_rescue_node(&concrete);
self.visit_branch_node_leave();
}
Node::RestParameterNode { parser, pointer, marker } => {
let concrete = RestParameterNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_rest_parameter_node(&concrete);
self.visit_leaf_node_leave();
}
Node::RetryNode { parser, pointer, marker } => {
let concrete = RetryNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_retry_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ReturnNode { parser, pointer, marker } => {
let concrete = ReturnNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_return_node(&concrete);
self.visit_branch_node_leave();
}
Node::SelfNode { parser, pointer, marker } => {
let concrete = SelfNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_self_node(&concrete);
self.visit_leaf_node_leave();
}
Node::ShareableConstantNode { parser, pointer, marker } => {
let concrete = ShareableConstantNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_shareable_constant_node(&concrete);
self.visit_branch_node_leave();
}
Node::SingletonClassNode { parser, pointer, marker } => {
let concrete = SingletonClassNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_singleton_class_node(&concrete);
self.visit_branch_node_leave();
}
Node::SourceEncodingNode { parser, pointer, marker } => {
let concrete = SourceEncodingNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_source_encoding_node(&concrete);
self.visit_leaf_node_leave();
}
Node::SourceFileNode { parser, pointer, marker } => {
let concrete = SourceFileNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_source_file_node(&concrete);
self.visit_leaf_node_leave();
}
Node::SourceLineNode { parser, pointer, marker } => {
let concrete = SourceLineNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_source_line_node(&concrete);
self.visit_leaf_node_leave();
}
Node::SplatNode { parser, pointer, marker } => {
let concrete = SplatNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_splat_node(&concrete);
self.visit_branch_node_leave();
}
Node::StatementsNode { parser, pointer, marker } => {
let concrete = StatementsNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_statements_node(&concrete);
self.visit_branch_node_leave();
}
Node::StringNode { parser, pointer, marker } => {
let concrete = StringNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_string_node(&concrete);
self.visit_leaf_node_leave();
}
Node::SuperNode { parser, pointer, marker } => {
let concrete = SuperNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_super_node(&concrete);
self.visit_branch_node_leave();
}
Node::SymbolNode { parser, pointer, marker } => {
let concrete = SymbolNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_symbol_node(&concrete);
self.visit_leaf_node_leave();
}
Node::TrueNode { parser, pointer, marker } => {
let concrete = TrueNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_true_node(&concrete);
self.visit_leaf_node_leave();
}
Node::UndefNode { parser, pointer, marker } => {
let concrete = UndefNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_undef_node(&concrete);
self.visit_branch_node_leave();
}
Node::UnlessNode { parser, pointer, marker } => {
let concrete = UnlessNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_unless_node(&concrete);
self.visit_branch_node_leave();
}
Node::UntilNode { parser, pointer, marker } => {
let concrete = UntilNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_until_node(&concrete);
self.visit_branch_node_leave();
}
Node::WhenNode { parser, pointer, marker } => {
let concrete = WhenNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_when_node(&concrete);
self.visit_branch_node_leave();
}
Node::WhileNode { parser, pointer, marker } => {
let concrete = WhileNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_while_node(&concrete);
self.visit_branch_node_leave();
}
Node::XStringNode { parser, pointer, marker } => {
let concrete = XStringNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_leaf_node_enter(concrete.as_node());
self.visit_x_string_node(&concrete);
self.visit_leaf_node_leave();
}
Node::YieldNode { parser, pointer, marker } => {
let concrete = YieldNode { parser: *parser, pointer: *pointer, marker: *marker };
self.visit_branch_node_enter(concrete.as_node());
self.visit_yield_node(&concrete);
self.visit_branch_node_leave();
}
}
}
fn visit_alias_global_variable_node(&mut self, node: &AliasGlobalVariableNode<'pr>) {
visit_alias_global_variable_node(self, node);
}
fn visit_alias_method_node(&mut self, node: &AliasMethodNode<'pr>) {
visit_alias_method_node(self, node);
}
fn visit_alternation_pattern_node(&mut self, node: &AlternationPatternNode<'pr>) {
visit_alternation_pattern_node(self, node);
}
fn visit_and_node(&mut self, node: &AndNode<'pr>) {
visit_and_node(self, node);
}
fn visit_arguments_node(&mut self, node: &ArgumentsNode<'pr>) {
visit_arguments_node(self, node);
}
fn visit_array_node(&mut self, node: &ArrayNode<'pr>) {
visit_array_node(self, node);
}
fn visit_array_pattern_node(&mut self, node: &ArrayPatternNode<'pr>) {
visit_array_pattern_node(self, node);
}
fn visit_assoc_node(&mut self, node: &AssocNode<'pr>) {
visit_assoc_node(self, node);
}
fn visit_assoc_splat_node(&mut self, node: &AssocSplatNode<'pr>) {
visit_assoc_splat_node(self, node);
}
fn visit_back_reference_read_node(&mut self, node: &BackReferenceReadNode<'pr>) {
visit_back_reference_read_node(self, node);
}
fn visit_begin_node(&mut self, node: &BeginNode<'pr>) {
visit_begin_node(self, node);
}
fn visit_block_argument_node(&mut self, node: &BlockArgumentNode<'pr>) {
visit_block_argument_node(self, node);
}
fn visit_block_local_variable_node(&mut self, node: &BlockLocalVariableNode<'pr>) {
visit_block_local_variable_node(self, node);
}
fn visit_block_node(&mut self, node: &BlockNode<'pr>) {
visit_block_node(self, node);
}
fn visit_block_parameter_node(&mut self, node: &BlockParameterNode<'pr>) {
visit_block_parameter_node(self, node);
}
fn visit_block_parameters_node(&mut self, node: &BlockParametersNode<'pr>) {
visit_block_parameters_node(self, node);
}
fn visit_break_node(&mut self, node: &BreakNode<'pr>) {
visit_break_node(self, node);
}
fn visit_call_and_write_node(&mut self, node: &CallAndWriteNode<'pr>) {
visit_call_and_write_node(self, node);
}
fn visit_call_node(&mut self, node: &CallNode<'pr>) {
visit_call_node(self, node);
}
fn visit_call_operator_write_node(&mut self, node: &CallOperatorWriteNode<'pr>) {
visit_call_operator_write_node(self, node);
}
fn visit_call_or_write_node(&mut self, node: &CallOrWriteNode<'pr>) {
visit_call_or_write_node(self, node);
}
fn visit_call_target_node(&mut self, node: &CallTargetNode<'pr>) {
visit_call_target_node(self, node);
}
fn visit_capture_pattern_node(&mut self, node: &CapturePatternNode<'pr>) {
visit_capture_pattern_node(self, node);
}
fn visit_case_match_node(&mut self, node: &CaseMatchNode<'pr>) {
visit_case_match_node(self, node);
}
fn visit_case_node(&mut self, node: &CaseNode<'pr>) {
visit_case_node(self, node);
}
fn visit_class_node(&mut self, node: &ClassNode<'pr>) {
visit_class_node(self, node);
}
fn visit_class_variable_and_write_node(&mut self, node: &ClassVariableAndWriteNode<'pr>) {
visit_class_variable_and_write_node(self, node);
}
fn visit_class_variable_operator_write_node(&mut self, node: &ClassVariableOperatorWriteNode<'pr>) {
visit_class_variable_operator_write_node(self, node);
}
fn visit_class_variable_or_write_node(&mut self, node: &ClassVariableOrWriteNode<'pr>) {
visit_class_variable_or_write_node(self, node);
}
fn visit_class_variable_read_node(&mut self, node: &ClassVariableReadNode<'pr>) {
visit_class_variable_read_node(self, node);
}
fn visit_class_variable_target_node(&mut self, node: &ClassVariableTargetNode<'pr>) {
visit_class_variable_target_node(self, node);
}
fn visit_class_variable_write_node(&mut self, node: &ClassVariableWriteNode<'pr>) {
visit_class_variable_write_node(self, node);
}
fn visit_constant_and_write_node(&mut self, node: &ConstantAndWriteNode<'pr>) {
visit_constant_and_write_node(self, node);
}
fn visit_constant_operator_write_node(&mut self, node: &ConstantOperatorWriteNode<'pr>) {
visit_constant_operator_write_node(self, node);
}
fn visit_constant_or_write_node(&mut self, node: &ConstantOrWriteNode<'pr>) {
visit_constant_or_write_node(self, node);
}
fn visit_constant_path_and_write_node(&mut self, node: &ConstantPathAndWriteNode<'pr>) {
visit_constant_path_and_write_node(self, node);
}
fn visit_constant_path_node(&mut self, node: &ConstantPathNode<'pr>) {
visit_constant_path_node(self, node);
}
fn visit_constant_path_operator_write_node(&mut self, node: &ConstantPathOperatorWriteNode<'pr>) {
visit_constant_path_operator_write_node(self, node);
}
fn visit_constant_path_or_write_node(&mut self, node: &ConstantPathOrWriteNode<'pr>) {
visit_constant_path_or_write_node(self, node);
}
fn visit_constant_path_target_node(&mut self, node: &ConstantPathTargetNode<'pr>) {
visit_constant_path_target_node(self, node);
}
fn visit_constant_path_write_node(&mut self, node: &ConstantPathWriteNode<'pr>) {
visit_constant_path_write_node(self, node);
}
fn visit_constant_read_node(&mut self, node: &ConstantReadNode<'pr>) {
visit_constant_read_node(self, node);
}
fn visit_constant_target_node(&mut self, node: &ConstantTargetNode<'pr>) {
visit_constant_target_node(self, node);
}
fn visit_constant_write_node(&mut self, node: &ConstantWriteNode<'pr>) {
visit_constant_write_node(self, node);
}
fn visit_def_node(&mut self, node: &DefNode<'pr>) {
visit_def_node(self, node);
}
fn visit_defined_node(&mut self, node: &DefinedNode<'pr>) {
visit_defined_node(self, node);
}
fn visit_else_node(&mut self, node: &ElseNode<'pr>) {
visit_else_node(self, node);
}
fn visit_embedded_statements_node(&mut self, node: &EmbeddedStatementsNode<'pr>) {
visit_embedded_statements_node(self, node);
}
fn visit_embedded_variable_node(&mut self, node: &EmbeddedVariableNode<'pr>) {
visit_embedded_variable_node(self, node);
}
fn visit_ensure_node(&mut self, node: &EnsureNode<'pr>) {
visit_ensure_node(self, node);
}
fn visit_false_node(&mut self, node: &FalseNode<'pr>) {
visit_false_node(self, node);
}
fn visit_find_pattern_node(&mut self, node: &FindPatternNode<'pr>) {
visit_find_pattern_node(self, node);
}
fn visit_flip_flop_node(&mut self, node: &FlipFlopNode<'pr>) {
visit_flip_flop_node(self, node);
}
fn visit_float_node(&mut self, node: &FloatNode<'pr>) {
visit_float_node(self, node);
}
fn visit_for_node(&mut self, node: &ForNode<'pr>) {
visit_for_node(self, node);
}
fn visit_forwarding_arguments_node(&mut self, node: &ForwardingArgumentsNode<'pr>) {
visit_forwarding_arguments_node(self, node);
}
fn visit_forwarding_parameter_node(&mut self, node: &ForwardingParameterNode<'pr>) {
visit_forwarding_parameter_node(self, node);
}
fn visit_forwarding_super_node(&mut self, node: &ForwardingSuperNode<'pr>) {
visit_forwarding_super_node(self, node);
}
fn visit_global_variable_and_write_node(&mut self, node: &GlobalVariableAndWriteNode<'pr>) {
visit_global_variable_and_write_node(self, node);
}
fn visit_global_variable_operator_write_node(&mut self, node: &GlobalVariableOperatorWriteNode<'pr>) {
visit_global_variable_operator_write_node(self, node);
}
fn visit_global_variable_or_write_node(&mut self, node: &GlobalVariableOrWriteNode<'pr>) {
visit_global_variable_or_write_node(self, node);
}
fn visit_global_variable_read_node(&mut self, node: &GlobalVariableReadNode<'pr>) {
visit_global_variable_read_node(self, node);
}
fn visit_global_variable_target_node(&mut self, node: &GlobalVariableTargetNode<'pr>) {
visit_global_variable_target_node(self, node);
}
fn visit_global_variable_write_node(&mut self, node: &GlobalVariableWriteNode<'pr>) {
visit_global_variable_write_node(self, node);
}
fn visit_hash_node(&mut self, node: &HashNode<'pr>) {
visit_hash_node(self, node);
}
fn visit_hash_pattern_node(&mut self, node: &HashPatternNode<'pr>) {
visit_hash_pattern_node(self, node);
}
fn visit_if_node(&mut self, node: &IfNode<'pr>) {
visit_if_node(self, node);
}
fn visit_imaginary_node(&mut self, node: &ImaginaryNode<'pr>) {
visit_imaginary_node(self, node);
}
fn visit_implicit_node(&mut self, node: &ImplicitNode<'pr>) {
visit_implicit_node(self, node);
}
fn visit_implicit_rest_node(&mut self, node: &ImplicitRestNode<'pr>) {
visit_implicit_rest_node(self, node);
}
fn visit_in_node(&mut self, node: &InNode<'pr>) {
visit_in_node(self, node);
}
fn visit_index_and_write_node(&mut self, node: &IndexAndWriteNode<'pr>) {
visit_index_and_write_node(self, node);
}
fn visit_index_operator_write_node(&mut self, node: &IndexOperatorWriteNode<'pr>) {
visit_index_operator_write_node(self, node);
}
fn visit_index_or_write_node(&mut self, node: &IndexOrWriteNode<'pr>) {
visit_index_or_write_node(self, node);
}
fn visit_index_target_node(&mut self, node: &IndexTargetNode<'pr>) {
visit_index_target_node(self, node);
}
fn visit_instance_variable_and_write_node(&mut self, node: &InstanceVariableAndWriteNode<'pr>) {
visit_instance_variable_and_write_node(self, node);
}
fn visit_instance_variable_operator_write_node(&mut self, node: &InstanceVariableOperatorWriteNode<'pr>) {
visit_instance_variable_operator_write_node(self, node);
}
fn visit_instance_variable_or_write_node(&mut self, node: &InstanceVariableOrWriteNode<'pr>) {
visit_instance_variable_or_write_node(self, node);
}
fn visit_instance_variable_read_node(&mut self, node: &InstanceVariableReadNode<'pr>) {
visit_instance_variable_read_node(self, node);
}
fn visit_instance_variable_target_node(&mut self, node: &InstanceVariableTargetNode<'pr>) {
visit_instance_variable_target_node(self, node);
}
fn visit_instance_variable_write_node(&mut self, node: &InstanceVariableWriteNode<'pr>) {
visit_instance_variable_write_node(self, node);
}
fn visit_integer_node(&mut self, node: &IntegerNode<'pr>) {
visit_integer_node(self, node);
}
fn visit_interpolated_match_last_line_node(&mut self, node: &InterpolatedMatchLastLineNode<'pr>) {
visit_interpolated_match_last_line_node(self, node);
}
fn visit_interpolated_regular_expression_node(&mut self, node: &InterpolatedRegularExpressionNode<'pr>) {
visit_interpolated_regular_expression_node(self, node);
}
fn visit_interpolated_string_node(&mut self, node: &InterpolatedStringNode<'pr>) {
visit_interpolated_string_node(self, node);
}
fn visit_interpolated_symbol_node(&mut self, node: &InterpolatedSymbolNode<'pr>) {
visit_interpolated_symbol_node(self, node);
}
fn visit_interpolated_x_string_node(&mut self, node: &InterpolatedXStringNode<'pr>) {
visit_interpolated_x_string_node(self, node);
}
fn visit_it_local_variable_read_node(&mut self, node: &ItLocalVariableReadNode<'pr>) {
visit_it_local_variable_read_node(self, node);
}
fn visit_it_parameters_node(&mut self, node: &ItParametersNode<'pr>) {
visit_it_parameters_node(self, node);
}
fn visit_keyword_hash_node(&mut self, node: &KeywordHashNode<'pr>) {
visit_keyword_hash_node(self, node);
}
fn visit_keyword_rest_parameter_node(&mut self, node: &KeywordRestParameterNode<'pr>) {
visit_keyword_rest_parameter_node(self, node);
}
fn visit_lambda_node(&mut self, node: &LambdaNode<'pr>) {
visit_lambda_node(self, node);
}
fn visit_local_variable_and_write_node(&mut self, node: &LocalVariableAndWriteNode<'pr>) {
visit_local_variable_and_write_node(self, node);
}
fn visit_local_variable_operator_write_node(&mut self, node: &LocalVariableOperatorWriteNode<'pr>) {
visit_local_variable_operator_write_node(self, node);
}
fn visit_local_variable_or_write_node(&mut self, node: &LocalVariableOrWriteNode<'pr>) {
visit_local_variable_or_write_node(self, node);
}
fn visit_local_variable_read_node(&mut self, node: &LocalVariableReadNode<'pr>) {
visit_local_variable_read_node(self, node);
}
fn visit_local_variable_target_node(&mut self, node: &LocalVariableTargetNode<'pr>) {
visit_local_variable_target_node(self, node);
}
fn visit_local_variable_write_node(&mut self, node: &LocalVariableWriteNode<'pr>) {
visit_local_variable_write_node(self, node);
}
fn visit_match_last_line_node(&mut self, node: &MatchLastLineNode<'pr>) {
visit_match_last_line_node(self, node);
}
fn visit_match_predicate_node(&mut self, node: &MatchPredicateNode<'pr>) {
visit_match_predicate_node(self, node);
}
fn visit_match_required_node(&mut self, node: &MatchRequiredNode<'pr>) {
visit_match_required_node(self, node);
}
fn visit_match_write_node(&mut self, node: &MatchWriteNode<'pr>) {
visit_match_write_node(self, node);
}
fn visit_missing_node(&mut self, node: &MissingNode<'pr>) {
visit_missing_node(self, node);
}
fn visit_module_node(&mut self, node: &ModuleNode<'pr>) {
visit_module_node(self, node);
}
fn visit_multi_target_node(&mut self, node: &MultiTargetNode<'pr>) {
visit_multi_target_node(self, node);
}
fn visit_multi_write_node(&mut self, node: &MultiWriteNode<'pr>) {
visit_multi_write_node(self, node);
}
fn visit_next_node(&mut self, node: &NextNode<'pr>) {
visit_next_node(self, node);
}
fn visit_nil_node(&mut self, node: &NilNode<'pr>) {
visit_nil_node(self, node);
}
fn visit_no_keywords_parameter_node(&mut self, node: &NoKeywordsParameterNode<'pr>) {
visit_no_keywords_parameter_node(self, node);
}
fn visit_numbered_parameters_node(&mut self, node: &NumberedParametersNode<'pr>) {
visit_numbered_parameters_node(self, node);
}
fn visit_numbered_reference_read_node(&mut self, node: &NumberedReferenceReadNode<'pr>) {
visit_numbered_reference_read_node(self, node);
}
fn visit_optional_keyword_parameter_node(&mut self, node: &OptionalKeywordParameterNode<'pr>) {
visit_optional_keyword_parameter_node(self, node);
}
fn visit_optional_parameter_node(&mut self, node: &OptionalParameterNode<'pr>) {
visit_optional_parameter_node(self, node);
}
fn visit_or_node(&mut self, node: &OrNode<'pr>) {
visit_or_node(self, node);
}
fn visit_parameters_node(&mut self, node: &ParametersNode<'pr>) {
visit_parameters_node(self, node);
}
fn visit_parentheses_node(&mut self, node: &ParenthesesNode<'pr>) {
visit_parentheses_node(self, node);
}
fn visit_pinned_expression_node(&mut self, node: &PinnedExpressionNode<'pr>) {
visit_pinned_expression_node(self, node);
}
fn visit_pinned_variable_node(&mut self, node: &PinnedVariableNode<'pr>) {
visit_pinned_variable_node(self, node);
}
fn visit_post_execution_node(&mut self, node: &PostExecutionNode<'pr>) {
visit_post_execution_node(self, node);
}
fn visit_pre_execution_node(&mut self, node: &PreExecutionNode<'pr>) {
visit_pre_execution_node(self, node);
}
fn visit_program_node(&mut self, node: &ProgramNode<'pr>) {
visit_program_node(self, node);
}
fn visit_range_node(&mut self, node: &RangeNode<'pr>) {
visit_range_node(self, node);
}
fn visit_rational_node(&mut self, node: &RationalNode<'pr>) {
visit_rational_node(self, node);
}
fn visit_redo_node(&mut self, node: &RedoNode<'pr>) {
visit_redo_node(self, node);
}
fn visit_regular_expression_node(&mut self, node: &RegularExpressionNode<'pr>) {
visit_regular_expression_node(self, node);
}
fn visit_required_keyword_parameter_node(&mut self, node: &RequiredKeywordParameterNode<'pr>) {
visit_required_keyword_parameter_node(self, node);
}
fn visit_required_parameter_node(&mut self, node: &RequiredParameterNode<'pr>) {
visit_required_parameter_node(self, node);
}
fn visit_rescue_modifier_node(&mut self, node: &RescueModifierNode<'pr>) {
visit_rescue_modifier_node(self, node);
}
fn visit_rescue_node(&mut self, node: &RescueNode<'pr>) {
visit_rescue_node(self, node);
}
fn visit_rest_parameter_node(&mut self, node: &RestParameterNode<'pr>) {
visit_rest_parameter_node(self, node);
}
fn visit_retry_node(&mut self, node: &RetryNode<'pr>) {
visit_retry_node(self, node);
}
fn visit_return_node(&mut self, node: &ReturnNode<'pr>) {
visit_return_node(self, node);
}
fn visit_self_node(&mut self, node: &SelfNode<'pr>) {
visit_self_node(self, node);
}
fn visit_shareable_constant_node(&mut self, node: &ShareableConstantNode<'pr>) {
visit_shareable_constant_node(self, node);
}
fn visit_singleton_class_node(&mut self, node: &SingletonClassNode<'pr>) {
visit_singleton_class_node(self, node);
}
fn visit_source_encoding_node(&mut self, node: &SourceEncodingNode<'pr>) {
visit_source_encoding_node(self, node);
}
fn visit_source_file_node(&mut self, node: &SourceFileNode<'pr>) {
visit_source_file_node(self, node);
}
fn visit_source_line_node(&mut self, node: &SourceLineNode<'pr>) {
visit_source_line_node(self, node);
}
fn visit_splat_node(&mut self, node: &SplatNode<'pr>) {
visit_splat_node(self, node);
}
fn visit_statements_node(&mut self, node: &StatementsNode<'pr>) {
visit_statements_node(self, node);
}
fn visit_string_node(&mut self, node: &StringNode<'pr>) {
visit_string_node(self, node);
}
fn visit_super_node(&mut self, node: &SuperNode<'pr>) {
visit_super_node(self, node);
}
fn visit_symbol_node(&mut self, node: &SymbolNode<'pr>) {
visit_symbol_node(self, node);
}
fn visit_true_node(&mut self, node: &TrueNode<'pr>) {
visit_true_node(self, node);
}
fn visit_undef_node(&mut self, node: &UndefNode<'pr>) {
visit_undef_node(self, node);
}
fn visit_unless_node(&mut self, node: &UnlessNode<'pr>) {
visit_unless_node(self, node);
}
fn visit_until_node(&mut self, node: &UntilNode<'pr>) {
visit_until_node(self, node);
}
fn visit_when_node(&mut self, node: &WhenNode<'pr>) {
visit_when_node(self, node);
}
fn visit_while_node(&mut self, node: &WhileNode<'pr>) {
visit_while_node(self, node);
}
fn visit_x_string_node(&mut self, node: &XStringNode<'pr>) {
visit_x_string_node(self, node);
}
fn visit_yield_node(&mut self, node: &YieldNode<'pr>) {
visit_yield_node(self, node);
}
}
pub fn visit_alias_global_variable_node<'pr, V>(visitor: &mut V, node: &AliasGlobalVariableNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.new_name());
visitor.visit(&node.old_name());
}
pub fn visit_alias_method_node<'pr, V>(visitor: &mut V, node: &AliasMethodNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.new_name());
visitor.visit(&node.old_name());
}
pub fn visit_alternation_pattern_node<'pr, V>(visitor: &mut V, node: &AlternationPatternNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.left());
visitor.visit(&node.right());
}
pub fn visit_and_node<'pr, V>(visitor: &mut V, node: &AndNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.left());
visitor.visit(&node.right());
}
pub fn visit_arguments_node<'pr, V>(visitor: &mut V, node: &ArgumentsNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.arguments().iter() {
visitor.visit(&node);
}
}
pub fn visit_array_node<'pr, V>(visitor: &mut V, node: &ArrayNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.elements().iter() {
visitor.visit(&node);
}
}
pub fn visit_array_pattern_node<'pr, V>(visitor: &mut V, node: &ArrayPatternNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.constant() {
visitor.visit(&node);
}
for node in node.requireds().iter() {
visitor.visit(&node);
}
if let Some(node) = node.rest() {
visitor.visit(&node);
}
for node in node.posts().iter() {
visitor.visit(&node);
}
}
pub fn visit_assoc_node<'pr, V>(visitor: &mut V, node: &AssocNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.key());
visitor.visit(&node.value());
}
pub fn visit_assoc_splat_node<'pr, V>(visitor: &mut V, node: &AssocSplatNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.value() {
visitor.visit(&node);
}
}
pub fn visit_back_reference_read_node<'pr, V>(_visitor: &mut V, _node: &BackReferenceReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_begin_node<'pr, V>(visitor: &mut V, node: &BeginNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
if let Some(node) = node.rescue_clause() {
visitor.visit_rescue_node(&node);
}
if let Some(node) = node.else_clause() {
visitor.visit_else_node(&node);
}
if let Some(node) = node.ensure_clause() {
visitor.visit_ensure_node(&node);
}
}
pub fn visit_block_argument_node<'pr, V>(visitor: &mut V, node: &BlockArgumentNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.expression() {
visitor.visit(&node);
}
}
pub fn visit_block_local_variable_node<'pr, V>(_visitor: &mut V, _node: &BlockLocalVariableNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_block_node<'pr, V>(visitor: &mut V, node: &BlockNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.parameters() {
visitor.visit(&node);
}
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_block_parameter_node<'pr, V>(_visitor: &mut V, _node: &BlockParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_block_parameters_node<'pr, V>(visitor: &mut V, node: &BlockParametersNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.parameters() {
visitor.visit_parameters_node(&node);
}
for node in node.locals().iter() {
visitor.visit(&node);
}
}
pub fn visit_break_node<'pr, V>(visitor: &mut V, node: &BreakNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
}
pub fn visit_call_and_write_node<'pr, V>(visitor: &mut V, node: &CallAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
visitor.visit(&node.value());
}
pub fn visit_call_node<'pr, V>(visitor: &mut V, node: &CallNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
if let Some(node) = node.block() {
visitor.visit(&node);
}
}
pub fn visit_call_operator_write_node<'pr, V>(visitor: &mut V, node: &CallOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
visitor.visit(&node.value());
}
pub fn visit_call_or_write_node<'pr, V>(visitor: &mut V, node: &CallOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
visitor.visit(&node.value());
}
pub fn visit_call_target_node<'pr, V>(visitor: &mut V, node: &CallTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.receiver());
}
pub fn visit_capture_pattern_node<'pr, V>(visitor: &mut V, node: &CapturePatternNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
visitor.visit_local_variable_target_node(&node.target());
}
pub fn visit_case_match_node<'pr, V>(visitor: &mut V, node: &CaseMatchNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.predicate() {
visitor.visit(&node);
}
for node in node.conditions().iter() {
visitor.visit(&node);
}
if let Some(node) = node.else_clause() {
visitor.visit_else_node(&node);
}
}
pub fn visit_case_node<'pr, V>(visitor: &mut V, node: &CaseNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.predicate() {
visitor.visit(&node);
}
for node in node.conditions().iter() {
visitor.visit(&node);
}
if let Some(node) = node.else_clause() {
visitor.visit_else_node(&node);
}
}
pub fn visit_class_node<'pr, V>(visitor: &mut V, node: &ClassNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.constant_path());
if let Some(node) = node.superclass() {
visitor.visit(&node);
}
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_class_variable_and_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_class_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_class_variable_or_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_class_variable_read_node<'pr, V>(_visitor: &mut V, _node: &ClassVariableReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_class_variable_target_node<'pr, V>(_visitor: &mut V, _node: &ClassVariableTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_class_variable_write_node<'pr, V>(visitor: &mut V, node: &ClassVariableWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_constant_and_write_node<'pr, V>(visitor: &mut V, node: &ConstantAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_constant_operator_write_node<'pr, V>(visitor: &mut V, node: &ConstantOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_constant_or_write_node<'pr, V>(visitor: &mut V, node: &ConstantOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_constant_path_and_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit_constant_path_node(&node.target());
visitor.visit(&node.value());
}
pub fn visit_constant_path_node<'pr, V>(visitor: &mut V, node: &ConstantPathNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.parent() {
visitor.visit(&node);
}
}
pub fn visit_constant_path_operator_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit_constant_path_node(&node.target());
visitor.visit(&node.value());
}
pub fn visit_constant_path_or_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit_constant_path_node(&node.target());
visitor.visit(&node.value());
}
pub fn visit_constant_path_target_node<'pr, V>(visitor: &mut V, node: &ConstantPathTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.parent() {
visitor.visit(&node);
}
}
pub fn visit_constant_path_write_node<'pr, V>(visitor: &mut V, node: &ConstantPathWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit_constant_path_node(&node.target());
visitor.visit(&node.value());
}
pub fn visit_constant_read_node<'pr, V>(_visitor: &mut V, _node: &ConstantReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_constant_target_node<'pr, V>(_visitor: &mut V, _node: &ConstantTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_constant_write_node<'pr, V>(visitor: &mut V, node: &ConstantWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_def_node<'pr, V>(visitor: &mut V, node: &DefNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
if let Some(node) = node.parameters() {
visitor.visit_parameters_node(&node);
}
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_defined_node<'pr, V>(visitor: &mut V, node: &DefinedNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_else_node<'pr, V>(visitor: &mut V, node: &ElseNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_embedded_statements_node<'pr, V>(visitor: &mut V, node: &EmbeddedStatementsNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_embedded_variable_node<'pr, V>(visitor: &mut V, node: &EmbeddedVariableNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.variable());
}
pub fn visit_ensure_node<'pr, V>(visitor: &mut V, node: &EnsureNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_false_node<'pr, V>(_visitor: &mut V, _node: &FalseNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_find_pattern_node<'pr, V>(visitor: &mut V, node: &FindPatternNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.constant() {
visitor.visit(&node);
}
visitor.visit_splat_node(&node.left());
for node in node.requireds().iter() {
visitor.visit(&node);
}
visitor.visit(&node.right());
}
pub fn visit_flip_flop_node<'pr, V>(visitor: &mut V, node: &FlipFlopNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.left() {
visitor.visit(&node);
}
if let Some(node) = node.right() {
visitor.visit(&node);
}
}
pub fn visit_float_node<'pr, V>(_visitor: &mut V, _node: &FloatNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_for_node<'pr, V>(visitor: &mut V, node: &ForNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.index());
visitor.visit(&node.collection());
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_forwarding_arguments_node<'pr, V>(_visitor: &mut V, _node: &ForwardingArgumentsNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_forwarding_parameter_node<'pr, V>(_visitor: &mut V, _node: &ForwardingParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_forwarding_super_node<'pr, V>(visitor: &mut V, node: &ForwardingSuperNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.block() {
visitor.visit_block_node(&node);
}
}
pub fn visit_global_variable_and_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_global_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_global_variable_or_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_global_variable_read_node<'pr, V>(_visitor: &mut V, _node: &GlobalVariableReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_global_variable_target_node<'pr, V>(_visitor: &mut V, _node: &GlobalVariableTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_global_variable_write_node<'pr, V>(visitor: &mut V, node: &GlobalVariableWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_hash_node<'pr, V>(visitor: &mut V, node: &HashNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.elements().iter() {
visitor.visit(&node);
}
}
pub fn visit_hash_pattern_node<'pr, V>(visitor: &mut V, node: &HashPatternNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.constant() {
visitor.visit(&node);
}
for node in node.elements().iter() {
visitor.visit(&node);
}
if let Some(node) = node.rest() {
visitor.visit(&node);
}
}
pub fn visit_if_node<'pr, V>(visitor: &mut V, node: &IfNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.predicate());
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
if let Some(node) = node.subsequent() {
visitor.visit(&node);
}
}
pub fn visit_imaginary_node<'pr, V>(visitor: &mut V, node: &ImaginaryNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.numeric());
}
pub fn visit_implicit_node<'pr, V>(visitor: &mut V, node: &ImplicitNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_implicit_rest_node<'pr, V>(_visitor: &mut V, _node: &ImplicitRestNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_in_node<'pr, V>(visitor: &mut V, node: &InNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.pattern());
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_index_and_write_node<'pr, V>(visitor: &mut V, node: &IndexAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
if let Some(node) = node.block() {
visitor.visit_block_argument_node(&node);
}
visitor.visit(&node.value());
}
pub fn visit_index_operator_write_node<'pr, V>(visitor: &mut V, node: &IndexOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
if let Some(node) = node.block() {
visitor.visit_block_argument_node(&node);
}
visitor.visit(&node.value());
}
pub fn visit_index_or_write_node<'pr, V>(visitor: &mut V, node: &IndexOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.receiver() {
visitor.visit(&node);
}
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
if let Some(node) = node.block() {
visitor.visit_block_argument_node(&node);
}
visitor.visit(&node.value());
}
pub fn visit_index_target_node<'pr, V>(visitor: &mut V, node: &IndexTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.receiver());
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
if let Some(node) = node.block() {
visitor.visit_block_argument_node(&node);
}
}
pub fn visit_instance_variable_and_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_instance_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_instance_variable_or_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_instance_variable_read_node<'pr, V>(_visitor: &mut V, _node: &InstanceVariableReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_instance_variable_target_node<'pr, V>(_visitor: &mut V, _node: &InstanceVariableTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_instance_variable_write_node<'pr, V>(visitor: &mut V, node: &InstanceVariableWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_integer_node<'pr, V>(_visitor: &mut V, _node: &IntegerNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_interpolated_match_last_line_node<'pr, V>(visitor: &mut V, node: &InterpolatedMatchLastLineNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.parts().iter() {
visitor.visit(&node);
}
}
pub fn visit_interpolated_regular_expression_node<'pr, V>(visitor: &mut V, node: &InterpolatedRegularExpressionNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.parts().iter() {
visitor.visit(&node);
}
}
pub fn visit_interpolated_string_node<'pr, V>(visitor: &mut V, node: &InterpolatedStringNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.parts().iter() {
visitor.visit(&node);
}
}
pub fn visit_interpolated_symbol_node<'pr, V>(visitor: &mut V, node: &InterpolatedSymbolNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.parts().iter() {
visitor.visit(&node);
}
}
pub fn visit_interpolated_x_string_node<'pr, V>(visitor: &mut V, node: &InterpolatedXStringNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.parts().iter() {
visitor.visit(&node);
}
}
pub fn visit_it_local_variable_read_node<'pr, V>(_visitor: &mut V, _node: &ItLocalVariableReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_it_parameters_node<'pr, V>(_visitor: &mut V, _node: &ItParametersNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_keyword_hash_node<'pr, V>(visitor: &mut V, node: &KeywordHashNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.elements().iter() {
visitor.visit(&node);
}
}
pub fn visit_keyword_rest_parameter_node<'pr, V>(_visitor: &mut V, _node: &KeywordRestParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_lambda_node<'pr, V>(visitor: &mut V, node: &LambdaNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.parameters() {
visitor.visit(&node);
}
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_local_variable_and_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableAndWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_local_variable_operator_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableOperatorWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_local_variable_or_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableOrWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_local_variable_read_node<'pr, V>(_visitor: &mut V, _node: &LocalVariableReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_local_variable_target_node<'pr, V>(_visitor: &mut V, _node: &LocalVariableTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_local_variable_write_node<'pr, V>(visitor: &mut V, node: &LocalVariableWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_match_last_line_node<'pr, V>(_visitor: &mut V, _node: &MatchLastLineNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_match_predicate_node<'pr, V>(visitor: &mut V, node: &MatchPredicateNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
visitor.visit(&node.pattern());
}
pub fn visit_match_required_node<'pr, V>(visitor: &mut V, node: &MatchRequiredNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
visitor.visit(&node.pattern());
}
pub fn visit_match_write_node<'pr, V>(visitor: &mut V, node: &MatchWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit_call_node(&node.call());
for node in node.targets().iter() {
visitor.visit(&node);
}
}
pub fn visit_missing_node<'pr, V>(_visitor: &mut V, _node: &MissingNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_module_node<'pr, V>(visitor: &mut V, node: &ModuleNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.constant_path());
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_multi_target_node<'pr, V>(visitor: &mut V, node: &MultiTargetNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.lefts().iter() {
visitor.visit(&node);
}
if let Some(node) = node.rest() {
visitor.visit(&node);
}
for node in node.rights().iter() {
visitor.visit(&node);
}
}
pub fn visit_multi_write_node<'pr, V>(visitor: &mut V, node: &MultiWriteNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.lefts().iter() {
visitor.visit(&node);
}
if let Some(node) = node.rest() {
visitor.visit(&node);
}
for node in node.rights().iter() {
visitor.visit(&node);
}
visitor.visit(&node.value());
}
pub fn visit_next_node<'pr, V>(visitor: &mut V, node: &NextNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
}
pub fn visit_nil_node<'pr, V>(_visitor: &mut V, _node: &NilNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_no_keywords_parameter_node<'pr, V>(_visitor: &mut V, _node: &NoKeywordsParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_numbered_parameters_node<'pr, V>(_visitor: &mut V, _node: &NumberedParametersNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_numbered_reference_read_node<'pr, V>(_visitor: &mut V, _node: &NumberedReferenceReadNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_optional_keyword_parameter_node<'pr, V>(visitor: &mut V, node: &OptionalKeywordParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_optional_parameter_node<'pr, V>(visitor: &mut V, node: &OptionalParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.value());
}
pub fn visit_or_node<'pr, V>(visitor: &mut V, node: &OrNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.left());
visitor.visit(&node.right());
}
pub fn visit_parameters_node<'pr, V>(visitor: &mut V, node: &ParametersNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.requireds().iter() {
visitor.visit(&node);
}
for node in node.optionals().iter() {
visitor.visit(&node);
}
if let Some(node) = node.rest() {
visitor.visit(&node);
}
for node in node.posts().iter() {
visitor.visit(&node);
}
for node in node.keywords().iter() {
visitor.visit(&node);
}
if let Some(node) = node.keyword_rest() {
visitor.visit(&node);
}
if let Some(node) = node.block() {
visitor.visit_block_parameter_node(&node);
}
}
pub fn visit_parentheses_node<'pr, V>(visitor: &mut V, node: &ParenthesesNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_pinned_expression_node<'pr, V>(visitor: &mut V, node: &PinnedExpressionNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.expression());
}
pub fn visit_pinned_variable_node<'pr, V>(visitor: &mut V, node: &PinnedVariableNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.variable());
}
pub fn visit_post_execution_node<'pr, V>(visitor: &mut V, node: &PostExecutionNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_pre_execution_node<'pr, V>(visitor: &mut V, node: &PreExecutionNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_program_node<'pr, V>(visitor: &mut V, node: &ProgramNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit_statements_node(&node.statements());
}
pub fn visit_range_node<'pr, V>(visitor: &mut V, node: &RangeNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.left() {
visitor.visit(&node);
}
if let Some(node) = node.right() {
visitor.visit(&node);
}
}
pub fn visit_rational_node<'pr, V>(_visitor: &mut V, _node: &RationalNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_redo_node<'pr, V>(_visitor: &mut V, _node: &RedoNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_regular_expression_node<'pr, V>(_visitor: &mut V, _node: &RegularExpressionNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_required_keyword_parameter_node<'pr, V>(_visitor: &mut V, _node: &RequiredKeywordParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_required_parameter_node<'pr, V>(_visitor: &mut V, _node: &RequiredParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_rescue_modifier_node<'pr, V>(visitor: &mut V, node: &RescueModifierNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.expression());
visitor.visit(&node.rescue_expression());
}
pub fn visit_rescue_node<'pr, V>(visitor: &mut V, node: &RescueNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.exceptions().iter() {
visitor.visit(&node);
}
if let Some(node) = node.reference() {
visitor.visit(&node);
}
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
if let Some(node) = node.subsequent() {
visitor.visit_rescue_node(&node);
}
}
pub fn visit_rest_parameter_node<'pr, V>(_visitor: &mut V, _node: &RestParameterNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_retry_node<'pr, V>(_visitor: &mut V, _node: &RetryNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_return_node<'pr, V>(visitor: &mut V, node: &ReturnNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
}
pub fn visit_self_node<'pr, V>(_visitor: &mut V, _node: &SelfNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_shareable_constant_node<'pr, V>(visitor: &mut V, node: &ShareableConstantNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.write());
}
pub fn visit_singleton_class_node<'pr, V>(visitor: &mut V, node: &SingletonClassNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.expression());
if let Some(node) = node.body() {
visitor.visit(&node);
}
}
pub fn visit_source_encoding_node<'pr, V>(_visitor: &mut V, _node: &SourceEncodingNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_source_file_node<'pr, V>(_visitor: &mut V, _node: &SourceFileNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_source_line_node<'pr, V>(_visitor: &mut V, _node: &SourceLineNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_splat_node<'pr, V>(visitor: &mut V, node: &SplatNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.expression() {
visitor.visit(&node);
}
}
pub fn visit_statements_node<'pr, V>(visitor: &mut V, node: &StatementsNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.body().iter() {
visitor.visit(&node);
}
}
pub fn visit_string_node<'pr, V>(_visitor: &mut V, _node: &StringNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_super_node<'pr, V>(visitor: &mut V, node: &SuperNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
if let Some(node) = node.block() {
visitor.visit(&node);
}
}
pub fn visit_symbol_node<'pr, V>(_visitor: &mut V, _node: &SymbolNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_true_node<'pr, V>(_visitor: &mut V, _node: &TrueNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_undef_node<'pr, V>(visitor: &mut V, node: &UndefNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.names().iter() {
visitor.visit(&node);
}
}
pub fn visit_unless_node<'pr, V>(visitor: &mut V, node: &UnlessNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.predicate());
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
if let Some(node) = node.else_clause() {
visitor.visit_else_node(&node);
}
}
pub fn visit_until_node<'pr, V>(visitor: &mut V, node: &UntilNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.predicate());
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_when_node<'pr, V>(visitor: &mut V, node: &WhenNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
for node in node.conditions().iter() {
visitor.visit(&node);
}
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_while_node<'pr, V>(visitor: &mut V, node: &WhileNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
visitor.visit(&node.predicate());
if let Some(node) = node.statements() {
visitor.visit_statements_node(&node);
}
}
pub fn visit_x_string_node<'pr, V>(_visitor: &mut V, _node: &XStringNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{}
pub fn visit_yield_node<'pr, V>(visitor: &mut V, node: &YieldNode<'pr>)
where
V: Visit<'pr> + ?Sized,
{
if let Some(node) = node.arguments() {
visitor.visit_arguments_node(&node);
}
}