sbool neWPreciseCall_debug; sO newPreciseCall(O o, S method, O... args) ctex { if (o cast Class) { _MethodCache cache = callOpt_getCache(o); L methods = cache.cache.get(method); new Lowest best; if (methods != null) for (Method m : methods) { continue unless isStaticMethod(m); int score = methodApplicabilityScore(m, args); if (score < Int.MAX_VALUE) { if (newPreciseCall_debug) print("Method score: " + m + " " + score); best.put(m, score); } } Method m = best!; if (m != null) ret invokeMethod(m, null, args); ret call_withVarargs(o, method, args); // TODO: make this precise too } else if (o == null) null; else { _MethodCache cache = callOpt_getCache(o.getClass()); L methods = cache.cache.get(method); new Lowest best; if (methods != null) for (Method m : methods) { int score = methodApplicabilityScore(m, args); if (score < Int.MAX_VALUE) { if (preciseCall_debug) print("Method score: " + m + " " + score); best.put(m, score); } } Method m = best!; if (m != null) ret invokeMethod(m, o, args); ret call_withVarargs(o, method, args); // TODO: make this precise } }