src.org.python.modules.jffi.JITInvoker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jython-standalone Show documentation
Show all versions of jython-standalone Show documentation
Jython is an implementation of the high-level, dynamic, object-oriented
language Python written in 100% Pure Java, and seamlessly integrated with
the Java platform. It thus allows you to run Python on any Java platform.
package org.python.modules.jffi;
import com.kenai.jffi.*;
import org.python.core.Py;
import org.python.core.PyObject;
/**
*
*/
abstract public class JITInvoker extends Invoker {
protected static final com.kenai.jffi.Invoker jffiInvoker = com.kenai.jffi.Invoker.getInstance();
protected final com.kenai.jffi.Function jffiFunction;
protected final Invoker fallbackInvoker;
private final int arity;
protected JITInvoker(int arity, com.kenai.jffi.Function function, Invoker fallbackInvoker) {
this.arity = arity;
this.jffiFunction = function;
this.fallbackInvoker = fallbackInvoker;
}
protected final PyObject invalidArity(int got) {
checkArity(arity, got);
return Py.None;
}
protected final void checkArity(PyObject[] args) {
checkArity(arity, args.length);
}
public static void checkArity(int arity, int got) {
if (got != arity) {
throw Py.TypeError(String.format("__call__() takes exactly %d arguments (%d given)", arity, got));
}
}
public PyObject invoke(PyObject[] args) {
checkArity(args);
switch (arity) {
case 0:
return invoke();
case 1:
return invoke(args[0]);
case 2:
return invoke(args[0], args[1]);
case 3:
return invoke(args[0], args[1], args[2]);
case 4:
return invoke(args[0], args[1], args[2], args[3]);
case 5:
return invoke(args[0], args[1], args[2], args[3], args[4]);
case 6:
return invoke(args[0], args[1], args[2], args[3], args[4], args[5]);
default:
throw Py.RuntimeError("invalid fast-int arity");
}
}
}