Sha256: 62d0aad5069a0903e29e2984646a1e2f55e2e7d7025131afe3e837b5c2c9b340

Contents?: true

Size: 1.25 KB

Versions: 6

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true
require 'gir_ffi/builders/base_return_value_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 < BaseReturnValueBuilder
      def post_conversion
        result = []
        if has_post_conversion?
          result << "#{post_converted_name} = #{post_convertor.conversion}"
        end
        result
      end

      def has_post_conversion?
        closure? || needs_c_to_ruby_conversion?
      end

      def needs_c_to_ruby_conversion?
        type_info.needs_c_to_ruby_conversion_for_functions?
      end

      private

      def post_convertor
        @post_convertor ||=
          if closure?
            ClosureConvertor.new(capture_variable_name)
          else
            FullCToRubyConvertor.new(type_info,
                                     capture_variable_name,
                                     length_argument_name,
                                     ownership_transfer: arginfo.ownership_transfer)
          end
      end

      def length_argument_name
        length_arg && length_arg.post_converted_name
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gir_ffi-0.11.1 lib/gir_ffi/builders/return_value_builder.rb
gir_ffi-0.11.0 lib/gir_ffi/builders/return_value_builder.rb
gir_ffi-0.10.2 lib/gir_ffi/builders/return_value_builder.rb
gir_ffi-0.10.1 lib/gir_ffi/builders/return_value_builder.rb
gir_ffi-0.10.0 lib/gir_ffi/builders/return_value_builder.rb
gir_ffi-0.10.0.pre1 lib/gir_ffi/builders/return_value_builder.rb