summaryrefslogtreecommitdiff
path: root/vala/valamemberaccess.vala
diff options
context:
space:
mode:
authorLuca Bruno <lucabru@src.gnome.org>2014-01-25 14:57:18 +0100
committerLuca Bruno <lucabru@src.gnome.org>2014-01-25 15:33:29 +0100
commit95d0aa0246edbbeade95afaa569243841507bd07 (patch)
treeb8bcfa2035be1e014ebb1fe1f4f5969b51b46d79 /vala/valamemberaccess.vala
parentfb6629c1462479cc5860227d67196394a7f504f6 (diff)
downloadvala-95d0aa0246edbbeade95afaa569243841507bd07.tar.gz
Fix calling methods on struct pointers
Fixes bug 686190
Diffstat (limited to 'vala/valamemberaccess.vala')
-rw-r--r--vala/valamemberaccess.vala13
1 files changed, 10 insertions, 3 deletions
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala
index af9f51f38..b0c48ee4f 100644
--- a/vala/valamemberaccess.vala
+++ b/vala/valamemberaccess.vala
@@ -891,10 +891,17 @@ public class Vala.MemberAccess : Expression {
var this_access = inner.symbol_reference is Parameter && inner.symbol_reference.name == "this";
var struct_or_array = (inner.value_type is StructValueType && !inner.value_type.nullable) || inner.value_type is ArrayType;
- if (instance && struct_or_array && (symbol_reference is Method || lvalue) && ((inner is MemberAccess && inner.symbol_reference is Variable) || inner is ElementAccess) && !this_access) {
+ var ma = inner as MemberAccess;
+ if (ma == null && struct_or_array && inner is PointerIndirection) {
+ // (*struct)->method()
+ ma = ((PointerIndirection) inner).inner as MemberAccess;
+ }
+
+ if (instance && struct_or_array && (symbol_reference is Method || lvalue) && ((ma != null && ma.symbol_reference is Variable) || inner is ElementAccess) && !this_access) {
inner.lvalue = true;
- if (inner is MemberAccess) {
- ((MemberAccess) inner).check_lvalue_access ();
+ if (ma != null) {
+ ma.lvalue = true;
+ ma.check_lvalue_access ();
}
}
}