1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

v2: fix index expr for fixed array & map

This commit is contained in:
joe-conigliaro 2020-02-19 21:39:30 +11:00
parent bc11419ff9
commit 42399d24d9

View File

@ -544,21 +544,29 @@ pub fn (c mut Checker) index_expr(node ast.IndexExpr) table.Type {
}
else {}
}
index_type := c.expr(node.index)
// if index_type.typ.kind != .int {
if table.type_idx(index_type) != table.int_type_idx {
index_type_sym := c.table.get_type_symbol(index_type)
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
index_type := c.expr(node.index)
// if index_type.typ.kind != .int {
if table.type_idx(index_type) != table.int_type_idx {
index_type_sym := c.table.get_type_symbol(index_type)
c.error('non-integer index (type `$index_type_sym.name`)', node.pos)
}
info := typ_sym.info as table.Array
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 {
typ = table.int_type
}