Class: GirFFI::Builders::VFuncBuilder

Inherits:
GirFFI::BaseTypeBuilder show all
Defined in:
lib/gir_ffi/builders/vfunc_builder.rb

Overview

Implements the creation of a class representing the implementation of a vfunc. This class will be able to turn a proc into an FFI::Function that can serve as such an implementation in C. The class will be namespaced inside class defining the vfunc.

Instance Attribute Summary

Attributes inherited from GirFFI::BaseTypeBuilder

#info

Instance Method Summary collapse

Methods inherited from GirFFI::BaseTypeBuilder

#build_class, #initialize, #instantiate_class

Methods included from GirFFI::BuilderHelper

#get_or_define_class, #get_or_define_module, #optionally_define_constant

Constructor Details

This class inherits a constructor from GirFFI::BaseTypeBuilder

Instance Method Details

#argument_ffi_typesObject



48
49
50
51
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 48

def argument_ffi_types
  @argument_ffi_types ||= info.argument_ffi_types.
    unshift(receiver_type_info.to_callback_ffitype)
end

#container_classObject



40
41
42
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 40

def container_class
  @container_class ||= Builder.build_class(container_info)
end

#container_infoObject



44
45
46
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 44

def container_info
  @container_info ||= info.container
end

#klassObject



20
21
22
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 20

def klass
  @klass ||= get_or_define_class container_class, @classname, CallbackBase
end

#mapping_method_definitionObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 24

def mapping_method_definition
  arg_infos = info.args
  arg_infos << ErrorArgumentInfo.new if info.throws?

  receiver_info = ReceiverArgumentInfo.new receiver_type_info
  return_value_info = ReturnValueInfo.new info.return_type

  MappingMethodBuilder.for_vfunc(receiver_info,
                                 arg_infos,
                                 return_value_info).method_definition
end

#receiver_type_infoObject



36
37
38
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 36

def receiver_type_info
  ReceiverTypeInfo.new(container_info)
end

#return_ffi_typeObject



53
54
55
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 53

def return_ffi_type
  @return_ffi_type ||= info.return_ffi_type
end

#setup_classObject



15
16
17
18
# File 'lib/gir_ffi/builders/vfunc_builder.rb', line 15

def setup_class
  setup_constants
  klass.class_eval mapping_method_definition
end