* ext/psych/lib/psych/visitors/yaml_tree.rb: change output reference

ids to be sequential numbers.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tenderlove 2013-02-07 23:52:01 +00:00
Родитель a75922010f
Коммит 7a68f53dc6
2 изменённых файлов: 34 добавлений и 5 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Fri Feb 8 08:50:42 2013 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/lib/psych/visitors/yaml_tree.rb: change output reference
ids to be sequential numbers.
Fri Feb 8 07:47:56 2013 Eric Hodel <drbrain@segment7.net>
* lib/rubygems/package/old.rb: Disallow installation of old-format

Просмотреть файл

@ -8,6 +8,30 @@ module Psych
# builder.tree # => #<Psych::Nodes::Stream .. }
#
class YAMLTree < Psych::Visitors::Visitor
class Registrar # :nodoc:
def initialize
@obj_to_id = {}
@obj_to_node = {}
@counter = 0
end
def register target, node
@obj_to_node[target.object_id] = node
end
def key? target
@obj_to_node.key? target.object_id
end
def id_for target
@obj_to_id[target.object_id] ||= (@counter += 1)
end
def node_for target
@obj_to_node[target.object_id]
end
end
attr_reader :started, :finished
alias :finished? :finished
alias :started? :started
@ -17,7 +41,7 @@ module Psych
@started = false
@finished = false
@emitter = emitter
@st = {}
@st = Registrar.new
@ss = ss
@options = options
@coders = []
@ -72,9 +96,9 @@ module Psych
def accept target
# return any aliases we find
if @st.key? target.object_id
oid = target.object_id
node = @st[oid]
if @st.key? target
oid = @st.id_for target
node = @st.node_for target
anchor = oid.to_s
node.anchor = anchor
return @emitter.alias anchor
@ -410,7 +434,7 @@ module Psych
end
def register target, yaml_obj
@st[target.object_id] = yaml_obj
@st.register target, yaml_obj
yaml_obj
end