]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Add support for object literals
authorJürg Billeter <j@bitron.ch>
Sat, 3 Jul 2010 07:23:08 +0000 (09:23 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 3 Jul 2010 07:31:19 +0000 (09:31 +0200)
vala/valaparser.vala

index 4c767eee5ac1505718b12e7ddc56c02720dd7cfc..b5b85cf718cabd31b591e14008ae481f721bda1a 100644 (file)
@@ -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<Expression> 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: