gobject-introspection 3.3.2 → 3.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 826c2b9bde2fd70f03107d641276b32a9e9551580a397e221826866640c961f8
4
- data.tar.gz: '085ce0af6d0e7f303e42e9cac143267dfca387501c8106eb3a43a15b94498012'
3
+ metadata.gz: dc76064c1fdd49d5158174b7377a27e81db7c090894d67c8009c203155cc8a07
4
+ data.tar.gz: 478e324f530b7f64261ed38f61c3ba3095c5b4192b8c5aa1f660921f8116a911
5
5
  SHA512:
6
- metadata.gz: 1dab56c3339d34fc20f80b88f7c72c17f12e5f62abbe0d36b0475e9cfff5ca9c609d1be7ba534721e14cf2a28325b5d95dc3c9d168bbc0a373bc48189e05c517
7
- data.tar.gz: '0913ade6824ca87c14af059246a975c126ae86ba1451699a41c042007dab99421c15ab3c462b60ed148fa4f584d643542dffa7c4c5ce07057ab2ce7865730496'
6
+ metadata.gz: 66c719e89a49879e05930cd0d98487081ebbaee693b7b15c670436c07b89b84bf968b78354aca555f871dcc769eca9961043c56a0ea29a8bd65d0c61bd09f96f
7
+ data.tar.gz: 76c172765527cdabfca614a2728948b125b6043d0cc139b049e8b57f7303b0b71ec8adc301775b376129073ed765809421b9aa57156785e530915edc5337136c
@@ -48,8 +48,6 @@ require "mkmf-gnome2"
48
48
  :target_build_dir => build_dir)
49
49
  end
50
50
 
51
- setup_windows(module_name, base_dir)
52
-
53
51
  unless required_pkg_config_package(package_id,
54
52
  :alt_linux => "gobject-introspection-devel",
55
53
  :debian => "libgirepository1.0-dev",
@@ -1,6 +1,6 @@
1
1
  /* -*- c-file-style: "ruby"; indent-tabs-mode: nil -*- */
2
2
  /*
3
- * Copyright (C) 2012-2018 Ruby-GNOME2 Project Team
3
+ * Copyright (C) 2012-2019 Ruby-GNOME2 Project Team
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -580,7 +580,7 @@ rb_gi_array_argument_to_ruby(GIArgument *array_argument,
580
580
  {
581
581
  VALUE rb_array;
582
582
  GIArrayType array_type;
583
- gint n_elements;
583
+ gint64 n_elements;
584
584
 
585
585
  array_type = g_type_info_get_array_type(array_type_info);
586
586
  n_elements = get_array_length(length_argument, length_type_info);
@@ -1513,9 +1513,11 @@ rb_gi_out_argument_init_array_array_interface(GIArgument *argument,
1513
1513
  break;
1514
1514
  case GI_INFO_TYPE_STRUCT:
1515
1515
  {
1516
- gsize struct_size;
1516
+ gsize raw_struct_size;
1517
+ guint struct_size;
1517
1518
 
1518
- struct_size = g_struct_info_get_size(interface_info);
1519
+ raw_struct_size = g_struct_info_get_size(interface_info);
1520
+ struct_size = (guint)raw_struct_size;
1519
1521
  argument->v_pointer = g_array_new(zero_terminated_p,
1520
1522
  TRUE,
1521
1523
  struct_size);
@@ -3658,10 +3660,10 @@ set_in_array_length_argument(GIArgument *argument,
3658
3660
  argument->v_uint16 = length;
3659
3661
  break;
3660
3662
  case GI_TYPE_TAG_INT32:
3661
- argument->v_int32 = length;
3663
+ argument->v_int32 = (gint32)length;
3662
3664
  break;
3663
3665
  case GI_TYPE_TAG_UINT32:
3664
- argument->v_uint32 = length;
3666
+ argument->v_uint32 = (guint32)length;
3665
3667
  break;
3666
3668
  case GI_TYPE_TAG_INT64:
3667
3669
  argument->v_int64 = length;
@@ -3696,7 +3698,7 @@ set_in_array_boolean_arguments_from_ruby(GIArgument *array_argument,
3696
3698
  VALUE rb_boolean_array)
3697
3699
  {
3698
3700
  gboolean *booleans;
3699
- gint i, n_args;
3701
+ long i, n_args;
3700
3702
 
3701
3703
  n_args = RARRAY_LEN(rb_boolean_array);
3702
3704
  booleans = ALLOC_N(gboolean, n_args);
@@ -3712,7 +3714,7 @@ set_in_array_int8_arguments_from_ruby(GIArgument *array_argument,
3712
3714
  VALUE rb_number_array)
3713
3715
  {
3714
3716
  gint8 *numbers;
3715
- gint i, n_args;
3717
+ long i, n_args;
3716
3718
 
3717
3719
  n_args = RARRAY_LEN(rb_number_array);
3718
3720
  numbers = ALLOC_N(gint8, n_args);
@@ -3728,7 +3730,7 @@ set_in_array_uint8_arguments_from_ruby(GIArgument *array_argument,
3728
3730
  VALUE rb_number_array)
3729
3731
  {
3730
3732
  guint8 *numbers;
3731
- gint i, n_args;
3733
+ long i, n_args;
3732
3734
 
3733
3735
  n_args = RARRAY_LEN(rb_number_array);
3734
3736
  numbers = ALLOC_N(guint8, n_args);
@@ -3744,7 +3746,7 @@ set_in_array_int16_arguments_from_ruby(GIArgument *array_argument,
3744
3746
  VALUE rb_number_array)
3745
3747
  {
3746
3748
  gint16 *numbers;
3747
- gint i, n_args;
3749
+ long i, n_args;
3748
3750
 
3749
3751
  n_args = RARRAY_LEN(rb_number_array);
3750
3752
  numbers = ALLOC_N(gint16, n_args);
@@ -3760,7 +3762,7 @@ set_in_array_uint16_arguments_from_ruby(GIArgument *array_argument,
3760
3762
  VALUE rb_number_array)
3761
3763
  {
3762
3764
  guint16 *numbers;
3763
- gint i, n_args;
3765
+ long i, n_args;
3764
3766
 
3765
3767
  n_args = RARRAY_LEN(rb_number_array);
3766
3768
  numbers = ALLOC_N(guint16, n_args);
@@ -3776,7 +3778,7 @@ set_in_array_int32_arguments_from_ruby(GIArgument *array_argument,
3776
3778
  VALUE rb_number_array)
3777
3779
  {
3778
3780
  gint32 *numbers;
3779
- gint i, n_args;
3781
+ long i, n_args;
3780
3782
 
3781
3783
  n_args = RARRAY_LEN(rb_number_array);
3782
3784
  numbers = ALLOC_N(gint32, n_args);
@@ -3792,7 +3794,7 @@ set_in_array_uint32_arguments_from_ruby(GIArgument *array_argument,
3792
3794
  VALUE rb_number_array)
3793
3795
  {
3794
3796
  guint32 *numbers;
3795
- gint i, n_args;
3797
+ long i, n_args;
3796
3798
 
3797
3799
  n_args = RARRAY_LEN(rb_number_array);
3798
3800
  numbers = ALLOC_N(guint32, n_args);
@@ -3808,7 +3810,7 @@ set_in_array_int64_arguments_from_ruby(GIArgument *array_argument,
3808
3810
  VALUE rb_number_array)
3809
3811
  {
3810
3812
  gint64 *numbers;
3811
- gint i, n_args;
3813
+ long i, n_args;
3812
3814
 
3813
3815
  n_args = RARRAY_LEN(rb_number_array);
3814
3816
  numbers = ALLOC_N(gint64, n_args);
@@ -3824,7 +3826,7 @@ set_in_array_uint64_arguments_from_ruby(GIArgument *array_argument,
3824
3826
  VALUE rb_number_array)
3825
3827
  {
3826
3828
  guint64 *numbers;
3827
- gint i, n_args;
3829
+ long i, n_args;
3828
3830
 
3829
3831
  n_args = RARRAY_LEN(rb_number_array);
3830
3832
  numbers = ALLOC_N(guint64, n_args);
@@ -3840,7 +3842,7 @@ set_in_array_float_arguments_from_ruby(GIArgument *array_argument,
3840
3842
  VALUE rb_number_array)
3841
3843
  {
3842
3844
  gfloat *numbers;
3843
- gint i, n_args;
3845
+ long i, n_args;
3844
3846
 
3845
3847
  n_args = RARRAY_LEN(rb_number_array);
3846
3848
  numbers = ALLOC_N(gfloat, n_args);
@@ -3856,7 +3858,7 @@ set_in_array_double_arguments_from_ruby(GIArgument *array_argument,
3856
3858
  VALUE rb_number_array)
3857
3859
  {
3858
3860
  gdouble *numbers;
3859
- gint i, n_args;
3861
+ long i, n_args;
3860
3862
 
3861
3863
  n_args = RARRAY_LEN(rb_number_array);
3862
3864
  numbers = ALLOC_N(gdouble, n_args);
@@ -3872,7 +3874,7 @@ set_in_array_gtype_arguments_from_ruby(GIArgument *array_argument,
3872
3874
  VALUE rb_class_array)
3873
3875
  {
3874
3876
  GType *types;
3875
- gint i, n_args;
3877
+ long i, n_args;
3876
3878
 
3877
3879
  n_args = RARRAY_LEN(rb_class_array);
3878
3880
  types = ALLOC_N(GType, n_args);
@@ -3886,7 +3888,7 @@ set_in_array_gtype_arguments_from_ruby(GIArgument *array_argument,
3886
3888
  typedef struct {
3887
3889
  GIStructInfo *struct_info;
3888
3890
  VALUE rb_argument;
3889
- gint n_args;
3891
+ long n_args;
3890
3892
  gchar *values;
3891
3893
  } ArrayInterfaceStructFromRubyData;
3892
3894
 
@@ -3947,7 +3949,7 @@ set_in_array_interface_struct_arguments_from_ruby(GIArgument *array_argument,
3947
3949
 
3948
3950
  typedef struct {
3949
3951
  VALUE rb_argument;
3950
- gint n_args;
3952
+ long n_args;
3951
3953
  gpointer *values;
3952
3954
  } ArrayInterfaceObjectFromRubyData;
3953
3955
 
@@ -317,7 +317,8 @@ rb_gi_callback_free(RBGICallback *callback)
317
317
  }
318
318
 
319
319
  static void
320
- rb_gi_callback_data_weak_notify(gpointer data, GObject* where_the_object_was)
320
+ rb_gi_callback_data_weak_notify(gpointer data,
321
+ G_GNUC_UNUSED GObject *where_the_object_was)
321
322
  {
322
323
  RBGICallbackData *callback_data = data;
323
324
  callback_data->owner = NULL;
@@ -1084,7 +1085,7 @@ ffi_closure_callback(G_GNUC_UNUSED ffi_cif *cif,
1084
1085
  rb_results = rb_funcallv(callback_data->rb_callback,
1085
1086
  id_call,
1086
1087
  rb_args->len,
1087
- (VALUE *)(rb_args->data));
1088
+ (VALUE *)(void *)(rb_args->data));
1088
1089
  g_array_free(rb_args, TRUE);
1089
1090
  }
1090
1091
 
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2013 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2012-2019 Ruby-GNOME2 Project Team
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -48,13 +48,16 @@ module GObjectIntrospection
48
48
  end
49
49
  GLib::Log.set_log_domain(GObjectIntrospection::LOG_DOMAIN)
50
50
 
51
- require "gobject-introspection/repository"
52
51
  require "gobject-introspection/arg-info"
52
+ require "gobject-introspection/boxed-info"
53
53
  require "gobject-introspection/callable-info"
54
- require "gobject-introspection/object-info"
55
54
  require "gobject-introspection/interface-info"
55
+ require "gobject-introspection/object-info"
56
+ require "gobject-introspection/registered-type-info"
57
+ require "gobject-introspection/repository"
56
58
  require "gobject-introspection/struct-info"
57
- require "gobject-introspection/boxed-info"
59
+ require "gobject-introspection/type-info"
58
60
  require "gobject-introspection/union-info"
61
+
59
62
  require "gobject-introspection/version"
60
63
  require "gobject-introspection/loader"
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2018 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2012-2019 Ruby-GNOME2 Project Team
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -82,14 +82,11 @@ module GObjectIntrospection
82
82
 
83
83
  def define_module_function(target_module, name, function_info)
84
84
  function_info.unlock_gvl = should_unlock_gvl?(function_info, target_module)
85
- method_name = "#{target_module}\#.#{name}"
86
- arguments_builder = ArgumentsBuilder.new(function_info, method_name)
85
+ full_method_name = "#{target_module}\#.#{name}"
86
+ invoker = Invoker.new(function_info, name, full_method_name)
87
87
  target_module.module_eval do
88
88
  define_method(name) do |*arguments, &block|
89
- arguments_builder.build(arguments, block)
90
- arguments = arguments_builder.arguments
91
- block = arguments_builder.block
92
- function_info.invoke(arguments, &block)
89
+ invoker.invoke(nil, arguments, block)
93
90
  end
94
91
  module_function(name)
95
92
  end
@@ -97,18 +94,9 @@ module GObjectIntrospection
97
94
 
98
95
  def define_singleton_method(klass, name, info)
99
96
  info.unlock_gvl = should_unlock_gvl?(info, klass)
100
- arguments_builder = ArgumentsBuilder.new(info, "#{klass}.#{name}")
101
- require_callback_p = info.require_callback?
102
- singleton_class = (class << klass; self; end)
103
- singleton_class.__send__(:define_method, name) do |*arguments, &block|
104
- arguments_builder.build(arguments, block)
105
- arguments = arguments_builder.arguments
106
- block = arguments_builder.block
107
- if block.nil? and require_callback_p
108
- to_enum(name, *arguments)
109
- else
110
- info.invoke(arguments, &block)
111
- end
97
+ invoker = Invoker.new(info, name, "#{klass}.#{name}")
98
+ klass.singleton_class.__send__(:define_method, name) do |*arguments, &block|
99
+ invoker.invoke(nil, arguments, block)
112
100
  end
113
101
  end
114
102
 
@@ -309,12 +297,9 @@ module GObjectIntrospection
309
297
  infos.each do |info|
310
298
  name = "initialize_#{info.name}"
311
299
  info.unlock_gvl = should_unlock_gvl?(info, klass)
312
- arguments_builder = ArgumentsBuilder.new(info, "#{klass}\##{name}")
300
+ invoker = Invoker.new(info, name, "#{klass}\##{name}")
313
301
  klass.__send__(:define_method, name) do |*arguments, &block|
314
- arguments_builder.build(arguments, block)
315
- arguments = arguments_builder.arguments
316
- block = arguments_builder.block
317
- info.invoke(self, arguments, &block)
302
+ invoker.invoke(self, arguments, block)
318
303
  call_initialize_post.call(self)
319
304
  end
320
305
  klass.__send__(:private, name)
@@ -365,75 +350,10 @@ module GObjectIntrospection
365
350
  raise ArgumentError, "wrong number of arguments (#{detail})"
366
351
  end
367
352
 
368
- def match_type?(type_info, value)
369
- case type_info.tag
370
- when TypeTag::BOOLEAN
371
- value == true or value == false
372
- when TypeTag::INT8,
373
- TypeTag::UINT8,
374
- TypeTag::INT16,
375
- TypeTag::UINT16,
376
- TypeTag::INT32,
377
- TypeTag::UINT32,
378
- TypeTag::INT64,
379
- TypeTag::UINT64,
380
- TypeTag::FLOAT,
381
- TypeTag::DOUBLE
382
- value.is_a?(Numeric)
383
- when TypeTag::GTYPE
384
- value.is_a?(GLib::Type)
385
- when TypeTag::UTF8
386
- value.is_a?(String)
387
- when TypeTag::FILENAME
388
- value.is_a?(String)
389
- when TypeTag::ARRAY
390
- element_type_info = type_info.get_param_type(0)
391
- value.is_a?(Array) and value.all? {|v| match_type?(element_type_info, v)}
392
- when TypeTag::INTERFACE
393
- interface = type_info.interface
394
- case interface.type
395
- when InfoType::STRUCT
396
- match_type_interface_struct?(interface, value)
397
- when InfoType::OBJECT,
398
- InfoType::INTERFACE,
399
- InfoType::FLAGS,
400
- InfoType::ENUM
401
- value.is_a?(interface.gtype.to_class)
402
- else
403
- # TODO
404
- false
405
- end
406
- when TypeTag::GLIST,
407
- TypeTag::GSLIST
408
- element_type_info = type_info.get_param_type(0)
409
- value.is_a?(Array) and value.all? {|v| match_type?(element_type_info, v)}
410
- else
411
- # TODO
412
- false
413
- end
414
- end
415
-
416
- def match_type_interface_struct?(interface, value)
417
- gtype = interface.gtype
418
- case gtype.name
419
- when "void"
420
- # TODO
421
- false
422
- when "CairoSurface"
423
- if Object.const_defined?(:Cairo)
424
- value.is_a?(Cairo::Surface)
425
- else
426
- false
427
- end
428
- else
429
- value.is_a?(gtype.to_class)
430
- end
431
- end
432
-
433
353
  def match_argument?(arg_info, argument)
434
354
  return true if argument.nil? and arg_info.may_be_null?
435
355
 
436
- match_type?(arg_info.type, argument)
356
+ arg_info.type.match?(argument)
437
357
  end
438
358
 
439
359
  def rubyish_method_name(function_info, options={})
@@ -604,29 +524,9 @@ module GObjectIntrospection
604
524
  def define_method(info, klass, method_name)
605
525
  info.unlock_gvl = should_unlock_gvl?(info, klass)
606
526
  remove_existing_method(klass, method_name)
607
- function_info_p = (info.class == FunctionInfo)
608
- have_return_value_p = info.have_return_value?
609
- arguments_builder = ArgumentsBuilder.new(info, "#{klass}\##{method_name}")
610
- require_callback_p = info.require_callback?
527
+ invoker = Invoker.new(info, method_name, "#{klass}\##{method_name}")
611
528
  klass.__send__(:define_method, method_name) do |*arguments, &block|
612
- arguments.unshift(self) if function_info_p
613
- arguments_builder.build(arguments, block)
614
- arguments = arguments_builder.arguments
615
- block = arguments_builder.block
616
- if block.nil? and require_callback_p
617
- to_enum(method_name, *arguments)
618
- else
619
- if function_info_p
620
- return_value = info.invoke(arguments, &block)
621
- else
622
- return_value = info.invoke(self, arguments, &block)
623
- end
624
- if have_return_value_p
625
- return_value
626
- else
627
- self
628
- end
629
- end
529
+ invoker.invoke(self, arguments, block)
630
530
  end
631
531
  end
632
532
 
@@ -677,31 +577,48 @@ module GObjectIntrospection
677
577
  load_methods(info, klass)
678
578
  end
679
579
 
680
- class ArgumentsBuilder
681
- attr_reader :arguments
682
- attr_reader :block
683
- def initialize(info, method_name)
580
+ class Invoker
581
+ def initialize(info, method_name, full_method_name)
684
582
  @info = info
685
583
  @method_name = method_name
686
-
584
+ @full_method_name = full_method_name
687
585
  @prepared = false
688
-
689
- @arguments = nil
690
- @block = nil
691
586
  end
692
587
 
693
- def build(arguments, block)
694
- prepare
588
+ def invoke(receiver, arguments, block)
589
+ ensure_prepared
695
590
 
696
- @arguments = arguments
697
- @block = block
591
+ if receiver and @function_info_p
592
+ arguments.unshift(receiver)
593
+ end
698
594
 
699
- build_arguments
700
- validate_arguments
595
+ arguments, block = build(receiver, arguments, block)
596
+ unless valid?(arguments)
597
+ if @on_invalid == :fallback
598
+ return @value_on_invalid
599
+ else
600
+ raise ArgumentError, invalid_error_message(invoke_arguments)
601
+ end
602
+ end
603
+
604
+ if block.nil? and @require_callback_p
605
+ receiver.to_enum(@method_name, *arguments)
606
+ else
607
+ if @function_info_p
608
+ return_value = @info.invoke(arguments, &block)
609
+ else
610
+ return_value = @info.invoke(receiver, arguments, &block)
611
+ end
612
+ if @have_return_value_p
613
+ return_value
614
+ else
615
+ receiver
616
+ end
617
+ end
701
618
  end
702
619
 
703
620
  private
704
- def prepare
621
+ def ensure_prepared
705
622
  return if @prepared
706
623
 
707
624
  @in_args = @info.in_args
@@ -715,40 +632,70 @@ module GObjectIntrospection
715
632
  end
716
633
  @valid_n_args_range = (@n_required_in_args..@n_in_args)
717
634
 
635
+ @in_arg_types = []
636
+ @in_arg_nil_indexes = []
637
+ @in_args.each_with_index do |arg, i|
638
+ @in_arg_types << arg.type
639
+ @in_arg_nil_indexes << i if arg.may_be_null?
640
+ end
641
+
642
+ @function_info_p = (@info.class == FunctionInfo)
643
+ @have_return_value_p = @info.have_return_value?
644
+ @require_callback_p = @info.require_callback?
645
+
646
+ prepare_on_invalid
647
+
718
648
  @prepared = true
719
649
  end
720
650
 
721
- def build_arguments
722
- if @block and @last_in_arg_is_gclosure
723
- @arguments << @block
724
- @block = nil
651
+ def prepare_on_invalid
652
+ case @method_name
653
+ when "=="
654
+ @value_on_invalid = false
655
+ @on_invalid = :fallback
656
+ when "!="
657
+ @value_on_invalid = true
658
+ @on_invalid = :fallback
659
+ else
660
+ @on_invalid = :raise
725
661
  end
662
+ end
726
663
 
727
- n_missing_arguments = @n_in_args - @arguments.size
728
- if n_missing_arguments > 0
729
- nil_indexes = []
730
- @in_args.each_with_index do |arg, i|
731
- nil_indexes << i if arg.may_be_null?
732
- end
733
- return if nil_indexes.size < n_missing_arguments
734
- nil_indexes.each_with_index do |nil_index, i|
664
+ def build(receiver, arguments, block)
665
+ if block and @last_in_arg_is_gclosure
666
+ arguments << block
667
+ block = nil
668
+ end
669
+
670
+ n_missing_arguments = @n_in_args - arguments.size
671
+ if 0 < n_missing_arguments
672
+ @in_arg_nil_indexes.each_with_index do |nil_index, i|
735
673
  next if i <= n_missing_arguments
736
- @arguments.insert(nil_index, nil)
674
+ arguments.insert(nil_index, nil)
737
675
  end
738
676
  end
677
+
678
+ return arguments, block
739
679
  end
740
680
 
741
- def validate_arguments
742
- return if @valid_n_args_range.cover?(@arguments.size)
681
+ def valid?(arguments)
682
+ return false unless @valid_n_args_range.cover?(arguments.size)
683
+ if @on_invalid == :fallback
684
+ arguments.zip(@in_arg_types) do |argument, type|
685
+ return false unless type.match?(argument)
686
+ end
687
+ end
688
+ true
689
+ end
743
690
 
744
- detail = "#{@arguments.size} for "
691
+ def invalid_error_message(argumetns)
692
+ detail = "#{arguments.size} for "
745
693
  if @n_in_args == @n_required_in_args
746
694
  detail << "#{@n_in_args}"
747
695
  else
748
696
  detail << "#{@n_required_in_args}..#{@n_in_args}"
749
697
  end
750
- message = "#{@method_name}: wrong number of arguments (#{detail})"
751
- raise ArgumentError, message
698
+ "#{@full_method_name}: wrong number of arguments (#{detail})"
752
699
  end
753
700
  end
754
701
  end
@@ -0,0 +1,23 @@
1
+ # Copyright (C) 2019 Ruby-GNOME2 Project Team
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+
17
+ module GObjectIntrospection
18
+ class RegisteredTypeInfo
19
+ def match?(value)
20
+ value.is_a?(gtype.to_class)
21
+ end
22
+ end
23
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012 Ruby-GNOME2 Project Team
1
+ # Copyright (C) 2012-2019 Ruby-GNOME2 Project Team
2
2
  #
3
3
  # This library is free software; you can redistribute it and/or
4
4
  # modify it under the terms of the GNU Lesser General Public
@@ -24,5 +24,21 @@ module GObjectIntrospection
24
24
 
25
25
  collection_reader("fields")
26
26
  collection_reader("methods")
27
+
28
+ def match?(value)
29
+ case gtype.name
30
+ when "void"
31
+ # TODO
32
+ false
33
+ when "CairoSurface"
34
+ if Object.const_defined?(:Cairo)
35
+ value.is_a?(Cairo::Surface)
36
+ else
37
+ false
38
+ end
39
+ else
40
+ super
41
+ end
42
+ end
27
43
  end
28
44
  end
@@ -0,0 +1,55 @@
1
+ # Copyright (C) 2019 Ruby-GNOME2 Project Team
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
+
17
+ module GObjectIntrospection
18
+ class TypeInfo
19
+ def match?(value)
20
+ case tag
21
+ when TypeTag::BOOLEAN
22
+ value == true or value == false
23
+ when TypeTag::INT8,
24
+ TypeTag::UINT8,
25
+ TypeTag::INT16,
26
+ TypeTag::UINT16,
27
+ TypeTag::INT32,
28
+ TypeTag::UINT32,
29
+ TypeTag::INT64,
30
+ TypeTag::UINT64,
31
+ TypeTag::FLOAT,
32
+ TypeTag::DOUBLE
33
+ value.is_a?(Numeric)
34
+ when TypeTag::GTYPE
35
+ value.is_a?(GLib::Type)
36
+ when TypeTag::UTF8
37
+ value.is_a?(String)
38
+ when TypeTag::FILENAME
39
+ value.is_a?(String)
40
+ when TypeTag::ARRAY
41
+ element_type_info = get_param_type(0)
42
+ value.is_a?(Array) and value.all? {|v| element_type_info.match?(v)}
43
+ when TypeTag::INTERFACE
44
+ interface.match?(value)
45
+ when TypeTag::GLIST,
46
+ TypeTag::GSLIST
47
+ element_type_info = get_param_type(0)
48
+ value.is_a?(Array) and value.all? {|v| element_type_info.match?(v)}
49
+ else
50
+ # TODO
51
+ false
52
+ end
53
+ end
54
+ end
55
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gobject-introspection
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.2
4
+ version: 3.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Ruby-GNOME2 Project Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-02 00:00:00.000000000 Z
11
+ date: 2019-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glib2
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 3.3.2
19
+ version: 3.3.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 3.3.2
26
+ version: 3.3.3
27
27
  description: Ruby/GObjectIntrospection provides bindings of GObject Introspection
28
28
  and a loader module that can generate dynamically Ruby bindings of any GObject C
29
29
  libraries
@@ -85,8 +85,10 @@ files:
85
85
  - lib/gobject-introspection/interface-info.rb
86
86
  - lib/gobject-introspection/loader.rb
87
87
  - lib/gobject-introspection/object-info.rb
88
+ - lib/gobject-introspection/registered-type-info.rb
88
89
  - lib/gobject-introspection/repository.rb
89
90
  - lib/gobject-introspection/struct-info.rb
91
+ - lib/gobject-introspection/type-info.rb
90
92
  - lib/gobject-introspection/union-info.rb
91
93
  - lib/gobject-introspection/version.rb
92
94
  - test/gobject-introspection-test-utils.rb