v2: fix index expr for fixed array & map
parent
bc11419ff9
commit
42399d24d9
|
@ -544,21 +544,29 @@ pub fn (c mut Checker) index_expr(node ast.IndexExpr) table.Type {
|
||||||
}
|
}
|
||||||
else {}
|
else {}
|
||||||
}
|
}
|
||||||
typ_sym := c.table.get_type_symbol(typ)
|
|
||||||
if typ_sym.kind == .array {
|
|
||||||
if is_range {} // `x[start..end]` has the same type as `x`
|
|
||||||
else {
|
|
||||||
// Check index type
|
|
||||||
index_type := c.expr(node.index)
|
index_type := c.expr(node.index)
|
||||||
// if index_type.typ.kind != .int {
|
// if index_type.typ.kind != .int {
|
||||||
if table.type_idx(index_type) != table.int_type_idx {
|
if table.type_idx(index_type) != table.int_type_idx {
|
||||||
index_type_sym := c.table.get_type_symbol(index_type)
|
index_type_sym := c.table.get_type_symbol(index_type)
|
||||||
c.error('non-integer index (type `$index_type_sym.name`)', node.pos)
|
c.error('non-integer index (type `$index_type_sym.name`)', node.pos)
|
||||||
}
|
}
|
||||||
|
typ_sym := c.table.get_type_symbol(typ)
|
||||||
|
if typ_sym.kind == .array {
|
||||||
|
if is_range {} // `x[start..end]` has the same type as `x`
|
||||||
|
else {
|
||||||
|
// Check index type
|
||||||
info := typ_sym.info as table.Array
|
info := typ_sym.info as table.Array
|
||||||
return info.elem_type
|
return info.elem_type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if typ_sym.kind == .array_fixed {
|
||||||
|
info := typ_sym.info as table.ArrayFixed
|
||||||
|
return info.elem_type
|
||||||
|
}
|
||||||
|
else if typ_sym.kind == .map {
|
||||||
|
info := typ_sym.info as table.Map
|
||||||
|
return info.value_type
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
typ = table.int_type
|
typ = table.int_type
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue