diff options
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 11 |
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); |