diff --git a/Include/Python.h b/Include/Python.h index 2dd8290..aab5810 100644 --- a/Include/Python.h +++ b/Include/Python.h @@ -41,6 +41,12 @@ #include #endif +/* p4a log redirect */ +#include +#include "android/log.h" +#define LOG(x) __android_log_write(ANDROID_LOG_INFO, "python", (x)) + + /* CAUTION: Build setups should ensure that NDEBUG is defined on the * compiler command line when building Python in release mode; else * assert() calls won't be removed. diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 9bb3666..4fb89c5 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1758,13 +1758,14 @@ _PyObject_GC_NewVar(PyTypeObject *tp, Py_ssize_t nitems) PyVarObject *op; if (nitems < 0) { + LOG("PyErr_BadInternalCall in gc"); PyErr_BadInternalCall(); return NULL; } size = _PyObject_VAR_SIZE(tp, nitems); op = (PyVarObject *) _PyObject_GC_Malloc(size); if (op != NULL) - op = PyObject_INIT_VAR(op, tp, nitems); + op = PyObject_INIT_VAR(op, tp, nitems); return op; } diff --git a/Modules/getpath.c b/Modules/getpath.c index c057737..5d02f08 100644 --- a/Modules/getpath.c +++ b/Modules/getpath.c @@ -866,6 +866,7 @@ wchar_t * Py_GetProgramFullPath(void) { if (!module_search_path) + LOG("Py_GetProgramFullPath: calculating path"); calculate_path(); return progpath; } diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 05b7679..be38e75 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -77,6 +77,7 @@ PyFloat_GetInfo(void) floatinfo = PyStructSequence_New(&FloatInfoType); if (floatinfo == NULL) { + LOG("PyFloat_GetInfo got NULL"); return NULL; } @@ -84,22 +85,63 @@ PyFloat_GetInfo(void) PyStructSequence_SET_ITEM(floatinfo, pos++, PyLong_FromLong(flag)) #define SetDblFlag(flag) \ PyStructSequence_SET_ITEM(floatinfo, pos++, PyFloat_FromDouble(flag)) + + LOG("About to start typing to set int and dbl flags"); + if (PyErr_Occurred()) { + LOG("err even before 1!"); + } else { + LOG("no err before this"); + } SetDblFlag(DBL_MAX); + if (PyErr_Occurred()) { + LOG("err 1"); + } SetIntFlag(DBL_MAX_EXP); + if (PyErr_Occurred()) { + LOG("err 2"); + } SetIntFlag(DBL_MAX_10_EXP); + if (PyErr_Occurred()) { + LOG("err 3"); + } SetDblFlag(DBL_MIN); + if (PyErr_Occurred()) { + LOG("err 4"); + } SetIntFlag(DBL_MIN_EXP); + if (PyErr_Occurred()) { + LOG("err 5"); + } SetIntFlag(DBL_MIN_10_EXP); + if (PyErr_Occurred()) { + LOG("err 6"); + } SetIntFlag(DBL_DIG); + if (PyErr_Occurred()) { + LOG("err 7"); + } SetIntFlag(DBL_MANT_DIG); + if (PyErr_Occurred()) { + LOG("err 8"); + } SetDblFlag(DBL_EPSILON); + if (PyErr_Occurred()) { + LOG("err 9"); + } SetIntFlag(FLT_RADIX); + if (PyErr_Occurred()) { + LOG("err 10"); + } SetIntFlag(FLT_ROUNDS); + if (PyErr_Occurred()) { + LOG("err 11"); + } #undef SetIntFlag #undef SetDblFlag if (PyErr_Occurred()) { + LOG("PyErr_Occurred in floatinfo stuff"); Py_CLEAR(floatinfo); return NULL; } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index d9c131c..0840930 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -2297,6 +2297,12 @@ PyUnicode_AsUCS4Copy(PyObject *string) PyObject * PyUnicode_FromWideChar(const wchar_t *w, Py_ssize_t size) { + if (PyErr_Occurred()) { + LOG("PyErr already occurred before PyUnicode_FromWideChar does anything"); + } else { + LOG("start of PyUnicode_FromWideChar; everything seems fine"); + } + if (w == NULL) { if (size == 0) _Py_RETURN_UNICODE_EMPTY(); diff --git a/Python/errors.c b/Python/errors.c index 996292a..20bc3f1 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -755,6 +755,9 @@ PyErr_Format(PyObject *exception, const char *format, ...) { va_list vargs; PyObject* string; + + LOG("PyErr Format with:"); + LOG(format); #ifdef HAVE_STDARG_PROTOTYPES va_start(vargs, format); diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 0327830..e4428d0 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -415,6 +415,7 @@ _Py_InitializeEx_Private(int install_sigs, int install_importlib) /* initialize builtin exceptions */ _PyExc_Init(bimod); + LOG("Got to _PySys_Init"); sysmod = _PySys_Init(); if (sysmod == NULL) Py_FatalError("Py_Initialize: can't initialize sys"); @@ -2594,6 +2595,8 @@ Py_FatalError(const char *msg) { const int fd = fileno(stderr); PyThreadState *tstate; + + LOG(msg); fprintf(stderr, "Fatal Python error: %s\n", msg); fflush(stderr); /* it helps in Windows debug build */ diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 39fe53f..d76c793 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1633,27 +1633,36 @@ _PySys_Init(void) int res; m = PyModule_Create(&sysmodule); - if (m == NULL) + if (m == NULL) { + LOG("module create is NULL"); return NULL; + } sysdict = PyModule_GetDict(m); #define SET_SYS_FROM_STRING_BORROW(key, value) \ do { \ PyObject *v = (value); \ - if (v == NULL) \ + if (v == NULL) { \ + LOG("set from string 1 is NULL"); \ return NULL; \ + } \ res = PyDict_SetItemString(sysdict, key, v); \ if (res < 0) { \ + LOG("_SetItemString thing was NULL"); \ return NULL; \ } \ } while (0) #define SET_SYS_FROM_STRING(key, value) \ do { \ PyObject *v = (value); \ - if (v == NULL) \ + if (v == NULL) { \ + LOG("set from string 2 is NULL"); \ + LOG(key); \ return NULL; \ + } \ res = PyDict_SetItemString(sysdict, key, v); \ Py_DECREF(v); \ if (res < 0) { \ + LOG("_SetItemString 2 thing was NULL"); \ return NULL; \ } \ } while (0) @@ -1677,47 +1686,102 @@ _PySys_Init(void) #endif /* stdin/stdout/stderr are now set by pythonrun.c */ + + if (PyErr_Occurred()) { + LOG("PyErr_Occurred before set_sys_from_string stuff"); + } else { + LOG("PyErr has *NOT* yet occurred before set_sys_from_string stuff"); + } SET_SYS_FROM_STRING_BORROW("__displayhook__", PyDict_GetItemString(sysdict, "displayhook")); + if (PyErr_Occurred()) { + LOG("PyErr after __displayhook__"); + } SET_SYS_FROM_STRING_BORROW("__excepthook__", PyDict_GetItemString(sysdict, "excepthook")); + if (PyErr_Occurred()) { + LOG("PyErr after __excepthook__"); + } SET_SYS_FROM_STRING("version", PyUnicode_FromString(Py_GetVersion())); + if (PyErr_Occurred()) { + LOG("PyErr after __excepthook__"); + } SET_SYS_FROM_STRING("hexversion", PyLong_FromLong(PY_VERSION_HEX)); + if (PyErr_Occurred()) { + LOG("PyErr after hexversion"); + } SET_SYS_FROM_STRING("_mercurial", Py_BuildValue("(szz)", "CPython", _Py_hgidentifier(), _Py_hgversion())); + if (PyErr_Occurred()) { + LOG("PyErr after _mercurial"); + } SET_SYS_FROM_STRING("dont_write_bytecode", PyBool_FromLong(Py_DontWriteBytecodeFlag)); + if (PyErr_Occurred()) { + LOG("PyErr after dont_write_bytecode"); + } SET_SYS_FROM_STRING("api_version", PyLong_FromLong(PYTHON_API_VERSION)); + if (PyErr_Occurred()) { + LOG("PyErr after api_version"); + } SET_SYS_FROM_STRING("copyright", PyUnicode_FromString(Py_GetCopyright())); + if (PyErr_Occurred()) { + LOG("PyErr after copyright"); + } SET_SYS_FROM_STRING("platform", PyUnicode_FromString(Py_GetPlatform())); + if (PyErr_Occurred()) { + LOG("PyErr after platform"); + } else { + LOG("No PyErr yet, about to do executable"); + } SET_SYS_FROM_STRING("executable", PyUnicode_FromWideChar( Py_GetProgramFullPath(), -1)); + if (PyErr_Occurred()) { + LOG("PyErr after executable"); + } SET_SYS_FROM_STRING("prefix", PyUnicode_FromWideChar(Py_GetPrefix(), -1)); + if (PyErr_Occurred()) { + LOG("PyErr after prefix"); + } SET_SYS_FROM_STRING("exec_prefix", PyUnicode_FromWideChar(Py_GetExecPrefix(), -1)); + if (PyErr_Occurred()) { + LOG("PyErr after exec_prefix"); + } SET_SYS_FROM_STRING("base_prefix", PyUnicode_FromWideChar(Py_GetPrefix(), -1)); + if (PyErr_Occurred()) { + LOG("PyErr after base_prefix"); + } SET_SYS_FROM_STRING("base_exec_prefix", PyUnicode_FromWideChar(Py_GetExecPrefix(), -1)); + if (PyErr_Occurred()) { + LOG("PyErr after base_exec_prefix"); + } SET_SYS_FROM_STRING("maxsize", PyLong_FromSsize_t(PY_SSIZE_T_MAX)); + if (PyErr_Occurred()) { + LOG("PyErr_Occurred before float_info stuff"); + } SET_SYS_FROM_STRING("float_info", PyFloat_GetInfo()); SET_SYS_FROM_STRING("int_info", PyLong_GetInfo()); /* initialize hash_info */ if (Hash_InfoType.tp_name == NULL) { - if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0) + if (PyStructSequence_InitType2(&Hash_InfoType, &hash_info_desc) < 0) { + LOG("InitType2 thing was NULL"); return NULL; + } } SET_SYS_FROM_STRING("hash_info", get_hash_info()); @@ -1745,8 +1809,10 @@ _PySys_Init(void) #endif if (warnoptions == NULL) { warnoptions = PyList_New(0); - if (warnoptions == NULL) + if (warnoptions == NULL) { + LOG("warnoptions is NULL"); return NULL; + } } else { Py_INCREF(warnoptions); @@ -1758,8 +1824,10 @@ _PySys_Init(void) /* version_info */ if (VersionInfoType.tp_name == NULL) { if (PyStructSequence_InitType2(&VersionInfoType, - &version_info_desc) < 0) + &version_info_desc) < 0) { + LOG("versioninfo stuff is NULL"); return NULL; + } } version_info = make_version_info(); SET_SYS_FROM_STRING("version_info", version_info); @@ -1775,8 +1843,10 @@ _PySys_Init(void) /* flags */ if (FlagsType.tp_name == 0) { - if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0) + if (PyStructSequence_InitType2(&FlagsType, &flags_desc) < 0) { + LOG("flags stuff is NULL"); return NULL; + } } SET_SYS_FROM_STRING("flags", make_flags()); /* prevent user from creating new instances */ @@ -1790,8 +1860,10 @@ _PySys_Init(void) /* getwindowsversion */ if (WindowsVersionType.tp_name == 0) if (PyStructSequence_InitType2(&WindowsVersionType, - &windows_version_desc) < 0) + &windows_version_desc) < 0) { + LOG("Windows version is NULL"); return NULL; + } /* prevent user from creating new instances */ WindowsVersionType.tp_init = NULL; WindowsVersionType.tp_new = NULL; @@ -1815,8 +1887,10 @@ _PySys_Init(void) #undef SET_SYS_FROM_STRING #undef SET_SYS_FROM_STRING_BORROW - if (PyErr_Occurred()) +if (PyErr_Occurred()) { + LOG("PyErr_Occurred to NULL"); return NULL; + } return m; }