Map<Class, JavaScriptObject> dmap = isStatic ? staticDispatchMap : dispatchMap;
if (isVarArgs) {
for (int l = getMaxArity(dmap.get(clazz).cast(), meth), i = l; i >= 1; i--) {
JsArray<JavaScriptObject> args = computeVarArguments(i, arguments);
JavaScriptObject ret = runDispatch(instance, dmap, clazz, meth, args);
if (ret == null) {
// ExportInstanceMethod case
args = unshift(instance, args).cast();
ret = runDispatch(instance, dmap, clazz, meth, args);
}
if (ret != null) {
return ret;
}
}
} else {
JavaScriptObject ret = runDispatch(instance, dmap, clazz, meth, arguments);
if (ret == null) {
// ExportInstanceMethod case
arguments = unshift(instance, arguments).cast();
ret = runDispatch(instance, dmap, clazz, meth, arguments);
}