diff options
-rw-r--r-- | vala/valamemberaccess.vala | 2 | ||||
-rw-r--r-- | vala/valaparser.vala | 6 | ||||
-rw-r--r-- | vala/valapointertype.vala | 14 |
3 files changed, 20 insertions, 2 deletions
diff --git a/vala/valamemberaccess.vala b/vala/valamemberaccess.vala index 2ada89a96..82570b002 100644 --- a/vala/valamemberaccess.vala +++ b/vala/valamemberaccess.vala @@ -292,7 +292,7 @@ public class Vala.MemberAccess : Expression { return false; } - if (pointer_member_access) { + if (inner.value_type is PointerType) { var pointer_type = inner.value_type as PointerType; if (pointer_type != null && pointer_type.base_type is ValueType) { // transform foo->bar to (*foo).bar diff --git a/vala/valaparser.vala b/vala/valaparser.vala index b5b85cf71..391bbb453 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -628,7 +628,11 @@ public class Vala.Parser : CodeVisitor { expr = parse_member_access (begin, expr); break; case TokenType.OP_PTR: - expr = parse_pointer_member_access (begin, expr); + if (context.profile == Profile.DOVA) { + found = false; + } else { + expr = parse_pointer_member_access (begin, expr); + } break; case TokenType.OPEN_PARENS: expr = parse_method_call (begin, expr); diff --git a/vala/valapointertype.vala b/vala/valapointertype.vala index d3203f461..f1b318d9a 100644 --- a/vala/valapointertype.vala +++ b/vala/valapointertype.vala @@ -94,6 +94,20 @@ public class Vala.PointerType : DataType { return false; } + public override Symbol? get_member (string member_name) { + if (CodeContext.get ().profile != Profile.DOVA) { + return null; + } + + Symbol base_symbol = base_type.data_type; + + if (base_symbol == null) { + return null; + } + + return SemanticAnalyzer.symbol_lookup_inherited (base_symbol, member_name); + } + public override Symbol? get_pointer_member (string member_name) { Symbol base_symbol = base_type.data_type; |