class Psych::Visitors::YAMLTree

def visit_Data o

def visit_Data o
  ivars = o.instance_variables
  if ivars.empty?
    tag = ['!ruby/data', o.class.name].compact.join(':')
    register o, @emitter.start_mapping(nil, tag, false, Nodes::Mapping::BLOCK)
    o.members.each do |member|
      @emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY
      accept o.send member
    end
    @emitter.end_mapping
  else
    tag = ['!ruby/data-with-ivars', o.class.name].compact.join(':')
    node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
    register(o, node)
    # Dump the members
    accept 'members'
    @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
    o.members.each do |member|
      @emitter.scalar member.to_s, nil, nil, true, false, Nodes::Scalar::ANY
      accept o.send member
    end
    @emitter.end_mapping
    # Dump the ivars
    accept 'ivars'
    @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
    ivars.each do |ivar|
      accept ivar.to_s
      accept o.instance_variable_get ivar
    end
    @emitter.end_mapping
    @emitter.end_mapping
  end
end unless RUBY_VERSION < "3.2"