+2009-01-09 Jürg Billeter <j@bitron.ch>
+
+ * vala/valaparser.vala:
+
+ Do not accept `ref' and `out' expressions outside of arguments,
+ fixes bug 548418
+
2009-01-09 Jürg Billeter <j@bitron.ch>
* vala/valalambdaexpression.vala:
var list = new ArrayList<Expression> ();
if (current () != TokenType.CLOSE_PARENS) {
do {
- list.add (parse_expression ());
+ list.add (parse_argument ());
} while (accept (TokenType.COMMA));
}
return list;
}
+ Expression parse_argument () throws ParseError {
+ var begin = get_location ();
+
+ if (accept (TokenType.REF)) {
+ var inner = parse_expression ();
+ return new UnaryExpression (UnaryOperator.REF, inner, get_src (begin));
+ } else if (accept (TokenType.OUT)) {
+ var inner = parse_expression ();
+ return new UnaryExpression (UnaryOperator.OUT, inner, get_src (begin));
+ } else {
+ return parse_expression ();
+ }
+ }
+
Expression parse_primary_expression () throws ParseError {
var begin = get_location ();
case TokenType.TILDE: return UnaryOperator.BITWISE_COMPLEMENT;
case TokenType.OP_INC: return UnaryOperator.INCREMENT;
case TokenType.OP_DEC: return UnaryOperator.DECREMENT;
- case TokenType.REF: return UnaryOperator.REF;
- case TokenType.OUT: return UnaryOperator.OUT;
default: return UnaryOperator.NONE;
}
}
var initializer = new InitializerList (get_src (begin));
if (current () != TokenType.CLOSE_BRACE) {
do {
- var init = parse_expression ();
+ var init = parse_argument ();
initializer.append (init);
} while (accept (TokenType.COMMA));
}