[vala/wip/limited-generics: 35/35] codegen: Don't apply strict generic-type rules on simple/limited generics



commit 0806e5d63b0131fb67aa8a58a61a6630aa593513
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Sun Mar 10 22:16:45 2019 +0100

    codegen: Don't apply strict generic-type rules on simple/limited generics

 codegen/valaccodebasemodule.vala                 | 10 ++++++++--
 tests/generics/parameter-sizeof-initializer.vala |  4 ++++
 2 files changed, 12 insertions(+), 2 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 7b34ec7af..6b951a16f 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -4325,8 +4325,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
        }
 
        bool is_limited_generic_type (GenericType type) {
-               var cl = type.type_parameter.parent_symbol as Class;
-               var st = type.type_parameter.parent_symbol as Struct;
+               return has_limited_generics (type.type_parameter.parent_symbol);
+       }
+
+       bool has_limited_generics (Symbol sym) {
+               unowned Class? cl = sym as Class;
+               unowned Struct? st = sym as Struct;
                if ((cl != null && cl.is_compact) || st != null) {
                        // compact classes and structs only
                        // have very limited generics support
@@ -4660,6 +4664,8 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                    || is_signed_integer_type_argument (type_arg)
                    || is_unsigned_integer_type_argument (type_arg)) {
                        // no error
+               } else if (has_limited_generics (((DataType) type_arg.parent_node).data_type)) {
+                       // no error
                } else if (type_arg is DelegateType) {
                        var delegate_type = (DelegateType) type_arg;
                        if (delegate_type.delegate_symbol.has_target) {
diff --git a/tests/generics/parameter-sizeof-initializer.vala 
b/tests/generics/parameter-sizeof-initializer.vala
index 1dcc56e1a..0797d2449 100644
--- a/tests/generics/parameter-sizeof-initializer.vala
+++ b/tests/generics/parameter-sizeof-initializer.vala
@@ -13,6 +13,10 @@ void main () {
        {
                var garray = new GLib.Array<uint32> ();
        }
+       {
+               var foo = new Foo<int64> (sizeof (int64));
+               foo.bar (8);
+       }
        {
                var foo = new Foo<uint32> (sizeof (uint32));
                foo.bar (4);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]