/* Lookup the error handling callback function registered under the name error. As a special case NULL can be passed, in which case the error handling callback for strict encoding will be returned. */ PyObject *PyCodec_LookupError(const char *name) { env(NULL); jobject er = (*env)->CallStaticObjectMethod(env, pyCodecsClass, pyCodecsLookupError, (*env)->NewStringUTF(env, name)); jstring tpName = (*env)->CallObjectMethod(env, (*env)->CallObjectMethod(env, er, pyObjectGetType), pyTypeGetName); //puts("tp name obtained:"); jputsLong(__LINE__); cstr_from_jstring(cName, tpName); jputs(cName); return JyNI_PyObject_FromJythonPyObject(er); // PyObject *handler = NULL; // // PyInterpreterState *interp = PyThreadState_GET()->interp; // if (interp->codec_search_path == NULL && _PyCodecRegistry_Init()) // return NULL; // // if (name==NULL) // name = "strict"; // handler = PyDict_GetItemString(interp->codec_error_registry, (char *)name); // if (!handler) // PyErr_Format(PyExc_LookupError, "unknown error handler name '%.400s'", name); // else // Py_INCREF(handler); // return handler; }
PyObject* PyCode_Get_co_name(PyObject* code) { env(NULL); jobject jCode = JyNI_JythonPyObject_FromPyObject(code); jobject jstr = (*env)->GetObjectField(env, jCode, pyCode_co_name); cstr_from_jstring(cstr, jstr); return PyString_FromString(cstr); }
/* * This function returns a NEW reference, i.e. caller must decref it in the end. */ PyObject* JySync_Init_PyClass_From_JyClass(jobject src, PyTypeObject* nonNativeSubtype) { env(NULL); jstring nm = (*env)->GetObjectField(env, src, pyClass___name__Field); cstr_from_jstring(cnm, nm); // jputs("Sync-Class:"); // jputs(cnm); return PyClass_New( JyNI_PyObject_FromJythonPyObject((*env)->GetObjectField(env, src, pyClass___bases__Field)), JyNI_PyObject_FromJythonPyObject((*env)->GetObjectField(env, src, pyClass___dict__Field)), PyString_FromString(cnm)); }
PyObject* PyCode_Get_co_lnotab(PyObject* code) { env(NULL); jobject jCode = JyNI_JythonPyObject_FromPyObject(code); if ((*env)->IsInstanceOf(env, jCode, pyBytecodeClass)) { jobject jstr = (*env)->CallStaticObjectMethod(env, JyNIClass, JyNI_pyCode_co_lnotab, jCode); cstr_from_jstring(cstr, jstr); return PyString_FromString(cstr); } else { return NULL; } }
//PyObject* JySync_Init_PyFunction_From_JyFunction(jobject src) void JySync_PyFunction_From_JyFunction(jobject src, PyObject* dest) { //Need to sync: //func_code, func_globals, func_module, func_defaults, func_closure env(); jobject jCode = (*env)->GetObjectField(env, src, pyFunction___code__Field); PyObject* pt = JyNI_PyObject_FromJythonPyObject(jCode); ((PyFunctionObject*) dest)->func_code = pt; jobject jGlobals = (*env)->CallObjectMethod(env, src, pyFunction_getFuncGlobals); ((PyFunctionObject*) dest)->func_globals = JyNI_PyObject_FromJythonPyObject(jGlobals); jobject jModule = (*env)->GetObjectField(env, src, pyFunction___module__Field); ((PyFunctionObject*) dest)->func_module = JyNI_PyObject_FromJythonPyObject(jModule); jobject jDefaults = (*env)->CallObjectMethod(env, src, pyFunction_getFuncDefaults); ((PyFunctionObject*) dest)->func_defaults = JyNI_PyObject_FromJythonPyObject(jDefaults); jobject jClosure = (*env)->GetObjectField(env, src, pyFunction___closure__Field); ((PyFunctionObject*) dest)->func_closure = JyNI_PyObject_FromJythonPyObject(jClosure); jstring jName = (*env)->GetObjectField(env, src, pyFunction___name__Field); cstr_from_jstring(cName, jName); ((PyFunctionObject*) dest)->func_name = PyString_FromString(cName); }