mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: Infinite multi-dimensional array
This commit is contained in:
parent
5faa7e7861
commit
5481f226dd
@ -273,7 +273,10 @@ fn (p mut Parser) gen_array_str(typ Type) {
|
||||
})
|
||||
elm_type := typ.name.right(6)
|
||||
elm_type2 := p.table.find_type(elm_type)
|
||||
if p.typ_to_fmt(elm_type, 0) == '' &&
|
||||
is_array := elm_type.starts_with('array_')
|
||||
if is_array {
|
||||
p.gen_array_str(elm_type2)
|
||||
} else if p.typ_to_fmt(elm_type, 0) == '' &&
|
||||
!p.table.type_has_method(elm_type2, 'str') {
|
||||
p.error('cant print ${elm_type}[], unhandled print of ${elm_type}')
|
||||
}
|
||||
|
@ -987,35 +987,22 @@ fn (p mut Parser) get_type() string {
|
||||
return f.typ_str()
|
||||
}
|
||||
// arrays ([]int)
|
||||
mut is_arr := false
|
||||
mut is_arr2 := false// [][]int TODO remove this and allow unlimited levels of arrays
|
||||
mut arr_level := 0
|
||||
is_question := p.tok == .question
|
||||
if is_question {
|
||||
p.check(.question)
|
||||
}
|
||||
if p.tok == .lsbr {
|
||||
for p.tok == .lsbr {
|
||||
p.check(.lsbr)
|
||||
// [10]int
|
||||
if p.tok == .number {
|
||||
typ = '[$p.lit]'
|
||||
typ += '[$p.lit]'
|
||||
p.next()
|
||||
}
|
||||
else {
|
||||
is_arr = true
|
||||
arr_level++
|
||||
}
|
||||
p.check(.rsbr)
|
||||
// [10][3]int
|
||||
if p.tok == .lsbr {
|
||||
p.next()
|
||||
if p.tok == .number {
|
||||
typ += '[$p.lit]'
|
||||
p.check(.number)
|
||||
}
|
||||
else {
|
||||
is_arr2 = true
|
||||
}
|
||||
p.check(.rsbr)
|
||||
}
|
||||
}
|
||||
// map[string]int
|
||||
if !p.builtin_mod && p.tok == .name && p.lit == 'map' {
|
||||
@ -1101,14 +1088,12 @@ fn (p mut Parser) get_type() string {
|
||||
typ += strings.repeat(`*`, nr_muls)
|
||||
}
|
||||
// Register an []array type
|
||||
if is_arr2 {
|
||||
typ = 'array_array_$typ'
|
||||
p.register_array(typ)
|
||||
}
|
||||
else if is_arr {
|
||||
typ = 'array_$typ'
|
||||
if arr_level > 0 {
|
||||
// p.log('ARR TYPE="$typ" run=$p.pass')
|
||||
// We come across "[]User" etc ?
|
||||
for i := 0; i < arr_level; i++ {
|
||||
typ = 'array_$typ'
|
||||
}
|
||||
p.register_array(typ)
|
||||
}
|
||||
p.next()
|
||||
|
Loading…
Reference in New Issue
Block a user