class GirFFI::Builders::BaseArgumentBuilder

Abstract parent class of the argument building classes. These classes are used by FunctionBuilder to create the code that processes each argument before and after the actual function call.

Constants

KEYWORDS

Attributes

arginfo[R]
array_arg[RW]
length_arg[RW]

Public Class Methods

new(var_gen, arginfo) click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 29
def initialize(var_gen, arginfo)
  @var_gen = var_gen
  @arginfo = arginfo
  @length_arg = nil
  @array_arg = nil
  @is_closure = false
end

Public Instance Methods

argument_class_name() click to toggle source

TODO: Use class rather than class name

# File lib/gir_ffi/builders/base_argument_builder.rb, line 55
def argument_class_name
  type_info.argument_class_name
end
array_length_idx() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 59
def array_length_idx
  type_info.array_length
end
call_argument_name() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 79
def call_argument_name
  @call_argument_name ||= new_variable
end
closure() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 63
def closure
  arginfo.closure
end
closure=(arg) click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 25
def closure=(arg)
  @is_closure = arg
end
closure?() click to toggle source

TODO: closure unfortunately means two things in GLib: a closure argument (user_data), and the Closure class (a callable object). Make the distinction more explicit in GirFFI.

# File lib/gir_ffi/builders/base_argument_builder.rb, line 21
def closure?
  @is_closure
end
direction() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 41
def direction
  @direction ||= arginfo.direction
end
name() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 37
def name
  @name ||= safe(arginfo.name)
end
new_variable() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 83
def new_variable
  @var_gen.new_var
end
ownership_transfer() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 67
def ownership_transfer
  arginfo.ownership_transfer
end
safe(name) click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 71
def safe(name)
  if KEYWORDS.include? name
    "#{name}_"
  else
    name
  end
end
specialized_type_tag() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 49
def specialized_type_tag
  # SMELL: Law of Demeter, due to this being arginfo.argument_type.flattened_tag
  type_info.flattened_tag
end
type_info() click to toggle source
# File lib/gir_ffi/builders/base_argument_builder.rb, line 45
def type_info
  @type_info ||= arginfo.argument_type
end