summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/ast/incomplete-member-access-end-of-scope.test24
-rw-r--r--vala/valaparser.vala14
3 files changed, 38 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 62c70ccfa..363be76cf 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -637,6 +637,7 @@ TESTS = \
scanner/string-escape-x-digit-length.test \
scanner/string-escape-x-empty.test \
scanner/string-escape-x.vala \
+ ast/incomplete-member-access-end-of-scope.test \
ast/switch-statement.test \
parser/array-creation-invalid.test \
parser/assignment.vala \
diff --git a/tests/ast/incomplete-member-access-end-of-scope.test b/tests/ast/incomplete-member-access-end-of-scope.test
new file mode 100644
index 000000000..d2f895a25
--- /dev/null
+++ b/tests/ast/incomplete-member-access-end-of-scope.test
@@ -0,0 +1,24 @@
+AST
+
+Input:
+
+class Thing {
+ public int property;
+}
+
+void main () {
+ var thing = new Thing ();
+ thing.
+}
+
+Output:
+
+1.1 | 1.11 | ValaClass
+2.2 | 2.20 | ValaField
+5.1 | 5.9 | ValaMethod
+5.14 | 8.1 | ValaBlock
+6.2 | 6.25 | ValaDeclarationStatement
+6.14 | 6.25 | ValaObjectCreationExpression
+6.18 | 6.22 | ValaMemberAccess
+7.2 | 7.7 | ValaExpressionStatement
+7.2 | 7.7 | ValaMemberAccess
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index cd96f4595..ebf30891e 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -1704,7 +1704,19 @@ public class Vala.Parser : CodeVisitor {
var begin = get_location ();
// decide between declaration and expression statement
- skip_type ();
+ try {
+ skip_type ();
+ } catch (ParseError e) {
+ prev ();
+ var token = current ();
+ next ();
+ if (context.keep_going && (token == TokenType.DOT || token == TokenType.DOUBLE_COLON)) {
+ rollback (begin);
+ return true;
+ } else {
+ throw e;
+ }
+ }
switch (current ()) {
// invocation expression
case TokenType.OPEN_PARENS: