/usr/lib/ruby/vendor_ruby/gir_ffi/builders/return_value_builder.rb is in ruby-gir-ffi 0.9.0-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | require 'gir_ffi/builders/base_argument_builder'
require 'gir_ffi/builders/full_c_to_ruby_convertor'
require 'gir_ffi/builders/closure_convertor'
module GirFFI
module Builders
# Implements building post-processing statements for return values.
class ReturnValueBuilder < BaseArgumentBuilder
def relevant?
!void_return_value? && !arginfo.skip?
end
def capture_variable_name
@capture_variable_name ||= new_variable if relevant?
end
def post_converted_name
@post_converted_name ||= if has_post_conversion?
new_variable
else
capture_variable_name
end
end
def return_value_name
post_converted_name if has_return_value_name?
end
def post_conversion
if has_post_conversion?
["#{post_converted_name} = #{post_convertor.conversion}"]
else
[]
end
end
private
def has_post_conversion?
closure? || type_info.needs_c_to_ruby_conversion_for_functions?
end
def post_convertor
@post_convertor ||= if closure?
ClosureConvertor.new(capture_variable_name)
else
FullCToRubyConvertor.new(type_info,
capture_variable_name,
length_argument_name)
end
end
def length_argument_name
length_arg && length_arg.post_converted_name
end
def void_return_value?
specialized_type_tag == :void && !type_info.pointer?
end
def has_return_value_name?
relevant? && !array_arg
end
end
end
end
|