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.
# File lib/gir_ffi/builders/base_argument_builder.rb, line 20 def initialize var_gen, name, typeinfo, direction @var_gen = var_gen @typeinfo = typeinfo @direction = direction @name = safe(name) @inarg = nil @retname = nil @length_arg = nil @array_arg = nil @is_closure = false end
TODO: Use class rather than class name
# File lib/gir_ffi/builders/base_argument_builder.rb, line 45 def argument_class_name type_info.argument_class_name end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 49 def array_size if @length_arg @length_arg.retname else type_info.array_fixed_size end end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 73 def callarg @callarg ||= @var_gen.new_var end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 85 def cleanup [] end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 65 def inarg @array_arg.nil? ? @inarg : nil end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 89 def new_variable @var_gen.new_var end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 81 def post [] end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 77 def pre [] end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 69 def retval @array_arg.nil? ? retname : nil end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 57 def safe name if KEYWORDS.include? name "#{name}_" else name end end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 40 def specialized_type_tag type_info.flattened_tag end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 36 def type_info @typeinfo end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 119 def conversion_arguments name type_info.extra_conversion_arguments.map(&:inspect).push(name).join(", ") end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 95 def needs_outgoing_parameter_conversion? [ :array, :byte_array, :c, :error, :filename, :ghash, :glist, :gslist, :interface, :object, :ptr_array, :struct, :strv, :union, :utf8, :zero_terminated ].include?(specialized_type_tag) end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 101 def outgoing_conversion base args = output_conversion_arguments base case specialized_type_tag when :utf8, :filename "#{base}.to_utf8" else "#{argument_class_name}.wrap(#{args})" end end
# File lib/gir_ffi/builders/base_argument_builder.rb, line 111 def output_conversion_arguments arg if specialized_type_tag == :c "#{type_info.subtype_tag_or_class.inspect}, #{array_size}, #{arg}" else conversion_arguments arg end end