]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Fully qualify member-access when using-directive was used to resolve
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 15 Jul 2020 15:46:58 +0000 (17:46 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 15 Jul 2020 15:46:58 +0000 (17:46 +0200)
Fixes https://gitlab.gnome.org/GNOME/vala/issues/57

tests/girwriter/GirTest-1.0.gir-expected
tests/girwriter/girtest.vala
tests/girwriter/girtest.vapi-expected
vala/valamemberaccess.vala

index d244862d026a7864d9e2d5dd5751744823f2b93a..e0d5128a17baf05d98e805d6d4093307938c2ab6 100644 (file)
                                <type name="none"/>
                        </return-value>
                </virtual-method>
+               <method name="method_with_default" c:identifier="gir_test_object_test_method_with_default">
+                       <return-value transfer-ownership="full">
+                               <type name="none"/>
+                       </return-value>
+                       <parameters>
+                               <parameter name="i" transfer-ownership="none">
+                                       <type name="gint" c:type="gint"/>
+                               </parameter>
+                       </parameters>
+               </method>
                <method name="skipped_method" c:identifier="gir_test_object_test_skipped_method" introspectable="0">
                        <return-value transfer-ownership="full">
                                <type name="none"/>
index 23daab3d91f4cc361aa1f9c8eb0be5cc105eebfd..a63b6d4c38e7b1a434953a9290f83615b9d87c5e 100644 (file)
@@ -257,6 +257,9 @@ namespace GirTest {
                public virtual void method_throw () throws ErrorTest {
                }
 
+               public void method_with_default (int i = Priority.HIGH) {
+               }
+
                public virtual signal void signal_with_default_handlder (int i1) {
                }
 
index 16d5de559e9e4b0dad3223643a1676f4c0013bf6..b09de120d601383f08ef63ce1a5517369ce49eda 100644 (file)
@@ -68,6 +68,7 @@ namespace GirTest {
                public virtual void method_throw () throws GirTest.ErrorTest;
                public void method_valist (int param, va_list vargs);
                public void method_varargs (int param, ...);
+               public void method_with_default (int i = GLib.Priority.HIGH);
                public virtual void method_with_default_impl (int8 param);
                public ObjectTest.new_valist (int param, va_list vargs);
                public ObjectTest.newv (int param, ...);
index db022fefd4b97cf38097d9b3c03890a45c754d2c..02d3b50ad7f2613509c4d1e3b707f866463e190e 100644 (file)
@@ -337,6 +337,17 @@ public class Vala.MemberAccess : Expression {
                                                        Report.error (source_reference, "`%s' is an ambiguous reference between `%s' and `%s'".printf (member_name, symbol_reference.get_full_name (), local_sym.get_full_name ()));
                                                        return false;
                                                }
+
+                                               // Transform to fully qualified member access
+                                               unowned Symbol? inner_sym = local_sym.parent_symbol;
+                                               unowned MemberAccess? inner_ma = this;
+                                               while (inner_sym != null && inner_sym.name != null) {
+                                                       inner_ma.inner = new MemberAccess (null, inner_sym.name, source_reference);
+                                                       inner_ma = (MemberAccess) inner_ma.inner;
+                                                       inner_sym = inner_sym.parent_symbol;
+                                               }
+                                               inner.check (context);
+
                                                symbol_reference = local_sym;
                                        }
                                }