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.
TODO: Inherit from BaseMethodBuilder
Public Class Methods
for_signal(receiver_info, argument_infos, return_value_info)
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 15 def self.for_signal(receiver_info, argument_infos, return_value_info) new receiver_info, argument_infos, return_value_info end
new(receiver_info, argument_infos, return_value_info)
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 19 def initialize(receiver_info, argument_infos, return_value_info) receiver_builder = make_argument_builder receiver_info argument_builders = argument_infos.map { |arg| make_argument_builder arg } return_value_builder = ClosureReturnValueBuilder.new(variable_generator, return_value_info) @argument_builder_collection = ArgumentBuilderCollection.new(return_value_builder, argument_builders, receiver_builder: receiver_builder) @template = MethodTemplate.new(self, @argument_builder_collection) end
Public Instance Methods
invocation()
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 51 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 39 def method_arguments %w(closure return_value param_values _invocation_hint _marshal_data) end
method_definition()
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 31 def method_definition @template.method_definition end
method_name()
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 35 def method_name 'marshaller' end
preparation()
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 43 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 55 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 63 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 69 def call_argument_list @argument_builder_collection.call_argument_names.join(', ') end
make_argument_builder(argument_info)
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 81 def make_argument_builder(argument_info) ClosureArgumentBuilder.new variable_generator, argument_info end
param_names()
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 73 def param_names @param_names ||= @argument_builder_collection.method_argument_names end
variable_generator()
click to toggle source
# File lib/gir_ffi/builders/marshalling_method_builder.rb, line 77 def variable_generator @variable_generator ||= VariableNameGenerator.new end