diff options
author | Luca Bruno <lucabru@src.gnome.org> | 2014-01-11 17:04:02 +0100 |
---|---|---|
committer | Luca Bruno <lucabru@src.gnome.org> | 2014-01-11 17:04:06 +0100 |
commit | e15a795130250de68c4ea9bf3205c58865732869 (patch) | |
tree | 29e677d94ca8a02522246cab5213183ff6c4f52f | |
parent | 58259ec0ef06548786a0d650c568267f5a6f0f17 (diff) | |
download | vala-e15a795130250de68c4ea9bf3205c58865732869.tar.gz |
codegen: Support "foo is G"
-rw-r--r-- | codegen/valaccodebasemodule.vala | 6 | ||||
-rw-r--r-- | tests/methods/generics.vala | 11 |
2 files changed, 14 insertions, 3 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 4f049c1e6..488d434b1 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -5349,13 +5349,13 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var type_domain = new CCodeIdentifier (get_ccode_upper_case_name (et.error_domain)); return new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, instance_domain, type_domain); } else { - string type_id = get_ccode_type_id (type.data_type); - if (type_id == "") { + var type_id = get_type_id_expression (type); + if (type_id == null) { return new CCodeInvalidExpression (); } var ccheck = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_CHECK_INSTANCE_TYPE")); ccheck.add_argument ((CCodeExpression) ccodenode); - ccheck.add_argument (new CCodeIdentifier (type_id)); + ccheck.add_argument (type_id); return ccheck; } } diff --git a/tests/methods/generics.vala b/tests/methods/generics.vala index b4655239a..27e9cc16e 100644 --- a/tests/methods/generics.vala +++ b/tests/methods/generics.vala @@ -4,6 +4,9 @@ interface Foo : Object { } } +class Bar { +} + class Baz : Object, Foo { } @@ -11,6 +14,11 @@ void foo<T> (owned T bar) { bar = null; } +bool is_check<G> () { + var o = new Bar (); + return o is G; +} + void main () { var bar = new Object (); foo<Object> (bar); @@ -19,4 +27,7 @@ void main () { var baz = new Baz (); baz.foo<Object> (bar); assert (baz.ref_count == 1); + + assert (is_check<Bar> ()); + assert (!is_check<Baz> ()); } |