| 
				
			 | 
			
			
				
				@@ -359,7 +359,7 @@ public class TypeMemberGroup { 
			 | 
		
		
	
		
			
			| 
				359
			 | 
			
				359
			 | 
			
			
				
				                 return selectedMethod.member; 
			 | 
		
		
	
		
			
			| 
				360
			 | 
			
				360
			 | 
			
			
				
				         } 
			 | 
		
		
	
		
			
			| 
				361
			 | 
			
				361
			 | 
			
			
				
				 		// try to match with approximate types 
			 | 
		
		
	
		
			
			| 
				362
			 | 
			
				
			 | 
			
			
				
				-		FunctionalMemberRef selected = null; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				362
			 | 
			
			
				
				+		TypeMember<FunctionalMemberRef> selected = null; 
			 | 
		
		
	
		
			
			| 
				363
			 | 
			
				363
			 | 
			
			
				
				 		for (TypeMember<FunctionalMemberRef> method : methods) { 
			 | 
		
		
	
		
			
			| 
				364
			 | 
			
				364
			 | 
			
			
				
				 			if (!(method.member.isStatic() ? allowStatic : allowNonStatic)) 
			 | 
		
		
	
		
			
			| 
				365
			 | 
			
				365
			 | 
			
			
				
				 				continue; 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -372,15 +372,19 @@ public class TypeMemberGroup { 
			 | 
		
		
	
		
			
			| 
				372
			 | 
			
				372
			 | 
			
			
				
				 			if (!header.matchesImplicitly(position, arguments, scope)) 
			 | 
		
		
	
		
			
			| 
				373
			 | 
			
				373
			 | 
			
			
				
				 				continue; 
			 | 
		
		
	
		
			
			| 
				374
			 | 
			
				374
			 | 
			
			
				
				 			 
			 | 
		
		
	
		
			
			| 
				375
			 | 
			
				
			 | 
			
			
				
				-			if (selected != null) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				375
			 | 
			
			
				
				+			if (selected == null) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				376
			 | 
			
			
				
				+				selected = method; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				377
			 | 
			
			
				
				+			} else if(selected.priority == method.priority){ 
			 | 
		
		
	
		
			
			| 
				376
			 | 
			
				378
			 | 
			
			
				
				 				StringBuilder explanation = new StringBuilder(); 
			 | 
		
		
	
		
			
			| 
				377
			 | 
			
				
			 | 
			
			
				
				-				FunctionHeader selectedHeader = selected.getHeader().instanceForCall(position, scope.getTypeRegistry(), arguments); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				379
			 | 
			
			
				
				+				FunctionHeader selectedHeader = selected.member.getHeader().instanceForCall(position, scope.getTypeRegistry(), arguments); 
			 | 
		
		
	
		
			
			| 
				378
			 | 
			
				380
			 | 
			
			
				
				 				explanation.append("Function A: ").append(selectedHeader.toString()).append("\n"); 
			 | 
		
		
	
		
			
			| 
				379
			 | 
			
				381
			 | 
			
			
				
				 				explanation.append("Function B: ").append(header.toString()); 
			 | 
		
		
	
		
			
			| 
				380
			 | 
			
				382
			 | 
			
			
				
				 				throw new CompileException(position, CompileExceptionCode.CALL_AMBIGUOUS, "Ambiguous call; multiple methods match:\n" + explanation.toString()); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				383
			 | 
			
			
				
				+			} else { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				384
			 | 
			
			
				
				+				//For example: 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				385
			 | 
			
			
				
				+				//Child overrides parent: Priority.Specified vs. Priority.Inherited 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				386
			 | 
			
			
				
				+				selected = selected.resolve(method); 
			 | 
		
		
	
		
			
			| 
				381
			 | 
			
				387
			 | 
			
			
				
				 			} 
			 | 
		
		
	
		
			
			| 
				382
			 | 
			
				
			 | 
			
			
				
				-			 
			 | 
		
		
	
		
			
			| 
				383
			 | 
			
				
			 | 
			
			
				
				-			selected = method.member; 
			 | 
		
		
	
		
			
			| 
				384
			 | 
			
				388
			 | 
			
			
				
				 		} 
			 | 
		
		
	
		
			
			| 
				385
			 | 
			
				389
			 | 
			
			
				
				 		 
			 | 
		
		
	
		
			
			| 
				386
			 | 
			
				390
			 | 
			
			
				
				 		if (selected == null) { 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -403,7 +407,7 @@ public class TypeMemberGroup { 
			 | 
		
		
	
		
			
			| 
				403
			 | 
			
				407
			 | 
			
			
				
				 			throw new CompileException(position, CompileExceptionCode.CALL_NO_VALID_METHOD, "No matching method found for " + name + ":\n" + message.toString()); 
			 | 
		
		
	
		
			
			| 
				404
			 | 
			
				408
			 | 
			
			
				
				 		} 
			 | 
		
		
	
		
			
			| 
				405
			 | 
			
				409
			 | 
			
			
				
				 		 
			 | 
		
		
	
		
			
			| 
				406
			 | 
			
				
			 | 
			
			
				
				-		return selected; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				410
			 | 
			
			
				
				+		return selected.member; 
			 | 
		
		
	
		
			
			| 
				407
			 | 
			
				411
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				408
			 | 
			
				412
			 | 
			
			
				
				 	 
			 | 
		
		
	
		
			
			| 
				409
			 | 
			
				413
			 | 
			
			
				
				 	public FunctionalMemberRef getOverride(CodePosition position, TypeScope scope, FunctionalMember member) throws CompileException { 
			 |