diff options
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/ast/incomplete-member-access-end-of-scope.test | 24 | ||||
-rw-r--r-- | vala/valaparser.vala | 14 |
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: |