class GirFFI::Builders::MappingMethodBuilder
Implements the creation mapping method for a callback or vfunc handler. This method converts arguments from C to Ruby, and the result from Ruby to C.
TODO: Inherit from BaseMethodBuilder
Public Class Methods
for_callback(argument_infos, return_value_info)
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 16 def self.for_callback(argument_infos, return_value_info) new nil, argument_infos, return_value_info, CallbackArgumentBuilder end
for_vfunc(receiver_info, argument_infos, return_value_info)
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 20 def self.for_vfunc(receiver_info, argument_infos, return_value_info) new receiver_info, argument_infos, return_value_info, VFuncArgumentBuilder end
new(receiver_info, argument_infos, return_value_info, builder_class)
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 24 def initialize(receiver_info, argument_infos, return_value_info, builder_class) @argument_builder_class = builder_class receiver_builder = make_argument_builder receiver_info if receiver_info argument_builders = argument_infos.map { |info| make_argument_builder info } return_value_builder = CallbackReturnValueBuilder.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/mapping_method_builder.rb, line 54 def invocation "_proc.call(#{call_argument_list})" end
method_arguments()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 45 def method_arguments @method_arguments ||= @argument_builder_collection.method_argument_names.dup.unshift('_proc') end
method_definition()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 37 def method_definition @template.method_definition end
method_name()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 41 def method_name 'call_with_argument_mapping' end
preparation()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 50 def preparation [] end
result()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 58 def result if (name = @argument_builder_collection.return_value_name) ["return #{name}"] else [] end end
singleton_method?()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 66 def singleton_method? true end
Private Instance Methods
call_argument_list()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 72 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/mapping_method_builder.rb, line 80 def make_argument_builder(argument_info) @argument_builder_class.new variable_generator, argument_info end
variable_generator()
click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 76 def variable_generator @variable_generator ||= VariableNameGenerator.new end