summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/basic-types/bug647222.vala3
-rw-r--r--vala/valaparser.vala25
3 files changed, 23 insertions, 6 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b218306c9..0beb76f06 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
index 000000000..23bf25ae6
--- /dev/null
+++ b/tests/basic-types/bug647222.vala
@@ -0,0 +1,3 @@
+void main () {
+ Value*[] v = new Value*[10];
+}
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 6aedb9216..8aee7961e 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -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]