diff options
author | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-02-07 23:52:01 +0000 |
---|---|---|
committer | tenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-02-07 23:52:01 +0000 |
commit | 7a68f53dc6f710b8aeb4ebe91961c29d1ad85e5f (patch) | |
tree | 94f25b719dcbe2c528432018b3b291bbc70a24a3 /ext/psych/lib/psych | |
parent | a75922010fe38f48c08c744456dd92cb755e1119 (diff) |
* 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
Diffstat (limited to 'ext/psych/lib/psych')
-rw-r--r-- | ext/psych/lib/psych/visitors/yaml_tree.rb | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index ce40a17eb3..53cbad3e10 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -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 |