v2: fix index expr for fixed array & map

pull/3779/head
joe-conigliaro 2020-02-19 21:39:30 +11:00
parent bc11419ff9
commit 42399d24d9
1 changed files with 14 additions and 6 deletions

View File

@ -544,21 +544,29 @@ pub fn (c mut Checker) index_expr(node ast.IndexExpr) table.Type {
} }
else {} 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) typ_sym := c.table.get_type_symbol(typ)
if typ_sym.kind == .array { if typ_sym.kind == .array {
if is_range {} // `x[start..end]` has the same type as `x` if is_range {} // `x[start..end]` has the same type as `x`
else { else {
// Check index type // 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 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
} }