class Psych::Visitors::YAMLTree

def visit_hash_subclass o

def visit_hash_subclass o
  ivars = o.instance_variables
  if ivars.any?
    tag = "!ruby/hash-with-ivars:#{o.class}"
    node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
    register(o, node)
    # Dump the ivars
    accept 'ivars'
    @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
    o.instance_variables.each do |ivar|
      accept ivar
      accept o.instance_variable_get ivar
    end
    @emitter.end_mapping
    # Dump the elements
    accept 'elements'
    @emitter.start_mapping nil, nil, true, Nodes::Mapping::BLOCK
    o.each do |k,v|
      accept k
      accept v
    end
    @emitter.end_mapping
    @emitter.end_mapping
  else
    tag = "!ruby/hash:#{o.class}"
    node = @emitter.start_mapping(nil, tag, false, Psych::Nodes::Mapping::BLOCK)
    register(o, node)
    o.each do |k,v|
      accept k
      accept v
    end
    @emitter.end_mapping
  end
end