📄 pytablecode.java
字号:
//Add another traceback object to the exception if needed if (e.traceback.tb_frame != frame) { PyTraceback tb = new PyTraceback(e.traceback.tb_frame.f_back); tb.tb_next = e.traceback; e.traceback = tb; } frame.f_lasti = -1; if (frame.tracefunc != null) { frame.tracefunc.traceException(frame, e); } if (ss.profilefunc != null) { ss.profilefunc.traceException(frame, e); } //Rethrow the exception to the next stack frame ts.exception = previous_exception; ts.frame = ts.frame.f_back; throw e; } if (frame.tracefunc != null) { frame.tracefunc.traceReturn(frame, ret); } // Handle trace function for profiling if (ss.profilefunc != null) { ss.profilefunc.traceReturn(frame, ret); } // Restore previously defined exception ts.exception = previous_exception; ts.frame = ts.frame.f_back; return ret; } public PyObject call(PyObject globals, PyObject[] defaults, PyObject closure) { if (co_argcount != 0 || args || keywords) return call(Py.EmptyObjects, Py.NoKeywords, globals, defaults, closure); PyFrame frame = new PyFrame(this, globals); if ((co_flags & CO_GENERATOR) != 0) { return new PyGenerator(frame, closure); } return call(frame, closure); } public PyObject call(PyObject arg1, PyObject globals, PyObject[] defaults, PyObject closure) { if (co_argcount != 1 || args || keywords) return call(new PyObject[] {arg1}, Py.NoKeywords, globals, defaults, closure); PyFrame frame = new PyFrame(this, globals); frame.f_fastlocals[0] = arg1; if ((co_flags & CO_GENERATOR) != 0) { return new PyGenerator(frame, closure); } return call(frame, closure); } public PyObject call(PyObject arg1, PyObject arg2, PyObject globals, PyObject[] defaults, PyObject closure) { if (co_argcount != 2 || args || keywords) return call(new PyObject[] {arg1, arg2}, Py.NoKeywords, globals, defaults, closure); PyFrame frame = new PyFrame(this, globals); frame.f_fastlocals[0] = arg1; frame.f_fastlocals[1] = arg2; if ((co_flags & CO_GENERATOR) != 0) { return new PyGenerator(frame, closure); } return call(frame, closure); } public PyObject call(PyObject arg1, PyObject arg2, PyObject arg3, PyObject globals, PyObject[] defaults, PyObject closure) { if (co_argcount != 3 || args || keywords) return call(new PyObject[] {arg1, arg2, arg3}, Py.NoKeywords, globals, defaults, closure); PyFrame frame = new PyFrame(this, globals); frame.f_fastlocals[0] = arg1; frame.f_fastlocals[1] = arg2; frame.f_fastlocals[2] = arg3; if ((co_flags & CO_GENERATOR) != 0) { return new PyGenerator(frame, closure); } return call(frame, closure); } public PyObject call(PyObject self, PyObject call_args[], String call_keywords[], PyObject globals, PyObject[] defaults, PyObject closure) { PyObject[] os = new PyObject[call_args.length+1]; os[0] = (PyObject)self; System.arraycopy(call_args, 0, os, 1, call_args.length); return call(os, call_keywords, globals, defaults, closure); } private String prefix() { return co_name.toString()+"() "; } public PyObject call(PyObject call_args[], String call_keywords[], PyObject globals, PyObject[] defaults, PyObject closure) { //Needs try except finally blocks PyFrame my_frame = new PyFrame(this, globals); PyObject actual_args[], extra_args[] = null; PyDictionary extra_keywords = null; int plain_args = call_args.length - call_keywords.length; int i; if (plain_args > co_argcount) plain_args = co_argcount; actual_args = my_frame.f_fastlocals; if (plain_args > 0) System.arraycopy(call_args, 0, actual_args, 0, plain_args); if (!((call_keywords == null || call_keywords.length == 0) && call_args.length == co_argcount && !keywords && !args)) { if (keywords) extra_keywords = new PyDictionary(); for (i=0; i<call_keywords.length; i++) { int index=0; while (index<co_argcount) { if (co_varnames[index].equals(call_keywords[i])) break; index++; } if (index < co_argcount) { if (actual_args[index] != null) { throw Py.TypeError(prefix()+ "got multiple values for " + "keyword argument '"+ call_keywords[i] + "'"); } actual_args[index] = call_args[i+(call_args.length-call_keywords.length)]; } else { if (extra_keywords == null) { throw Py.TypeError(prefix()+ "got an unexpected keyword " + "argument '"+ call_keywords[i] + "'"); } extra_keywords.__setitem__( call_keywords[i], call_args[i+(call_args.length-call_keywords.length)]); } } if (call_args.length-call_keywords.length > co_argcount) { if (!args) throw Py.TypeError( prefix()+ "too many arguments; expected "+ co_argcount+" got "+ (call_args.length-call_keywords.length)); extra_args = new PyObject[call_args.length- call_keywords.length- co_argcount]; for (i=0; i<extra_args.length; i++) { extra_args[i] = call_args[i+co_argcount]; } } for (i=plain_args; i<co_argcount; i++) { if (actual_args[i] == null) { if (co_argcount-i > defaults.length) { int min = co_argcount-defaults.length; throw Py.TypeError( prefix()+ "takes at least " + min + (min == 1 ? " argument (" : " arguments (") + (call_args.length-call_keywords.length)+ " given)"); } actual_args[i] = defaults[defaults.length-(co_argcount-i)]; } } if (args) { if (extra_args == null) actual_args[co_argcount] = Py.EmptyTuple; else actual_args[co_argcount] = new PyTuple(extra_args); } if (extra_keywords != null) { actual_args[nargs-1] = extra_keywords; } } if ((co_flags & CO_GENERATOR) != 0) { return new PyGenerator(my_frame, closure); } return call(my_frame, closure); } public String toString() { return "<code object " + co_name + " "+Py.idstr(this) + ", file \"" + co_filename + "\", line " + co_firstlineno + ">"; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -