]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
girparser: Parse generic constraints
authorLorenz Wildberg <lorenz@wild-fisch.de>
Sat, 24 Jun 2023 14:31:32 +0000 (16:31 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 31 Jan 2024 17:49:07 +0000 (18:49 +0100)
vala/valagirparser.vala

index ed685cd7f11f46ec5f2a1222f600b836db2f36bf..66bfe8b57048c94b3306b6865887b09bf260884e 100644 (file)
@@ -1848,17 +1848,28 @@ public class Vala.GirParser : CodeVisitor {
                var type_parameters_length = type_parameters.length;
                GLib.StringBuilder current = new GLib.StringBuilder.sized (type_parameters_length);
 
+               string? constraint = null;
                for (var c = 0 ; c < type_parameters_length ; c++) {
                        if (type_parameters[c] == ',') {
                                var p = new TypeParameter (current.str, source_reference);
+                               if (constraint != null) {
+                                       p.add_type_constraint (parse_type_from_string (constraint, true, source_reference));
+                                       constraint = null;
+                               }
                                type_symbol.add_type_parameter (p);
                                current.truncate ();
+                       } else if (type_parameters[c] == ':') {
+                               constraint = current.str;
+                               current.truncate ();
                        } else {
                                current.append_unichar (type_parameters[c]);
                        }
                }
 
                var p = new TypeParameter (current.str, source_reference);
+               if (constraint != null) {
+                       p.add_type_constraint (parse_type_from_string (constraint, true, source_reference));
+               }
                type_symbol.add_type_parameter (p);
 
                return true;