fixes references
only writes references out once (was broken) and only the first occurrence in write order
This commit is contained in:
parent
5ca9eed89c
commit
941f0a4886
@ -5,12 +5,13 @@ module Sof
|
|||||||
@object = object
|
@object = object
|
||||||
@level = level
|
@level = level
|
||||||
@referenced = nil
|
@referenced = nil
|
||||||
|
@written = nil
|
||||||
end
|
end
|
||||||
def set_reference r
|
def set_reference r
|
||||||
@referenced = r
|
@referenced = r
|
||||||
end
|
end
|
||||||
attr_reader :object , :referenced
|
attr_reader :object , :referenced
|
||||||
attr_accessor :level
|
attr_accessor :level , :written
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -18,10 +18,15 @@ module Sof
|
|||||||
end
|
end
|
||||||
occurence = @members.objects[object.object_id]
|
occurence = @members.objects[object.object_id]
|
||||||
raise "no object #{object}" unless occurence
|
raise "no object #{object}" unless occurence
|
||||||
if(level > occurence.level )
|
#puts "#{level} ? #{occurence.level} : ref #{occurence.referenced}"
|
||||||
|
if( occurence.referenced and (occurence.level <= level) )
|
||||||
#puts "ref #{occurence.referenced} level #{level} at #{occurence.level}"
|
#puts "ref #{occurence.referenced} level #{level} at #{occurence.level}"
|
||||||
|
if( occurence.written.nil? )
|
||||||
|
occurence.written = true
|
||||||
|
else
|
||||||
return SimpleNode.new("*#{occurence.referenced}")
|
return SimpleNode.new("*#{occurence.referenced}")
|
||||||
end
|
end
|
||||||
|
end
|
||||||
ref = occurence.referenced
|
ref = occurence.referenced
|
||||||
if(object.respond_to? :to_sof_node) #mainly meant for arrays and hashes
|
if(object.respond_to? :to_sof_node) #mainly meant for arrays and hashes
|
||||||
object.to_sof_node(self , level , ref )
|
object.to_sof_node(self , level , ref )
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
require_relative "test_basic"
|
require_relative "test_basic"
|
||||||
require_relative "test_object"
|
require_relative "test_object"
|
||||||
require_relative "test_ext"
|
require_relative "test_ext"
|
||||||
|
require_relative "test_refs"
|
||||||
|
@ -57,6 +57,6 @@ class ObjectSof < MiniTest::Test
|
|||||||
object.extra = ObjectWithAttributes
|
object.extra = ObjectWithAttributes
|
||||||
ar = [object , ObjectWithAttributes]
|
ar = [object , ObjectWithAttributes]
|
||||||
@out = ar
|
@out = ar
|
||||||
check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => *1)\n-&1 ObjectWithAttributes"
|
check "-ObjectWithAttributes(:name => 'some name', :number => 1234, :extra => &1 ObjectWithAttributes)\n-*1"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user