From: Jürg Billeter Date: Sat, 3 Jul 2010 07:23:08 +0000 (+0200) Subject: dova: Add support for object literals X-Git-Tag: 0.9.3~45 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a222e923b82fc00fcac1a66ca1ebab41d7165bce;p=thirdparty%2Fvala.git dova: Add support for object literals --- diff --git a/vala/valaparser.vala b/vala/valaparser.vala index 4c767eee5..b5b85cf71 100644 --- a/vala/valaparser.vala +++ b/vala/valaparser.vala @@ -636,6 +636,14 @@ public class Vala.Parser : CodeVisitor { case TokenType.OPEN_BRACKET: expr = parse_element_access (begin, expr); break; + case TokenType.OPEN_BRACE: + var ma = expr as MemberAccess; + if (context.profile == Profile.DOVA && ma != null) { + expr = parse_object_literal (begin, ma); + } else { + found = false; + } + break; case TokenType.OP_INC: expr = parse_post_increment_expression (begin, expr); break; @@ -851,6 +859,27 @@ public class Vala.Parser : CodeVisitor { return expr; } + Expression parse_object_literal (SourceLocation begin, MemberAccess member) throws ParseError { + member.creation_member = true; + + var expr = new ObjectCreationExpression (member, get_src (begin)); + + expect (TokenType.OPEN_BRACE); + + do { + var member_begin = get_location (); + string id = parse_identifier (); + expect (TokenType.COLON); + var member_expr = parse_expression (); + + expr.add_member_initializer (new MemberInitializer (id, member_expr, get_src (member_begin))); + } while (accept (TokenType.COMMA)); + + expect (TokenType.CLOSE_BRACE); + + return expr; + } + Expression parse_array_creation_expression (SourceLocation begin, MemberAccess member) throws ParseError { bool size_specified = false; List size_specifier_list = null; @@ -3391,6 +3420,7 @@ public class Vala.Parser : CodeVisitor { case TokenType.OPEN_PARENS: case TokenType.CLOSE_PARENS: case TokenType.CLOSE_BRACKET: + case TokenType.OPEN_BRACE: case TokenType.COLON: case TokenType.SEMICOLON: case TokenType.COMMA: