From 60716bba292dac4136cce8dae9a6d868acf644f9 Mon Sep 17 00:00:00 2001 From: spaceface777 Date: Thu, 28 May 2020 18:36:57 +0200 Subject: [PATCH] parser: fix nested array_init syntax --- vlib/v/parser/containers.v | 2 +- vlib/v/tests/array_init_test.v | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/vlib/v/parser/containers.v b/vlib/v/parser/containers.v index ac1ddfcb65..8143d0983a 100644 --- a/vlib/v/parser/containers.v +++ b/vlib/v/parser/containers.v @@ -24,7 +24,7 @@ fn (mut p Parser) array_init() ast.ArrayInit { line_nr := p.tok.line_nr p.next() // []string - if p.tok.kind in [.name, .amp] && p.tok.line_nr == line_nr { + if p.tok.kind in [.name, .amp, .lsbr] && p.tok.line_nr == line_nr { elem_type_pos = p.tok.position() elem_type = p.parse_type() sym := p.table.get_type_symbol(elem_type) diff --git a/vlib/v/tests/array_init_test.v b/vlib/v/tests/array_init_test.v index 0c5c11421c..6306bfd40f 100644 --- a/vlib/v/tests/array_init_test.v +++ b/vlib/v/tests/array_init_test.v @@ -15,6 +15,21 @@ fn test_array_init() { '$d, $d.len, $d.cap' == "['aaa', 'bbb'], 2, 3" } +fn test_nested_array_init() { + mut a := [][]int{} + mut b := [][][]string{cap: 10} + mut c := [][][]string{len: 3, init: [][]string{len: 2}} + // mut c := [][][]string{len: 2, init: [][]string{len: 2, init: []string{len: 2, init: 'hello'}}} + a << [1, 2] + a << [3, 4] + b << [['foo', 'bar'], ['baz']] + b << [['qux']] + + assert '$a' == '[[1, 2], [3, 4]]' + assert '$b' == "[[['foo', 'bar'], ['baz']], [['qux']]]" + assert '$c' == '[[[], []], [[], []], [[], []]]' +} + fn test_array_init_with_default() { a1 := []int{len: 4, init: 2} assert '$a1' == '[2, 2, 2, 2]'