# frozen_string_literal: true
# :markup: markdown

=begin
--
This file is generated by the templates/template.rb script and should not be
modified manually. See templates/lib/prism/compiler.rb.erb
if you are looking to modify the template
++
=end

#--
# rbs_inline: enabled

module Prism
  # A compiler is a visitor that returns the value of each node as it visits.
  # This is as opposed to a visitor which will only walk the tree. This can be
  # useful when you are trying to compile a tree into a different format.
  #
  # For example, to build a representation of the tree as s-expressions, you
  # could write:
  #
  #     class SExpressions < Prism::Compiler
  #       def visit_arguments_node(node) = [:arguments, super]
  #       def visit_call_node(node) = [:call, super]
  #       def visit_integer_node(node) = [:integer]
  #       def visit_program_node(node) = [:program, super]
  #     end
  #
  #     Prism.parse("1 + 2").value.accept(SExpressions.new)
  #     # => [:program, [[[:call, [[:integer], [:arguments, [[:integer]]]]]]]]
  #
  class Compiler < Visitor
    # Visit an individual node.
    #--
    #: (node?) -> untyped
    def visit(node) # :nodoc:
      node&.accept(self)
    end

    # Visit a list of nodes.
    #--
    #: (Array[node?]) -> untyped
    def visit_all(nodes) # :nodoc:
      nodes.map { |node| node&.accept(self) }
    end

    # Visit the child nodes of the given node.
    #--
    #: (node) -> Array[untyped]
    def visit_child_nodes(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (AliasGlobalVariableNode) -> Array[untyped]
    def visit_alias_global_variable_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (AliasMethodNode) -> Array[untyped]
    def visit_alias_method_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (AlternationPatternNode) -> Array[untyped]
    def visit_alternation_pattern_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (AndNode) -> Array[untyped]
    def visit_and_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ArgumentsNode) -> Array[untyped]
    def visit_arguments_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ArrayNode) -> Array[untyped]
    def visit_array_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ArrayPatternNode) -> Array[untyped]
    def visit_array_pattern_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (AssocNode) -> Array[untyped]
    def visit_assoc_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (AssocSplatNode) -> Array[untyped]
    def visit_assoc_splat_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BackReferenceReadNode) -> Array[untyped]
    def visit_back_reference_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BeginNode) -> Array[untyped]
    def visit_begin_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BlockArgumentNode) -> Array[untyped]
    def visit_block_argument_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BlockLocalVariableNode) -> Array[untyped]
    def visit_block_local_variable_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BlockNode) -> Array[untyped]
    def visit_block_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BlockParameterNode) -> Array[untyped]
    def visit_block_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BlockParametersNode) -> Array[untyped]
    def visit_block_parameters_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (BreakNode) -> Array[untyped]
    def visit_break_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CallAndWriteNode) -> Array[untyped]
    def visit_call_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CallNode) -> Array[untyped]
    def visit_call_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CallOperatorWriteNode) -> Array[untyped]
    def visit_call_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CallOrWriteNode) -> Array[untyped]
    def visit_call_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CallTargetNode) -> Array[untyped]
    def visit_call_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CapturePatternNode) -> Array[untyped]
    def visit_capture_pattern_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CaseMatchNode) -> Array[untyped]
    def visit_case_match_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (CaseNode) -> Array[untyped]
    def visit_case_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassNode) -> Array[untyped]
    def visit_class_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassVariableAndWriteNode) -> Array[untyped]
    def visit_class_variable_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassVariableOperatorWriteNode) -> Array[untyped]
    def visit_class_variable_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassVariableOrWriteNode) -> Array[untyped]
    def visit_class_variable_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassVariableReadNode) -> Array[untyped]
    def visit_class_variable_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassVariableTargetNode) -> Array[untyped]
    def visit_class_variable_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ClassVariableWriteNode) -> Array[untyped]
    def visit_class_variable_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantAndWriteNode) -> Array[untyped]
    def visit_constant_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantOperatorWriteNode) -> Array[untyped]
    def visit_constant_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantOrWriteNode) -> Array[untyped]
    def visit_constant_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantPathAndWriteNode) -> Array[untyped]
    def visit_constant_path_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantPathNode) -> Array[untyped]
    def visit_constant_path_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantPathOperatorWriteNode) -> Array[untyped]
    def visit_constant_path_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantPathOrWriteNode) -> Array[untyped]
    def visit_constant_path_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantPathTargetNode) -> Array[untyped]
    def visit_constant_path_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantPathWriteNode) -> Array[untyped]
    def visit_constant_path_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantReadNode) -> Array[untyped]
    def visit_constant_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantTargetNode) -> Array[untyped]
    def visit_constant_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ConstantWriteNode) -> Array[untyped]
    def visit_constant_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (DefNode) -> Array[untyped]
    def visit_def_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (DefinedNode) -> Array[untyped]
    def visit_defined_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ElseNode) -> Array[untyped]
    def visit_else_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (EmbeddedStatementsNode) -> Array[untyped]
    def visit_embedded_statements_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (EmbeddedVariableNode) -> Array[untyped]
    def visit_embedded_variable_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (EnsureNode) -> Array[untyped]
    def visit_ensure_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ErrorRecoveryNode) -> Array[untyped]
    def visit_error_recovery_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (FalseNode) -> Array[untyped]
    def visit_false_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (FindPatternNode) -> Array[untyped]
    def visit_find_pattern_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (FlipFlopNode) -> Array[untyped]
    def visit_flip_flop_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (FloatNode) -> Array[untyped]
    def visit_float_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ForNode) -> Array[untyped]
    def visit_for_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ForwardingArgumentsNode) -> Array[untyped]
    def visit_forwarding_arguments_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ForwardingParameterNode) -> Array[untyped]
    def visit_forwarding_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ForwardingSuperNode) -> Array[untyped]
    def visit_forwarding_super_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (GlobalVariableAndWriteNode) -> Array[untyped]
    def visit_global_variable_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (GlobalVariableOperatorWriteNode) -> Array[untyped]
    def visit_global_variable_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (GlobalVariableOrWriteNode) -> Array[untyped]
    def visit_global_variable_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (GlobalVariableReadNode) -> Array[untyped]
    def visit_global_variable_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (GlobalVariableTargetNode) -> Array[untyped]
    def visit_global_variable_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (GlobalVariableWriteNode) -> Array[untyped]
    def visit_global_variable_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (HashNode) -> Array[untyped]
    def visit_hash_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (HashPatternNode) -> Array[untyped]
    def visit_hash_pattern_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (IfNode) -> Array[untyped]
    def visit_if_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ImaginaryNode) -> Array[untyped]
    def visit_imaginary_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ImplicitNode) -> Array[untyped]
    def visit_implicit_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ImplicitRestNode) -> Array[untyped]
    def visit_implicit_rest_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InNode) -> Array[untyped]
    def visit_in_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (IndexAndWriteNode) -> Array[untyped]
    def visit_index_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (IndexOperatorWriteNode) -> Array[untyped]
    def visit_index_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (IndexOrWriteNode) -> Array[untyped]
    def visit_index_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (IndexTargetNode) -> Array[untyped]
    def visit_index_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InstanceVariableAndWriteNode) -> Array[untyped]
    def visit_instance_variable_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InstanceVariableOperatorWriteNode) -> Array[untyped]
    def visit_instance_variable_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InstanceVariableOrWriteNode) -> Array[untyped]
    def visit_instance_variable_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InstanceVariableReadNode) -> Array[untyped]
    def visit_instance_variable_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InstanceVariableTargetNode) -> Array[untyped]
    def visit_instance_variable_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InstanceVariableWriteNode) -> Array[untyped]
    def visit_instance_variable_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (IntegerNode) -> Array[untyped]
    def visit_integer_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InterpolatedMatchLastLineNode) -> Array[untyped]
    def visit_interpolated_match_last_line_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InterpolatedRegularExpressionNode) -> Array[untyped]
    def visit_interpolated_regular_expression_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InterpolatedStringNode) -> Array[untyped]
    def visit_interpolated_string_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InterpolatedSymbolNode) -> Array[untyped]
    def visit_interpolated_symbol_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (InterpolatedXStringNode) -> Array[untyped]
    def visit_interpolated_x_string_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ItLocalVariableReadNode) -> Array[untyped]
    def visit_it_local_variable_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ItParametersNode) -> Array[untyped]
    def visit_it_parameters_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (KeywordHashNode) -> Array[untyped]
    def visit_keyword_hash_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (KeywordRestParameterNode) -> Array[untyped]
    def visit_keyword_rest_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LambdaNode) -> Array[untyped]
    def visit_lambda_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LocalVariableAndWriteNode) -> Array[untyped]
    def visit_local_variable_and_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LocalVariableOperatorWriteNode) -> Array[untyped]
    def visit_local_variable_operator_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LocalVariableOrWriteNode) -> Array[untyped]
    def visit_local_variable_or_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LocalVariableReadNode) -> Array[untyped]
    def visit_local_variable_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LocalVariableTargetNode) -> Array[untyped]
    def visit_local_variable_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (LocalVariableWriteNode) -> Array[untyped]
    def visit_local_variable_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (MatchLastLineNode) -> Array[untyped]
    def visit_match_last_line_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (MatchPredicateNode) -> Array[untyped]
    def visit_match_predicate_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (MatchRequiredNode) -> Array[untyped]
    def visit_match_required_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (MatchWriteNode) -> Array[untyped]
    def visit_match_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ModuleNode) -> Array[untyped]
    def visit_module_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (MultiTargetNode) -> Array[untyped]
    def visit_multi_target_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (MultiWriteNode) -> Array[untyped]
    def visit_multi_write_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (NextNode) -> Array[untyped]
    def visit_next_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (NilNode) -> Array[untyped]
    def visit_nil_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (NoBlockParameterNode) -> Array[untyped]
    def visit_no_block_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (NoKeywordsParameterNode) -> Array[untyped]
    def visit_no_keywords_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (NumberedParametersNode) -> Array[untyped]
    def visit_numbered_parameters_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (NumberedReferenceReadNode) -> Array[untyped]
    def visit_numbered_reference_read_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (OptionalKeywordParameterNode) -> Array[untyped]
    def visit_optional_keyword_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (OptionalParameterNode) -> Array[untyped]
    def visit_optional_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (OrNode) -> Array[untyped]
    def visit_or_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ParametersNode) -> Array[untyped]
    def visit_parameters_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ParenthesesNode) -> Array[untyped]
    def visit_parentheses_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (PinnedExpressionNode) -> Array[untyped]
    def visit_pinned_expression_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (PinnedVariableNode) -> Array[untyped]
    def visit_pinned_variable_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (PostExecutionNode) -> Array[untyped]
    def visit_post_execution_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (PreExecutionNode) -> Array[untyped]
    def visit_pre_execution_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ProgramNode) -> Array[untyped]
    def visit_program_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RangeNode) -> Array[untyped]
    def visit_range_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RationalNode) -> Array[untyped]
    def visit_rational_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RedoNode) -> Array[untyped]
    def visit_redo_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RegularExpressionNode) -> Array[untyped]
    def visit_regular_expression_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RequiredKeywordParameterNode) -> Array[untyped]
    def visit_required_keyword_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RequiredParameterNode) -> Array[untyped]
    def visit_required_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RescueModifierNode) -> Array[untyped]
    def visit_rescue_modifier_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RescueNode) -> Array[untyped]
    def visit_rescue_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RestParameterNode) -> Array[untyped]
    def visit_rest_parameter_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (RetryNode) -> Array[untyped]
    def visit_retry_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ReturnNode) -> Array[untyped]
    def visit_return_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SelfNode) -> Array[untyped]
    def visit_self_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (ShareableConstantNode) -> Array[untyped]
    def visit_shareable_constant_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SingletonClassNode) -> Array[untyped]
    def visit_singleton_class_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SourceEncodingNode) -> Array[untyped]
    def visit_source_encoding_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SourceFileNode) -> Array[untyped]
    def visit_source_file_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SourceLineNode) -> Array[untyped]
    def visit_source_line_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SplatNode) -> Array[untyped]
    def visit_splat_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (StatementsNode) -> Array[untyped]
    def visit_statements_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (StringNode) -> Array[untyped]
    def visit_string_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SuperNode) -> Array[untyped]
    def visit_super_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (SymbolNode) -> Array[untyped]
    def visit_symbol_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (TrueNode) -> Array[untyped]
    def visit_true_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (UndefNode) -> Array[untyped]
    def visit_undef_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (UnlessNode) -> Array[untyped]
    def visit_unless_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (UntilNode) -> Array[untyped]
    def visit_until_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (WhenNode) -> Array[untyped]
    def visit_when_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (WhileNode) -> Array[untyped]
    def visit_while_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (XStringNode) -> Array[untyped]
    def visit_x_string_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end

    #: (YieldNode) -> Array[untyped]
    def visit_yield_node(node) # :nodoc:
      node.each_child_node.map { |node| node.accept(self) }
    end
  end
end
