checker: fix error for assign array of aliases (#14096)
							parent
							
								
									fac15fb862
								
							
						
					
					
						commit
						f7dbbba7ae
					
				|  | @ -336,6 +336,17 @@ pub fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) { | |||
| 			c.error('use `array2 $node.op.str() array1.clone()` instead of `array2 $node.op.str() array1` (or use `unsafe`)', | ||||
| 				node.pos) | ||||
| 		} | ||||
| 		if left_sym.kind == .array && right_sym.kind == .array { | ||||
| 			// `mut arr := [u8(1),2,3]`
 | ||||
| 			// `arr = [byte(4),5,6]`
 | ||||
| 			left_info := left_sym.info as ast.Array | ||||
| 			left_elem_type := c.table.unaliased_type(left_info.elem_type) | ||||
| 			right_info := right_sym.info as ast.Array | ||||
| 			right_elem_type := c.table.unaliased_type(right_info.elem_type) | ||||
| 			if left_info.nr_dims == right_info.nr_dims && left_elem_type == right_elem_type { | ||||
| 				continue | ||||
| 			} | ||||
| 		} | ||||
| 		if left_sym.kind == .array_fixed && !c.inside_unsafe && node.op in [.assign, .decl_assign] | ||||
| 			&& right_sym.kind == .array_fixed && (left is ast.Ident && !left.is_blank_ident()) | ||||
| 			&& right is ast.Ident { | ||||
|  |  | |||
|  | @ -0,0 +1,10 @@ | |||
| fn test_assign_array_of_aliases() { | ||||
| 	mut arr := [u8(1), 2, 3] | ||||
| 	arr = [byte(4), 5, 6] | ||||
| 
 | ||||
| 	println(arr) | ||||
| 	assert arr.len == 3 | ||||
| 	assert arr[0] == 4 | ||||
| 	assert arr[1] == 5 | ||||
| 	assert arr[2] == 6 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue