parser: fix maps with aliases as key (#9900)
parent
4f246222b0
commit
3edbf71770
|
@ -606,6 +606,19 @@ fn test_int_keys() {
|
||||||
m3.delete(1)
|
m3.delete(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum Color {
|
||||||
|
red
|
||||||
|
green
|
||||||
|
blue
|
||||||
|
}
|
||||||
|
|
||||||
|
type ColorAlias = Color
|
||||||
|
|
||||||
|
fn test_alias_enum() {
|
||||||
|
mut m := map[ColorAlias]string{}
|
||||||
|
m[Color.red] = 'hi'
|
||||||
|
}
|
||||||
|
|
||||||
fn test_voidptr_keys() {
|
fn test_voidptr_keys() {
|
||||||
mut m := map[voidptr]string{}
|
mut m := map[voidptr]string{}
|
||||||
v := 5
|
v := 5
|
||||||
|
|
|
@ -83,14 +83,14 @@ pub fn (mut p Parser) parse_map_type() ast.Type {
|
||||||
// error is reported in parse_type
|
// error is reported in parse_type
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
if is_alias && !(key_type in [ast.string_type_idx, ast.voidptr_type_idx]
|
key_type_supported := key_type in [ast.string_type_idx, ast.voidptr_type_idx]
|
||||||
|| ((key_type.is_int() || key_type.is_float()) && !key_type.is_ptr())) {
|
|
||||||
p.error('cannot use the alias type as the parent type is unsupported')
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
if !(key_type in [ast.string_type_idx, ast.voidptr_type_idx]
|
|
||||||
|| key_sym.kind == .enum_ || ((key_type.is_int() || key_type.is_float()
|
|| key_sym.kind == .enum_ || ((key_type.is_int() || key_type.is_float()
|
||||||
|| is_alias) && !key_type.is_ptr())) {
|
|| is_alias) && !key_type.is_ptr())
|
||||||
|
if !key_type_supported {
|
||||||
|
if is_alias {
|
||||||
|
p.error('cannot use the alias type as the parent type is unsupported')
|
||||||
|
return 0
|
||||||
|
}
|
||||||
s := p.table.type_to_str(key_type)
|
s := p.table.type_to_str(key_type)
|
||||||
p.error_with_pos('maps only support string, integer, float, rune, enum or voidptr keys for now (not `$s`)',
|
p.error_with_pos('maps only support string, integer, float, rune, enum or voidptr keys for now (not `$s`)',
|
||||||
p.tok.position())
|
p.tok.position())
|
||||||
|
|
Loading…
Reference in New Issue