Commit 45458e12 authored by Boxiang Sun's avatar Boxiang Sun

apply some pyston changes and enable PyErr_WarnEx

parent b4069ea9
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
extern "C" { extern "C" {
#endif #endif
// Pyston changes: we don't use it for now.
#if 0
typedef struct { typedef struct {
int b_type; /* what kind of block this is */ int b_type; /* what kind of block this is */
int b_handler; /* where to jump to find handler */ int b_handler; /* where to jump to find handler */
...@@ -82,7 +84,12 @@ PyAPI_FUNC(int) PyFrame_ClearFreeList(void); ...@@ -82,7 +84,12 @@ PyAPI_FUNC(int) PyFrame_ClearFreeList(void);
#endif #endif
/* Return the line of code the frame is currently executing. */ /* Return the line of code the frame is currently executing. */
PyAPI_FUNC(int) PyFrame_GetLineNumber(PyObject *) PYSTON_NOEXCEPT; PyAPI_FUNC(int) PyFrame_GetLineNumber(PyObject *) PYSTON_NOEXCEPT;
// Pyston changes: add a function to get globals
PyAPI_FUNC(PyObject *) PyFrame_GetGlobals(PyObject *) PYSTON_NOEXCEPT;
// Pyston changes: add a function to get frame object by level
PyAPI_FUNC(PyObject *) PyFrame_ForStackLevel(int stack_level) PYSTON_NOEXCEPT;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif
#endif /* !Py_FRAMEOBJECT_H */ #endif /* !Py_FRAMEOBJECT_H */
...@@ -25,6 +25,9 @@ PyAPI_FUNC(void) PySys_ResetWarnOptions(void) PYSTON_NOEXCEPT; ...@@ -25,6 +25,9 @@ PyAPI_FUNC(void) PySys_ResetWarnOptions(void) PYSTON_NOEXCEPT;
PyAPI_FUNC(void) PySys_AddWarnOption(char *) PYSTON_NOEXCEPT; PyAPI_FUNC(void) PySys_AddWarnOption(char *) PYSTON_NOEXCEPT;
PyAPI_FUNC(int) PySys_HasWarnOptions(void) PYSTON_NOEXCEPT; PyAPI_FUNC(int) PySys_HasWarnOptions(void) PYSTON_NOEXCEPT;
// Pyston change: add this API to get sys modules dict
PyAPI_FUNC(PyObject *) PySys_GetModulesDict(void) PYSTON_NOEXCEPT;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
extern "C" { extern "C" {
#endif #endif
PyAPI_FUNC(void) _PyWarnings_Init(void) PYSTON_NOEXCEPT; void _PyWarnings_Init(void);
PyAPI_FUNC(int) PyErr_WarnEx(PyObject *, const char *, Py_ssize_t) PYSTON_NOEXCEPT; PyAPI_FUNC(int) PyErr_WarnEx(PyObject *, const char *, Py_ssize_t) PYSTON_NOEXCEPT;
PyAPI_FUNC(int) PyErr_WarnExplicit(PyObject *, const char *, const char *, int, PyAPI_FUNC(int) PyErr_WarnExplicit(PyObject *, const char *, const char *, int,
......
...@@ -280,8 +280,10 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject ...@@ -280,8 +280,10 @@ show_warning(PyObject *filename, int lineno, PyObject *text, PyObject
PyFile_WriteString("\n", f_stderr); PyFile_WriteString("\n", f_stderr);
} }
else else
_Py_DisplaySourceLine(f_stderr, PyString_AS_STRING(filename), // Pyston change: not implemented, comment this out
lineno, 2); // This should implemented with Pyston traceback.
/* _Py_DisplaySourceLine(f_stderr, PyString_AS_STRING(filename), */
/* lineno, 2); */
PyErr_Clear(); PyErr_Clear();
} }
...@@ -446,24 +448,21 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno, ...@@ -446,24 +448,21 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
PyObject *globals; PyObject *globals;
/* Setup globals and lineno. */ /* Setup globals and lineno. */
PyFrameObject *f = PyThreadState_GET()->frame; // Pyston changes: use Pyston's BoxedFrame to get globals and lineno.
while (--stack_level > 0 && f != NULL) PyObject* frame = PyFrame_ForStackLevel(stack_level);
f = f->f_back; if (!frame) {
globals = PySys_GetModulesDict();
if (f == NULL) {
globals = PyThreadState_Get()->interp->sysdict;
*lineno = 1; *lineno = 1;
} } else {
else { globals = PyFrame_GetGlobals(frame);
globals = f->f_globals; *lineno = PyFrame_GetLineNumber(frame);
*lineno = PyFrame_GetLineNumber(f);
} }
*module = NULL; *module = NULL;
/* Setup registry. */ /* Setup registry. */
assert(globals != NULL); assert(globals != NULL);
assert(PyDict_Check(globals)); /* assert(PyDict_Check(globals)); */
*registry = PyDict_GetItemString(globals, "__warningregistry__"); *registry = PyDict_GetItemString(globals, "__warningregistry__");
if (*registry == NULL) { if (*registry == NULL) {
int rc; int rc;
...@@ -905,6 +904,7 @@ _PyWarnings_Init(void) ...@@ -905,6 +904,7 @@ _PyWarnings_Init(void)
_default_action = PyString_FromString("default"); _default_action = PyString_FromString("default");
if (_default_action == NULL) if (_default_action == NULL)
return; return;
Py_INCREF(_default_action);
if (PyModule_AddObject(m, "default_action", _default_action) < 0) if (PyModule_AddObject(m, "default_action", _default_action) < 0)
return; return;
} }
...@@ -41,6 +41,7 @@ BoxedDict* sys_modules_dict; ...@@ -41,6 +41,7 @@ BoxedDict* sys_modules_dict;
extern "C" { extern "C" {
// supposed to be exposed through sys.flags // supposed to be exposed through sys.flags
int Py_BytesWarningFlag = 0; int Py_BytesWarningFlag = 0;
int Py_DivisionWarningFlag = 0;
int Py_HashRandomizationFlag = 0; int Py_HashRandomizationFlag = 0;
} }
...@@ -400,6 +401,10 @@ extern "C" const char* Py_GetPlatform() noexcept { ...@@ -400,6 +401,10 @@ extern "C" const char* Py_GetPlatform() noexcept {
#endif #endif
} }
extern "C" PyObject* PySys_GetModulesDict() noexcept {
return getSysModulesDict();
}
static PyObject* sys_excepthook(PyObject* self, PyObject* args) noexcept { static PyObject* sys_excepthook(PyObject* self, PyObject* args) noexcept {
PyObject* exc, *value, *tb; PyObject* exc, *value, *tb;
if (!PyArg_UnpackTuple(args, "excepthook", 3, 3, &exc, &value, &tb)) if (!PyArg_UnpackTuple(args, "excepthook", 3, 3, &exc, &value, &tb))
......
...@@ -585,8 +585,11 @@ extern "C" int PyObject_IsTrue(PyObject* o) noexcept { ...@@ -585,8 +585,11 @@ extern "C" int PyObject_IsTrue(PyObject* o) noexcept {
extern "C" int PyObject_Not(PyObject* o) noexcept { extern "C" int PyObject_Not(PyObject* o) noexcept {
fatalOrError(PyExc_NotImplementedError, "unimplemented"); int res;
return -1; res = PyObject_IsTrue(o);
if (res < 0)
return res;
return res == 0;
} }
extern "C" PyObject* PyObject_Call(PyObject* callable_object, PyObject* args, PyObject* kw) noexcept { extern "C" PyObject* PyObject_Call(PyObject* callable_object, PyObject* args, PyObject* kw) noexcept {
...@@ -1034,16 +1037,6 @@ extern "C" PyObject* PyErr_Occurred() noexcept { ...@@ -1034,16 +1037,6 @@ extern "C" PyObject* PyErr_Occurred() noexcept {
return cur_thread_state.curexc_type; return cur_thread_state.curexc_type;
} }
extern "C" int PyErr_WarnEx(PyObject* category, const char* text, Py_ssize_t stacklevel) noexcept {
// These warnings are silenced by default:
// We should copy the real CPython code in here
if (category == PyExc_DeprecationWarning)
return 0;
fatalOrError(PyExc_NotImplementedError, "unimplemented");
return -1;
}
extern "C" void* PyObject_Malloc(size_t sz) noexcept { extern "C" void* PyObject_Malloc(size_t sz) noexcept {
return gc_compat_malloc(sz); return gc_compat_malloc(sz);
} }
...@@ -1924,13 +1917,6 @@ Box* BoxedCApiFunction::tppCall(Box* _self, CallRewriteArgs* rewrite_args, ArgPa ...@@ -1924,13 +1917,6 @@ Box* BoxedCApiFunction::tppCall(Box* _self, CallRewriteArgs* rewrite_args, ArgPa
return rtn; return rtn;
} }
/* Warning with explicit origin */
extern "C" int PyErr_WarnExplicit(PyObject* category, const char* text, const char* filename_str, int lineno,
const char* module_str, PyObject* registry) noexcept {
Py_FatalError("unimplemented");
}
/* extension modules might be compiled with GC support so these /* extension modules might be compiled with GC support so these
functions must always be available */ functions must always be available */
......
...@@ -158,6 +158,10 @@ extern "C" PyObject* PyFrame_GetGlobals(Box* f) { ...@@ -158,6 +158,10 @@ extern "C" PyObject* PyFrame_GetGlobals(Box* f) {
return BoxedFrame::globals(f, NULL); return BoxedFrame::globals(f, NULL);
} }
extern "C" PyObject* PyFrame_ForStackLevel(int stack_level) {
return getFrame(stack_level);
}
void setupFrame() { void setupFrame() {
frame_cls frame_cls
= BoxedClass::create(type_cls, object_cls, &BoxedFrame::gchandler, 0, 0, sizeof(BoxedFrame), false, "frame"); = BoxedClass::create(type_cls, object_cls, &BoxedFrame::gchandler, 0, 0, sizeof(BoxedFrame), false, "frame");
......
...@@ -77,6 +77,7 @@ extern "C" void initzlib(); ...@@ -77,6 +77,7 @@ extern "C" void initzlib();
extern "C" void init_codecs(); extern "C" void init_codecs();
extern "C" void init_socket(); extern "C" void init_socket();
extern "C" void _PyUnicode_Init(); extern "C" void _PyUnicode_Init();
extern "C" void _PyWarnings_Init();
extern "C" void _string_init(); extern "C" void _string_init();
extern "C" void initunicodedata(); extern "C" void initunicodedata();
extern "C" void init_weakref(); extern "C" void init_weakref();
...@@ -3937,6 +3938,7 @@ void setupRuntime() { ...@@ -3937,6 +3938,7 @@ void setupRuntime() {
setupClassobj(); setupClassobj();
setupSuper(); setupSuper();
_PyUnicode_Init(); _PyUnicode_Init();
_PyWarnings_Init();
_string_init(); _string_init();
setupDescr(); setupDescr();
setupTraceback(); setupTraceback();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment