From: Jürg Billeter Date: Fri, 9 Jan 2009 18:22:13 +0000 (+0000) Subject: Do not accept `ref' and `out' expressions outside of arguments, fixes bug X-Git-Tag: VALA_0_5_5~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1b2b3ff4337795a999c7600f7c41c9ce4acd95f;p=thirdparty%2Fvala.git Do not accept `ref' and `out' expressions outside of arguments, fixes bug 2009-01-09 Jürg Billeter * vala/valaparser.vala: Do not accept `ref' and `out' expressions outside of arguments, fixes bug 548418 svn path=/trunk/; revision=2306 --- diff --git a/ChangeLog b/ChangeLog index b65882ba2..7aebcc66a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-01-09 Jürg Billeter + + * vala/valaparser.vala: + + Do not accept `ref' and `out' expressions outside of arguments, + fixes bug 548418 + 2009-01-09 Jürg Billeter * vala/valalambdaexpression.vala: diff --git a/vala/valaparser.vala b/vala/valaparser.vala index a5a20fdff..040fa58fe 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -445,12 +445,26 @@ public class Vala.Parser : CodeVisitor { var list = new ArrayList (); 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 (); @@ -777,8 +791,6 @@ public class Vala.Parser : CodeVisitor { 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; } } @@ -2092,7 +2104,7 @@ public class Vala.Parser : CodeVisitor { 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)); }