break;
}
+ if (expr == null) {
+ // workaround for current limitation of exception handling
+ throw new ParseError.SYNTAX ("syntax error in primary expression");
+ }
+
// process primary expressions that start with an inner primary expression
bool found = true;
while (found) {
expect (TokenType.NEW);
var member = parse_member_name ();
if (accept (TokenType.OPEN_PARENS)) {
- return parse_object_creation_expression (begin, member);
+ var expr = parse_object_creation_expression (begin, member);
+ return expr;
} else if (accept (TokenType.OPEN_BRACKET)) {
- return parse_array_creation_expression (begin, member);
+ var expr = parse_array_creation_expression (begin, member);
+ return expr;
} else {
throw new ParseError.SYNTAX (get_error ("expected ( or ["));
}
return context.create_addressof_expression (op, get_src (begin));
}
- return parse_primary_expression ();
+ var expr = parse_primary_expression ();
+ return expr;
}
BinaryOperator get_binary_operator (TokenType token_type) {
if (current () == TokenType.LAMBDA) {
rollback (begin);
- return parse_lambda_expression ();
+ var lambda = parse_lambda_expression ();
+ return lambda;
}
while (true) {
Block parse_embedded_statement () throws ParseError {
if (current () == TokenType.OPEN_BRACE) {
- return parse_block ();
+ var block = parse_block ();
+ return block;
}
comment = scanner.pop_comment ();
var block = context.create_block ();
- block.add_statement (parse_embedded_statement_without_block ());
+ var stmt = parse_embedded_statement_without_block ();
+ if (stmt == null) {
+ // workaround for current limitation of exception handling
+ throw new ParseError.SYNTAX ("syntax error in embedded statement");
+ }
+ block.add_statement (stmt);
return block;
}
Expression parse_statement_expression () throws ParseError {
// invocation expression, assignment,
// or pre/post increment/decrement expression
- return parse_expression ();
+ var expr = parse_expression ();
+ return expr;
}
Statement parse_if_statement () throws ParseError {
Block parse_finally_clause () throws ParseError {
expect (TokenType.FINALLY);
- return parse_block ();
+ var block = parse_block ();
+ return block;
}
Statement parse_lock_statement () throws ParseError {
Expression parse_variable_initializer () throws ParseError {
if (current () == TokenType.OPEN_BRACE) {
- return parse_initializer ();
+ var expr = parse_initializer ();
+ return expr;
} else {
- return parse_expression ();
+ var expr = parse_expression ();
+ return expr;
}
}