org.python.core.PyBuiltinFunctionSet Maven / Gradle / Ivy
// Copyright (c) Corporation for National Research Initiatives
package org.python.core;
/**
* A helper class for faster implementations of commonly called methods.
*
* Subclasses of PyBuiltinFunctionSet will implement some or all of the __call__
* method with a switch on the index number.
*
*/
public class PyBuiltinFunctionSet extends PyBuiltinFunction {
public static final Class exposed_as = PyBuiltinFunction.class;
// used as an index into a big switch statement in the various derived
// class's __call__() methods.
protected int index;
private PyObject doc = Py.None;
/**
* Creates a PyBuiltinFunctionSet that expects 1 argument.
*/
public PyBuiltinFunctionSet(String name, int index){
this(name, index, 1);
}
public PyBuiltinFunctionSet(String name, int index, int numargs){
this(name, index, numargs, numargs);
}
public PyBuiltinFunctionSet(String name, int index, int minargs, int maxargs){
this(name, index, minargs, maxargs, null);
}
// full-blown constructor, specifying everything
public PyBuiltinFunctionSet(String name,
int index,
int minargs,
int maxargs,
String doc) {
super(new DefaultInfo(name, minargs, maxargs));
this.index = index;
if(doc != null) {
this.doc = Py.newString(doc);
}
}
public PyObject fastGetDoc() {
return doc;
}
public boolean isMappingType() {
return false;
}
public boolean isNumberType() {
return false;
}
public boolean isSequenceType() {
return false;
}
public PyObject fancyCall(PyObject[] args) {
throw info.unexpectedCall(args.length, false);
}
public PyObject __call__(PyObject[] args) {
int nargs = args.length;
switch(nargs){
case 0:
return __call__();
case 1:
return __call__(args[0]);
case 2:
return __call__(args[0], args[1]);
case 3:
return __call__(args[0], args[1], args[2]);
case 4:
return __call__(args[0], args[1], args[2], args[3]);
default:
return fancyCall(args);
}
}
public PyObject __call__(PyObject[] args, String[] kws) {
if(kws.length != 0) {
throw Py.TypeError(safeRepr()
+ "(): this function takes no keyword arguments");
}
return __call__(args);
}
public PyObject __call__() {
throw info.unexpectedCall(0, false);
}
public PyObject __call__(PyObject arg1) {
throw info.unexpectedCall(1, false);
}
public PyObject __call__(PyObject arg1, PyObject arg2) {
throw info.unexpectedCall(2, false);
}
public PyObject __call__(PyObject arg1, PyObject arg2, PyObject arg3) {
throw info.unexpectedCall(3, false);
}
public PyObject __call__(PyObject arg1,
PyObject arg2,
PyObject arg3,
PyObject arg4) {
throw info.unexpectedCall(4, false);
}
protected PyBuiltinFunction bind(PyObject self) {
throw Py.TypeError("Can't bind a builtin function");
}
public String toString(){
return "";
}
}