summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vala/valamemberaccess.vala2
-rw-r--r--vala/valaparser.vala6
-rw-r--r--vala/valapointertype.vala14
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;