@@ -218,7 +218,7 @@ def initialize value
218218 raise Vips ::Error if value . null?
219219 end
220220
221- super value
221+ super ( value )
222222 end
223223
224224 def build
@@ -283,7 +283,7 @@ def set name, value, match_image, flags, gtype, destructive
283283 value = value . map { |x | Operation . imageize match_image , x }
284284 end
285285
286- super name , value
286+ super ( name , value )
287287 end
288288
289289 public
@@ -440,14 +440,12 @@ def self.call name, supplied, optional = {}, option_string = ""
440440 end
441441 end
442442
443- # collect a list of all input references here
444- references = Set . new
443+ # dedupe all input references here
444+ deduped_references = Set . new
445445
446446 add_reference = lambda do |x |
447447 if x . is_a? ( Vips ::Image )
448- x . references . each do |i |
449- references << i
450- end
448+ deduped_references . merge x . references
451449 end
452450 false
453451 end
@@ -482,20 +480,27 @@ def self.call name, supplied, optional = {}, option_string = ""
482480
483481 op = op . build
484482
483+ # we need an array of references for output objects
484+ references = deduped_references . to_a
485+ 485486 # attach all input refs to output x
486487 set_reference = lambda do |x |
488+ # stop early if there are no refs to attach
489+ return true if references == [ ]
490+ 487491 if x . is_a? Vips ::Image
488- x . references += references
492+ references . each { | i | x . references << i }
489493 end
494+ 490495 false
491496 end
492497
493498 # get all required results
494499 result = [ ]
495500 required_output . each do |details |
496- value = details [ :arg_name ]
501+ value = op . get ( details [ :arg_name ] )
497502 flat_find value , &set_reference
498- result << op . get ( value )
503+ result << value
499504 end
500505
501506 # fetch all optional ones
0 commit comments