diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2019-03-10 22:16:45 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2019-03-22 22:01:39 +0100 |
commit | 0806e5d63b0131fb67aa8a58a61a6630aa593513 (patch) | |
tree | 020f72652265975ad7736e860afb3112a3ad1e13 | |
parent | f83ecd81d6ede886e1d2573c60da28b993db89e3 (diff) | |
download | vala-wip/limited-generics.tar.gz |
codegen: Don't apply strict generic-type rules on simple/limited genericswip/limited-generics
-rw-r--r-- | codegen/valaccodebasemodule.vala | 10 | ||||
-rw-r--r-- | 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 @@ -14,6 +14,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); } |