parser: fix maps with aliases as key (#9900)
							parent
							
								
									4f246222b0
								
							
						
					
					
						commit
						3edbf71770
					
				|  | @ -606,6 +606,19 @@ fn test_int_keys() { | |||
| 	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() { | ||||
| 	mut m := map[voidptr]string{} | ||||
| 	v := 5 | ||||
|  |  | |||
|  | @ -83,14 +83,14 @@ pub fn (mut p Parser) parse_map_type() ast.Type { | |||
| 		// error is reported in parse_type
 | ||||
| 		return 0 | ||||
| 	} | ||||
| 	if is_alias && !(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_type_supported := key_type in [ast.string_type_idx, ast.voidptr_type_idx] | ||||
| 		|| 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) | ||||
| 		p.error_with_pos('maps only support string, integer, float, rune, enum or voidptr keys for now (not `$s`)', | ||||
| 			p.tok.position()) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue