From: Rico Tzschichholz Date: Wed, 15 Jul 2020 15:46:58 +0000 (+0200) Subject: vala: Fully qualify member-access when using-directive was used to resolve X-Git-Tag: 0.49.1~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=866258f688d781f3536892b8f93abdd3112198ec;p=thirdparty%2Fvala.git vala: Fully qualify member-access when using-directive was used to resolve Fixes https://gitlab.gnome.org/GNOME/vala/issues/57 --- diff --git a/tests/girwriter/GirTest-1.0.gir-expected b/tests/girwriter/GirTest-1.0.gir-expected index d244862d0..e0d5128a1 100644 --- a/tests/girwriter/GirTest-1.0.gir-expected +++ b/tests/girwriter/GirTest-1.0.gir-expected @@ -656,6 +656,16 @@ + + + + + + + + + + diff --git a/tests/girwriter/girtest.vala b/tests/girwriter/girtest.vala index 23daab3d9..a63b6d4c3 100644 --- a/tests/girwriter/girtest.vala +++ b/tests/girwriter/girtest.vala @@ -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) { } diff --git a/tests/girwriter/girtest.vapi-expected b/tests/girwriter/girtest.vapi-expected index 16d5de559..b09de120d 100644 --- a/tests/girwriter/girtest.vapi-expected +++ b/tests/girwriter/girtest.vapi-expected @@ -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, ...); diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index db022fefd..02d3b50ad 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -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; } }