class GirFFI::Builders::VFuncBuilder
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.
Public Instance Methods
argument_ffi_types()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 50 def argument_ffi_types @argument_ffi_types ||= info.argument_ffi_types. unshift(receiver_type_info.to_callback_ffi_type) end
container_class()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 42 def container_class @container_class ||= Builder.build_class(container_info) end
container_info()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 46 def container_info @container_info ||= info.container end
klass()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 20 def klass @klass ||= get_or_define_class container_class, @classname, CallbackBase end
mapping_method_definition()
click to toggle source
# 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, info.caller_owns, info.skip_return?) MappingMethodBuilder.for_vfunc(receiver_info, arg_infos, return_value_info).method_definition end
receiver_type_info()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 38 def receiver_type_info ReceiverTypeInfo.new(container_info) end
return_ffi_type()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 55 def return_ffi_type @return_ffi_type ||= info.return_ffi_type end
setup_class()
click to toggle source
# File lib/gir_ffi/builders/vfunc_builder.rb, line 15 def setup_class setup_constants klass.class_eval mapping_method_definition end