Class: GirFFI::Builders::MappingMethodBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/gir_ffi/builders/mapping_method_builder.rb

Overview

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(receiver_info, argument_infos, return_value_info, builder_class) ⇒ MappingMethodBuilder

Returns a new instance of MappingMethodBuilder.



24
25
26
27
28
29
30
31
32
33
34
35
# 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

Class Method Details

.for_callback(argument_infos, return_value_info) ⇒ Object



16
17
18
# 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) ⇒ Object



20
21
22
# 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

Instance Method Details

#invocationObject



54
55
56
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 54

def invocation
  "_proc.call(#{call_argument_list})"
end

#method_argumentsObject



45
46
47
48
# 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_definitionObject



37
38
39
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 37

def method_definition
  @template.method_definition
end

#method_nameObject



41
42
43
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 41

def method_name
  'call_with_argument_mapping'
end

#preparationObject



50
51
52
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 50

def preparation
  []
end

#resultObject



58
59
60
61
62
63
64
# 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?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 66

def singleton_method?
  true
end