class GirFFI::Builders::CallbackReturnValueBuilder

Implements building post-processing statements for return values of callbacks.

Public Instance Methods

capture_variable_name() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 13
def capture_variable_name
  @capture_variable_name ||= new_variable if relevant?
end
has_post_conversion?() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 41
def has_post_conversion?
  relevant? && needs_ruby_to_c_conversion?
end
needs_ruby_to_c_conversion?() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 45
def needs_ruby_to_c_conversion?
  type_info.needs_ruby_to_c_conversion_for_callbacks?
end
post_conversion() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 29
def post_conversion
  if has_post_conversion?
    if type_info.flattened_tag == :object
      ["#{post_converted_name} = #{post_convertor.conversion}.to_ptr"]
    else
      ["#{post_converted_name} = #{post_convertor.conversion}"]
    end
  else
    []
  end
end
post_converted_name() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 17
def post_converted_name
  @post_converted_name ||= if has_post_conversion?
                             new_variable
                           else
                             capture_variable_name
                           end
end
relevant?() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 9
def relevant?
  !void_return_value? && !arginfo.skip?
end
return_value_name() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 25
def return_value_name
  post_converted_name if has_return_value_name?
end

Private Instance Methods

has_return_value_name?() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 67
def has_return_value_name?
  relevant? && !array_arg
end
post_convertor() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 51
def post_convertor
  @post_convertor ||= RubyToCConvertor.new(type_info, post_convertor_argument)
end
post_convertor_argument() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 55
def post_convertor_argument
  if ownership_transfer == :everything && specialized_type_tag == :object
    "#{capture_variable_name}.ref"
  else
    capture_variable_name
  end
end
void_return_value?() click to toggle source
# File lib/gir_ffi/builders/callback_return_value_builder.rb, line 63
def void_return_value?
  specialized_type_tag == :void && !type_info.pointer?
end