class GirFFI::Builders::ReturnValueBuilder

Implements building post-processing statements for return values.

Public Class Methods

new(var_gen, type_info, is_constructor = false, skip = false) click to toggle source
Calls superclass method GirFFI::BaseArgumentBuilder.new
# 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

Public Instance Methods

inarg() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 21
def inarg
  nil
end
is_relevant?() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 35
def is_relevant?
  !is_void_return_value? && !@skip
end
post() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 13
def post
  if has_conversion?
    [ "#{retname} = #{post_conversion}" ]
  else
    []
  end
end
retval() click to toggle source
Calls superclass method GirFFI::BaseArgumentBuilder#retval
# 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

Private Instance Methods

has_conversion?() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 41
def has_conversion?
  is_closure || needs_outgoing_parameter_conversion? || needs_constructor_wrap?
end
is_void_return_value?() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 63
def is_void_return_value?
  specialized_type_tag == :void && !type_info.pointer?
end
needs_constructor_wrap?() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 59
def needs_constructor_wrap?
  @is_constructor && [ :interface, :object ].include?(specialized_type_tag)
end
post_conversion() click to toggle source
# 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
retname() click to toggle source
# File lib/gir_ffi/builders/return_value_builder.rb, line 55
def retname
  @retname ||= @var_gen.new_var
end