377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
|
# File 'lib/gir_ffi/builder/argument.rb', line 377
def self.builder_for_field_getter var_gen, name, type
klass = case type.tag
when :void
if type.pointer?
RegularReturnValue
else
VoidReturnValue
end
when :interface
case type.interface.info_type
when :struct, :union, :interface, :object
InterfaceReturnValue
else
RegularReturnValue
end
when :array
if type.zero_terminated?
StrvReturnValue
else
case type.array_type
when :c
CArrayReturnValue
when :array
it = ReturnValue.new var_gen, name, type
it.extend WithTypedContainerPostMethod
return it
when :byte_array
ByteArrayReturnValue
else
PtrArrayReturnValue
end
end
when :glist, :gslist
it = ReturnValue.new var_gen, name, type
it.extend WithTypedContainerPostMethod
return it
when :ghash
it = ReturnValue.new var_gen, name, type
it.extend WithTypedContainerPostMethod
return it
when :utf8
Utf8ReturnValue
else
RegularReturnValue
end
klass.new var_gen, name, type
end
|