checker: variadic method fix
							parent
							
								
									f101e9b9e2
								
							
						
					
					
						commit
						9a8bd3f7fa
					
				| 
						 | 
					@ -307,11 +307,13 @@ pub fn (c mut Checker) method_call_expr(method_call_expr mut ast.MethodCallExpr)
 | 
				
			||||||
		return info.elem_type
 | 
							return info.elem_type
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if method := c.table.type_find_method(typ_sym, name) {
 | 
						if method := c.table.type_find_method(typ_sym, name) {
 | 
				
			||||||
		if method_call_expr.args.len < method.args.len - 1 {
 | 
							no_args := method.args.len - 1
 | 
				
			||||||
			c.error('too few arguments in call to `${typ_sym.name}.$name`', method_call_expr.pos)
 | 
							min_required_args := method.args.len - if method.is_variadic && method.args.len > 1 { 2 } else { 1 }
 | 
				
			||||||
 | 
							if method_call_expr.args.len < min_required_args {
 | 
				
			||||||
 | 
								c.error('too few arguments in call to `${typ_sym.name}.$name` ($method_call_expr.args.len instead of $min_required_args)', method_call_expr.pos)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else if !method.is_variadic && method_call_expr.args.len > method.args.len + 1 {
 | 
							else if !method.is_variadic && method_call_expr.args.len > no_args {
 | 
				
			||||||
			c.error('too many arguments in call to `${typ_sym.name}.$name` ($method_call_expr.args.len instead of $method.args.len)', method_call_expr.pos)
 | 
								c.error('too many arguments in call to `${typ_sym.name}.$name` ($method_call_expr.args.len instead of $no_args)', method_call_expr.pos)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// if name == 'clone' {
 | 
							// if name == 'clone' {
 | 
				
			||||||
		// println('CLONE nr args=$method.args.len')
 | 
							// println('CLONE nr args=$method.args.len')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -137,6 +137,7 @@ fn (p mut Parser) fn_decl() ast.FnDecl {
 | 
				
			||||||
			name: name
 | 
								name: name
 | 
				
			||||||
			args: args
 | 
								args: args
 | 
				
			||||||
			return_type: return_type
 | 
								return_type: return_type
 | 
				
			||||||
 | 
								is_variadic: is_variadic
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else {
 | 
						else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue