]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add syntax for creating array of pointers
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 16 Aug 2011 08:39:16 +0000 (10:39 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Tue, 16 Aug 2011 15:19:00 +0000 (17:19 +0200)
Fixes bug 647222.

tests/Makefile.am
tests/basic-types/bug647222.vala [new file with mode: 0644]
vala/valaparser.vala

index b218306c96ce3f91aca0927265f23bfb609515f2..0beb76f063b8ca0a8fa6ae4ffb0c8f1f81fcf816 100644 (file)
@@ -25,6 +25,7 @@ TESTS = \
        basic-types/bug596637.vala \
        basic-types/bug596785.vala \
        basic-types/bug632322.vala \
+       basic-types/bug647222.vala \
        basic-types/bug648364.vala \
        basic-types/bug650993.vala \
        basic-types/bug652380.vala \
diff --git a/tests/basic-types/bug647222.vala b/tests/basic-types/bug647222.vala
new file mode 100644 (file)
index 0000000..23bf25a
--- /dev/null
@@ -0,0 +1,3 @@
+void main () {
+       Value*[] v = new Value*[10];
+}
index 6aedb9216495b5c80768ad1139435c4938faf7ac..8aee7961eb07eabdeeb2d3cb0fc0dbeafc015085 100644 (file)
@@ -843,11 +843,16 @@ public class Vala.Parser : CodeVisitor {
                if (accept (TokenType.OPEN_PARENS)) {
                        var expr = parse_object_creation_expression (begin, member);
                        return expr;
-               } else if (accept (TokenType.OPEN_BRACKET)) {
-                       var expr = parse_array_creation_expression (begin, member);
-                       return expr;
                } else {
-                       throw new ParseError.SYNTAX (get_error ("expected ( or ["));
+                       while (accept (TokenType.STAR)) {
+                       }
+                       if (accept (TokenType.OPEN_BRACKET)) {
+                               rollback (begin);
+                               var expr = parse_array_creation_expression ();
+                               return expr;
+                       } else {
+                               throw new ParseError.SYNTAX (get_error ("expected ( or ["));
+                       }
                }
        }
 
@@ -888,11 +893,19 @@ public class Vala.Parser : CodeVisitor {
                return expr;
        }
 
-       Expression parse_array_creation_expression (SourceLocation begin, MemberAccess member) throws ParseError {
+       Expression parse_array_creation_expression () throws ParseError {
+               var begin = get_location ();
+               expect (TokenType.NEW);
+               var member = parse_member_name ();
+               DataType element_type = UnresolvedType.new_from_expression (member);
+               while (accept (TokenType.STAR)) {
+                       element_type = new PointerType (element_type, get_src (begin));
+               }
+               expect (TokenType.OPEN_BRACKET);
+
                bool size_specified = false;
                List<Expression> size_specifier_list = null;
                bool first = true;
-               DataType element_type = UnresolvedType.new_from_expression (member);
                do {
                        if (!first) {
                                // array of arrays: new T[][42]