]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Support "foo is G"
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 11 Jan 2014 16:04:02 +0000 (17:04 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Sat, 11 Jan 2014 16:04:06 +0000 (17:04 +0100)
codegen/valaccodebasemodule.vala
tests/methods/generics.vala

index 4f049c1e67eea00e1067a4caad907f4f9991a7e1..488d434b1a034213b469ac13b377c782883e4c31 100644 (file)
@@ -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;
                }
        }
index b4655239a3b52a960db1ae11b21ec81ab2982826..27e9cc16e216a9da95ddca801a3cb014d834f3bb 100644 (file)
@@ -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> ());
 }