]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Allow underscores in type parameter names
authorSeverin Heiniger <severinheiniger@gmail.com>
Fri, 27 Jun 2014 05:12:14 +0000 (22:12 -0700)
committerRico Tzschichholz <ricotz@ubuntu.com>
Thu, 3 Nov 2016 21:35:48 +0000 (22:35 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=644938

codegen/valagobjectmodule.vala
tests/Makefile.am
tests/objects/bug644938.vala [new file with mode: 0644]

index d4b8887083add8d0e2fa7c447652f73a61d12234..33bb87805dc0c11748f59b53e4ce28626536cce1 100644 (file)
@@ -79,8 +79,11 @@ public class Vala.GObjectModule : GTypeModule {
                        CCodeConstant func_name_constant;
                        CCodeFunctionCall cinst, cspec;
 
-                       func_name = "%s_type".printf (type_param.name.ascii_down ());
-                       func_name_constant = new CCodeConstant ("\"%s-type\"".printf (type_param.name.ascii_down ()));
+                       var name_prefix = type_param.name.down ();
+                       var canonical_prefix = name_prefix.replace ("_", "-");
+
+                       func_name = "%s_type".printf (name_prefix);
+                       func_name_constant = new CCodeConstant ("\"%s-type\"".printf (canonical_prefix));
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), func_name).ascii_up ();
                        cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_install_property"));
                        cinst.add_argument (ccall);
@@ -96,8 +99,8 @@ public class Vala.GObjectModule : GTypeModule {
                        prop_enum.add_value (new CCodeEnumValue (enum_value));
 
 
-                       func_name = "%s_dup_func".printf (type_param.name.ascii_down ());
-                       func_name_constant = new CCodeConstant ("\"%s-dup-func\"".printf (type_param.name.ascii_down ()));
+                       func_name = "%s_dup_func".printf (name_prefix);
+                       func_name_constant = new CCodeConstant ("\"%s-dup-func\"".printf (canonical_prefix));
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), func_name).ascii_up ();
                        cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_install_property"));
                        cinst.add_argument (ccall);
@@ -112,8 +115,8 @@ public class Vala.GObjectModule : GTypeModule {
                        prop_enum.add_value (new CCodeEnumValue (enum_value));
 
 
-                       func_name = "%s_destroy_func".printf (type_param.name.ascii_down ());
-                       func_name_constant = new CCodeConstant ("\"%s-destroy-func\"".printf (type_param.name.ascii_down ()));
+                       func_name = "%s_destroy_func".printf (name_prefix);
+                       func_name_constant = new CCodeConstant ("\"%s-destroy-func\"".printf (canonical_prefix));
                        enum_value = "%s_%s".printf (get_ccode_lower_case_name (cl, null), func_name).ascii_up ();
                        cinst = new CCodeFunctionCall (new CCodeIdentifier ("g_object_class_install_property"));
                        cinst.add_argument (ccall);
index 2a2ea073ca606a5202e6d0f689f3cf9f2203e2e5..50d0e230fc3cb85eb1b3869eb73fd5b46f1fc53e 100644 (file)
@@ -170,6 +170,7 @@ TESTS = \
        objects/bug641828.vala \
        objects/bug642809.vala \
        objects/bug643711.vala \
+       objects/bug644938.vala \
        objects/bug646362.vala \
        objects/bug646792.vala \
        objects/bug647018.vala \
diff --git a/tests/objects/bug644938.vala b/tests/objects/bug644938.vala
new file mode 100644 (file)
index 0000000..eed56c8
--- /dev/null
@@ -0,0 +1,12 @@
+public abstract class Foo<TYPE_PARAM> : Object {
+       public abstract void method (TYPE_PARAM o);
+}
+
+public class Bar : Foo<int> {
+       public override void method (int i) {
+       }
+}
+
+void main () {
+       var bar = new Bar ();
+}