From 63ae7e3c8705aa77f4394bce502c082ca1df3a2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Billeter?= Date: Mon, 6 Aug 2012 15:15:10 +0200 Subject: Do not require explicit `this' to access generated to_string method Fixes bug 614424. --- vala/valamemberaccess.vala | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index 8b480e1f7..83441f4e9 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -267,6 +267,21 @@ public class Vala.MemberAccess : Expression { symbol_reference = SemanticAnalyzer.symbol_lookup_inherited (sym, member_name); + if (symbol_reference == null && may_access_instance_members) { + // used for generated to_string methods in enums + symbol_reference = this_parameter.variable_type.get_member (member_name); + + if (symbol_reference != null && is_instance_symbol (symbol_reference)) { + // implicit this + inner = new MemberAccess (null, "this", source_reference); + inner.value_type = this_parameter.variable_type.copy (); + inner.value_type.value_owned = false; + inner.symbol_reference = this_parameter; + + symbol_reference = inner.value_type.get_member (member_name); + } + } + if (symbol_reference == null) { if (sym is TypeSymbol) { // do not allow instance access to outer classes @@ -833,6 +848,20 @@ public class Vala.MemberAccess : Expression { return !error; } + static bool is_instance_symbol (Symbol symbol) { + if (symbol is Field && ((Field) symbol).binding == MemberBinding.INSTANCE) { + return true; + } else if (symbol is Method && !(symbol is CreationMethod) && ((Method) symbol).binding == MemberBinding.INSTANCE) { + return true; + } else if (symbol is Property && ((Property) symbol).binding == MemberBinding.INSTANCE) { + return true; + } else if (symbol is Signal) { + return true; + } else { + return false; + } + } + public void check_lvalue_access () { if (inner == null) { return; -- cgit v1.2.1