v2: start to fix index expr for map/array/fixed array

pull/3779/head
joe-conigliaro 2020-02-19 21:45:06 +11:00
parent 42399d24d9
commit 69634c60b3
1 changed files with 19 additions and 20 deletions

View File

@ -544,21 +544,19 @@ pub fn (c mut Checker) index_expr(node ast.IndexExpr) table.Type {
}
else {}
}
typ_sym := c.table.get_type_symbol(typ)
if !is_range {
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
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
@ -570,6 +568,7 @@ pub fn (c mut Checker) index_expr(node ast.IndexExpr) table.Type {
else {
typ = table.int_type
}
}
return typ
}