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:
parent
bc11419ff9
commit
42399d24d9
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user