Incomplete expression statements are parsed as expression statements
now, rather than local variable declarations. This primarily affects
incomplete member access expressions at the end of blocks.
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 \
--- /dev/null
+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
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: