checker: fix sort return type (#6182)
							parent
							
								
									e8ff94fb8b
								
							
						
					
					
						commit
						0c183da116
					
				| 
						 | 
					@ -910,6 +910,8 @@ pub fn (mut c Checker) call_method(mut call_expr ast.CallExpr) table.Type {
 | 
				
			||||||
			// in ['clone', 'str'] {
 | 
								// in ['clone', 'str'] {
 | 
				
			||||||
			call_expr.receiver_type = left_type.to_ptr()
 | 
								call_expr.receiver_type = left_type.to_ptr()
 | 
				
			||||||
			// call_expr.return_type = call_expr.receiver_type
 | 
								// call_expr.return_type = call_expr.receiver_type
 | 
				
			||||||
 | 
							} else if method_name == 'sort' {
 | 
				
			||||||
 | 
								call_expr.return_type = table.void_type
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return call_expr.return_type
 | 
							return call_expr.return_type
 | 
				
			||||||
	} else if left_type_sym.kind == .map && method_name == 'clone' {
 | 
						} else if left_type_sym.kind == .map && method_name == 'clone' {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3907,14 +3907,14 @@ fn (mut g Gen) gen_array_map(node ast.CallExpr) {
 | 
				
			||||||
// `users.sort(a.age < b.age)`
 | 
					// `users.sort(a.age < b.age)`
 | 
				
			||||||
fn (mut g Gen) gen_array_sort(node ast.CallExpr) {
 | 
					fn (mut g Gen) gen_array_sort(node ast.CallExpr) {
 | 
				
			||||||
	// println('filter s="$s"')
 | 
						// println('filter s="$s"')
 | 
				
			||||||
	return_sym := g.table.get_type_symbol(node.return_type)
 | 
						rec_sym := g.table.get_type_symbol(node.receiver_type)
 | 
				
			||||||
	if return_sym.kind != .array {
 | 
						if rec_sym.kind != .array {
 | 
				
			||||||
		println(node.name)
 | 
							println(node.name)
 | 
				
			||||||
		println(g.typ(node.receiver_type))
 | 
							println(g.typ(node.receiver_type))
 | 
				
			||||||
		// println(sym.kind)
 | 
							// println(rec_sym.kind)
 | 
				
			||||||
		verror('sort() requires an array')
 | 
							verror('.sort() is an array method')
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	info := return_sym.info as table.Array
 | 
						info := rec_sym.info as table.Array
 | 
				
			||||||
	// No arguments means we are sorting an array of builtins (e.g. `numbers.sort()`)
 | 
						// No arguments means we are sorting an array of builtins (e.g. `numbers.sort()`)
 | 
				
			||||||
	// The type for the comparison fns is the type of the element itself.
 | 
						// The type for the comparison fns is the type of the element itself.
 | 
				
			||||||
	mut typ := info.elem_type
 | 
						mut typ := info.elem_type
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue