From 135c7b3bf87ea2e9e201b52ae8ff48b44f2bd511 Mon Sep 17 00:00:00 2001 From: Rich Hickey Date: Mon, 24 Mar 2008 14:34:32 +0000 Subject: use subsuming method, if any, rather than first found, when overloaded w/same arity --- src/jvm/clojure/lang/Reflector.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') 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); -- cgit v1.2.3-70-g09d2