Implements building post-processing statements for return values.
# File lib/gir_ffi/builders/return_value_builder.rb, line 7 def initialize var_gen, type_info, is_constructor = false, skip = false super var_gen, nil, type_info, :return @is_constructor = is_constructor @skip = skip end
# File lib/gir_ffi/builders/return_value_builder.rb, line 21 def inarg nil end
# File lib/gir_ffi/builders/return_value_builder.rb, line 35 def is_relevant? !is_void_return_value? && !@skip end
# File lib/gir_ffi/builders/return_value_builder.rb, line 13 def post if has_conversion? [ "#{retname} = #{post_conversion}" ] else [] end end
# File lib/gir_ffi/builders/return_value_builder.rb, line 25 def retval if has_conversion? super elsif is_relevant? callarg else nil end end
# File lib/gir_ffi/builders/return_value_builder.rb, line 41 def has_conversion? is_closure || needs_outgoing_parameter_conversion? || needs_constructor_wrap? end
# File lib/gir_ffi/builders/return_value_builder.rb, line 63 def is_void_return_value? specialized_type_tag == :void && !type_info.pointer? end
# File lib/gir_ffi/builders/return_value_builder.rb, line 59 def needs_constructor_wrap? @is_constructor && [ :interface, :object ].include?(specialized_type_tag) end
# File lib/gir_ffi/builders/return_value_builder.rb, line 45 def post_conversion if is_closure "GirFFI::ArgHelper::OBJECT_STORE[#{callarg}.address]" elsif needs_constructor_wrap? "self.constructor_wrap(#{callarg})" else outgoing_conversion callarg end end
# File lib/gir_ffi/builders/return_value_builder.rb, line 55 def retname @retname ||= @var_gen.new_var end