summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/Compiler.java9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/Compiler.java b/src/jvm/clojure/lang/Compiler.java
index e683da91..6e31e35f 100644
--- a/src/jvm/clojure/lang/Compiler.java
+++ b/src/jvm/clojure/lang/Compiler.java
@@ -2024,6 +2024,7 @@ static int getMatchingParams(String methodName, ArrayList<Class[]> paramlists, I
//presumes matching lengths
int matchIdx = -1;
boolean tied = false;
+ boolean foundExact = false;
for(int i = 0; i < paramlists.size(); i++)
{
boolean match = true;
@@ -2040,8 +2041,12 @@ static int getMatchingParams(String methodName, ArrayList<Class[]> paramlists, I
match = Reflector.paramArgTypeMatch(pclass, aclass);
}
if(exact == argexprs.count())
- return i;
- if(match)
+ {
+ if(!foundExact || matchIdx == -1 || rets.get(matchIdx).isAssignableFrom(rets.get(i)))
+ matchIdx = i;
+ foundExact = true;
+ }
+ else if(match && !foundExact)
{
if(matchIdx == -1)
matchIdx = i;