checker: correctly check arrays with element that is an alias. fixes #6735
parent
0c18b3bea6
commit
cf7b45b074
|
@ -85,14 +85,27 @@ pub fn (mut c Checker) check_basic(got table.Type, expected table.Type) bool {
|
|||
}
|
||||
}
|
||||
// TODO
|
||||
if exp_type_sym.name == 'array' || got_type_sym.name == 'array' {
|
||||
// if exp_type_sym.name == 'array' || got_type_sym.name == 'array' {
|
||||
if got_idx == table.array_type_idx || exp_idx == table.array_type_idx {
|
||||
return true
|
||||
}
|
||||
// TODO
|
||||
// accept [] when an expected type is an array
|
||||
if got_type_sym.kind == .array &&
|
||||
got_type_sym.name == 'array_void' && exp_type_sym.kind == .array {
|
||||
return true
|
||||
if got_type_sym.kind == .array && exp_type_sym.kind == .array {
|
||||
// TODO
|
||||
// accept [] when an expected type is an array
|
||||
if got_type_sym.name == 'array_void' {
|
||||
return true
|
||||
}
|
||||
// if elem_type is an alias, check it
|
||||
// TODO: think about recursion, how many levels of alias can there be?
|
||||
got_info := got_type_sym.info as table.Array
|
||||
exp_info := exp_type_sym.info as table.Array
|
||||
got_elem_sym := c.table.get_type_symbol(got_info.elem_type)
|
||||
exp_elem_sym := c.table.get_type_symbol(exp_info.elem_type)
|
||||
if (got_elem_sym.kind == .alias ||
|
||||
exp_elem_sym.kind == .alias) &&
|
||||
c.check_basic(got_info.elem_type, exp_info.elem_type) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
// type alias
|
||||
if (got_type_sym.kind == .alias &&
|
||||
|
|
Loading…
Reference in New Issue