summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/jvm/clojure/lang/Reflector.java11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java
index 4a1cf7c1..e213d743 100644
--- a/src/jvm/clojure/lang/Reflector.java
+++ b/src/jvm/clojure/lang/Reflector.java
@@ -41,6 +41,7 @@ static Object invokeMatchingMethod(String methodName, List methods, Object targe
}
else //overloaded w/same arity
{
+ Method foundm = null;
for(Iterator i = methods.iterator(); i.hasNext();)
{
m = (Method) i.next();
@@ -48,12 +49,14 @@ static Object invokeMatchingMethod(String methodName, List methods, Object targe
Class[] params = m.getParameterTypes();
if(isCongruent(params, args))
{
- boxedArgs = boxArgs(params, args);
- break;
+ if(foundm == null || Compiler.subsumes(params,foundm.getParameterTypes()))
+ {
+ foundm = m;
+ boxedArgs = boxArgs(params, args);
+ }
}
- else
- m = null;
}
+ m = foundm;
}
if(m == null)
throw new IllegalArgumentException("No matching method found: " + methodName);