class GirFFI::Builders::MarshallingMethodBuilder

Implements the creation mapping method for a signal handler. This method converts arguments from C to Ruby, and the result from Ruby to C.

Public Class Methods

for_signal(info) click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 15
def self.for_signal(info)
  container_info = info.container
  container_type_info = ReceiverTypeInfo.new(container_info)
  receiver_info = ReceiverArgumentInfo.new(container_type_info)
  new receiver_info, info
end
new(receiver_info, info) click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 22
def initialize(receiver_info, info)
  super(info, ClosureReturnValueBuilder,
        receiver_info: receiver_info,
        argument_builder_class: ClosureArgumentBuilder)
end

Public Instance Methods

invocation() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 46
def invocation
  "wrap(closure.to_ptr).invoke_block(#{call_argument_list})"
end
method_arguments() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 34
def method_arguments
  %w[closure return_value param_values _invocation_hint _marshal_data]
end
method_name() click to toggle source

Methods used by MethodTemplate

# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 30
def method_name
  "marshaller"
end
preparation() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 38
def preparation
  if param_names.size == 1
    ["#{param_names.first} = param_values.first.get_value_plain"]
  else
    ["#{param_names.join(', ')} = param_values.map(&:get_value_plain)"]
  end
end
result() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 50
def result
  if (name = @argument_builder_collection.return_value_name)
    ["return_value.set_value #{name}"]
  else
    []
  end
end
singleton_method?() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 58
def singleton_method?
  true
end

Private Instance Methods

call_argument_list() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 64
def call_argument_list
  @argument_builder_collection.call_argument_names.join(", ")
end
param_names() click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 68
def param_names
  @param_names ||= @argument_builder_collection.method_argument_names
end