]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girparser: Remove all type arguments when using type_arguments metadata.
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 9 Nov 2010 10:53:48 +0000 (11:53 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Mon, 4 Apr 2011 13:14:40 +0000 (15:14 +0200)
vala/valagirparser.vala

index 4a59d88d6132aea5efcf35f4518228a22d7a1973..e26fbc1b2b93d63de8d81fe7beb8b61865081f0a 100644 (file)
@@ -1146,37 +1146,32 @@ public class Vala.GirParser : CodeVisitor {
                return str;
        }
 
+       /*
+        * The changed is a faster way to check whether the type has changed and it may affect the C declaration.
+        * If type arguments change, the C declaration is not affected.
+        */
        DataType? element_get_type (DataType orig_type, bool owned_by_default, out bool changed = null) {
-               if (&changed != null) {
-                       changed = false;
-               }
-
+               changed = false;
                var type = orig_type;
 
                if (metadata.has_argument (ArgumentType.TYPE)) {
                        var new_type = parse_type_from_string (metadata.get_string (ArgumentType.TYPE), owned_by_default, metadata.get_source_reference (ArgumentType.TYPE));
-                       if (&changed != null) {
-                               changed = true;
-                       }
+                       changed = true;
                        return new_type;
                }
 
-               if (metadata.has_argument (ArgumentType.TYPE_ARGUMENTS)) {
-                       parse_type_arguments_from_string (type, metadata.get_string (ArgumentType.TYPE_ARGUMENTS), metadata.get_source_reference (ArgumentType.TYPE_ARGUMENTS));
-                       if (&changed != null) {
-                               changed = true;
-                       }
-               }
-
                if (type is VoidType) {
                        return type;
                }
 
+               if (metadata.has_argument (ArgumentType.TYPE_ARGUMENTS)) {
+                       type.remove_all_type_arguments ();
+                       parse_type_arguments_from_string (type, metadata.get_string (ArgumentType.TYPE_ARGUMENTS), metadata.get_source_reference (ArgumentType.TYPE_ARGUMENTS));
+               }
+
                if (metadata.get_bool (ArgumentType.ARRAY)) {
                        type = new ArrayType (type, 1, type.source_reference);
-                       if (&changed != null) {
-                               changed = true;
-                       }
+                       changed = true;
                }
 
                if (owned_by_default) {