checker: fix indexing a type alias instance (#7889)
							parent
							
								
									a02de42450
								
							
						
					
					
						commit
						7a6b160d63
					
				| 
						 | 
					@ -4643,7 +4643,7 @@ fn (mut c Checker) check_index_type(typ_sym &table.TypeSymbol, index_type table.
 | 
				
			||||||
pub fn (mut c Checker) index_expr(mut node ast.IndexExpr) table.Type {
 | 
					pub fn (mut c Checker) index_expr(mut node ast.IndexExpr) table.Type {
 | 
				
			||||||
	typ := c.expr(node.left)
 | 
						typ := c.expr(node.left)
 | 
				
			||||||
	node.left_type = typ
 | 
						node.left_type = typ
 | 
				
			||||||
	typ_sym := c.table.get_type_symbol(typ)
 | 
						typ_sym := c.table.get_final_type_symbol(typ)
 | 
				
			||||||
	if typ_sym.kind !in [.array, .array_fixed, .string, .map] && !typ.is_ptr() && !(!typ_sym.name[0].is_capital() &&
 | 
						if typ_sym.kind !in [.array, .array_fixed, .string, .map] && !typ.is_ptr() && !(!typ_sym.name[0].is_capital() &&
 | 
				
			||||||
		typ_sym.name.ends_with('ptr')) && !typ.has_flag(.variadic) { // byteptr, charptr etc
 | 
							typ_sym.name.ends_with('ptr')) && !typ.has_flag(.variadic) { // byteptr, charptr etc
 | 
				
			||||||
		c.error('type `$typ_sym.name` does not support indexing', node.pos)
 | 
							c.error('type `$typ_sym.name` does not support indexing', node.pos)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3846,7 +3846,7 @@ fn (mut g Gen) index_expr(node ast.IndexExpr) {
 | 
				
			||||||
			g.write(')')
 | 
								g.write(')')
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else {
 | 
				
			||||||
			sym := g.table.get_type_symbol(node.left_type)
 | 
								sym := g.table.get_final_type_symbol(node.left_type)
 | 
				
			||||||
			left_is_ptr := node.left_type.is_ptr()
 | 
								left_is_ptr := node.left_type.is_ptr()
 | 
				
			||||||
			if sym.kind == .array {
 | 
								if sym.kind == .array {
 | 
				
			||||||
				info := sym.info as table.Array
 | 
									info := sym.info as table.Array
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -638,7 +638,7 @@ pub fn (mut t Table) add_placeholder_type(name string, language Language) int {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[inline]
 | 
					[inline]
 | 
				
			||||||
pub fn (t &Table) value_type(typ Type) Type {
 | 
					pub fn (t &Table) value_type(typ Type) Type {
 | 
				
			||||||
	typ_sym := t.get_type_symbol(typ)
 | 
						typ_sym := t.get_final_type_symbol(typ)
 | 
				
			||||||
	if typ.has_flag(.variadic) {
 | 
						if typ.has_flag(.variadic) {
 | 
				
			||||||
		// ...string => string
 | 
							// ...string => string
 | 
				
			||||||
		// return typ.clear_flag(.variadic)
 | 
							// return typ.clear_flag(.variadic)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					type Test = []int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn test_index() {
 | 
				
			||||||
 | 
					    t := Test([2,4])
 | 
				
			||||||
 | 
					    assert t[1] == 4
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					type Test = map[string]string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn test_index() {
 | 
				
			||||||
 | 
					    t := Test({'c': 'abc'})
 | 
				
			||||||
 | 
					    assert t['c'] == 'abc'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue