Commit bc72f09e authored by Kevin Modzelewski's avatar Kevin Modzelewski

Get signal_test working

parent a4becfef
...@@ -600,6 +600,7 @@ extern "C" void PyThread_delete_key_value(int key) noexcept { ...@@ -600,6 +600,7 @@ extern "C" void PyThread_delete_key_value(int key) noexcept {
extern "C" PyObject *_PyThread_CurrentFrames(void) noexcept { extern "C" PyObject *_PyThread_CurrentFrames(void) noexcept {
assert(0 && "check refcounting");
try { try {
LOCK_REGION(&threading_lock); LOCK_REGION(&threading_lock);
BoxedDict* result = new BoxedDict; BoxedDict* result = new BoxedDict;
......
...@@ -115,7 +115,7 @@ Box* sysGetFrame(Box* val) { ...@@ -115,7 +115,7 @@ Box* sysGetFrame(Box* val) {
if (!frame) { if (!frame) {
raiseExcHelper(ValueError, "call stack is not deep enough"); raiseExcHelper(ValueError, "call stack is not deep enough");
} }
return frame; return incref(frame);
} }
Box* sysCurrentFrames() { Box* sysCurrentFrames() {
......
...@@ -1661,7 +1661,6 @@ extern "C" void PyEval_RestoreThread(PyThreadState* tstate) noexcept { ...@@ -1661,7 +1661,6 @@ extern "C" void PyEval_RestoreThread(PyThreadState* tstate) noexcept {
} }
extern "C" BORROWED(struct _frame*) PyEval_GetFrame(void) noexcept { extern "C" BORROWED(struct _frame*) PyEval_GetFrame(void) noexcept {
assert(0 && "check refcounting");
Box* frame = NULL; Box* frame = NULL;
try { try {
frame = getFrame(0); frame = getFrame(0);
......
...@@ -312,7 +312,7 @@ bool exceptionAtLineCheck() { ...@@ -312,7 +312,7 @@ bool exceptionAtLineCheck() {
void exceptionAtLine(Box** traceback) { void exceptionAtLine(Box** traceback) {
if (exceptionAtLineCheck()) { if (exceptionAtLineCheck()) {
PyTraceBack_Here_Tb((struct _frame*)autoDecref(getFrame((FrameInfo*)cur_thread_state.frame_info)), PyTraceBack_Here_Tb((struct _frame*)getFrame((FrameInfo*)cur_thread_state.frame_info),
(PyTracebackObject**)traceback); (PyTracebackObject**)traceback);
} }
} }
......
...@@ -119,7 +119,7 @@ public: ...@@ -119,7 +119,7 @@ public:
if (!f->frame_info->back) if (!f->frame_info->back)
f->_back = incref(None); f->_back = incref(None);
else else
f->_back = BoxedFrame::boxFrame(f->frame_info->back); f->_back = incref(BoxedFrame::boxFrame(f->frame_info->back));
} }
return incref(f->_back); return incref(f->_back);
...@@ -153,11 +153,11 @@ public: ...@@ -153,11 +153,11 @@ public:
DEFAULT_CLASS(frame_cls); DEFAULT_CLASS(frame_cls);
static Box* boxFrame(FrameInfo* fi) { static BORROWED(Box*) boxFrame(FrameInfo* fi) {
if (fi->frame_obj == NULL) if (fi->frame_obj == NULL)
fi->frame_obj = new BoxedFrame(fi); fi->frame_obj = new BoxedFrame(fi);
assert(fi->frame_obj->cls == frame_cls); assert(fi->frame_obj->cls == frame_cls);
return incref(fi->frame_obj); return fi->frame_obj;
} }
static void dealloc(Box* b) noexcept { static void dealloc(Box* b) noexcept {
...@@ -185,12 +185,13 @@ public: ...@@ -185,12 +185,13 @@ public:
return 0; return 0;
} }
static Box* boxFrame(Box* back, BoxedCode* code, Box* globals, Box* locals) { static Box* createFrame(Box* back, BoxedCode* code, Box* globals, Box* locals) {
assert(0 && "ch eck refcounting");
BoxedFrame* frame = new BoxedFrame(NULL); BoxedFrame* frame = new BoxedFrame(NULL);
frame->_back = back; frame->_back = incref(back);
frame->_code = (Box*)code; frame->_code = (Box*)incref(code);
frame->_globals = globals; frame->_globals = incref(globals);
frame->_locals = locals; frame->_locals = incref(locals);
frame->_linenumber = -1; frame->_linenumber = -1;
return frame; return frame;
} }
...@@ -200,11 +201,11 @@ extern "C" int PyFrame_ClearFreeList(void) noexcept { ...@@ -200,11 +201,11 @@ extern "C" int PyFrame_ClearFreeList(void) noexcept {
return 0; // number of entries cleared return 0; // number of entries cleared
} }
Box* getFrame(FrameInfo* frame_info) { BORROWED(Box*) getFrame(FrameInfo* frame_info) {
return BoxedFrame::boxFrame(frame_info); return BoxedFrame::boxFrame(frame_info);
} }
Box* getFrame(int depth) { BORROWED(Box*) getFrame(int depth) {
FrameInfo* frame_info = getPythonFrameInfo(depth); FrameInfo* frame_info = getPythonFrameInfo(depth);
if (!frame_info) if (!frame_info)
return NULL; return NULL;
...@@ -299,7 +300,7 @@ extern "C" PyFrameObject* PyFrame_New(PyThreadState* tstate, PyCodeObject* code, ...@@ -299,7 +300,7 @@ extern "C" PyFrameObject* PyFrame_New(PyThreadState* tstate, PyCodeObject* code,
RELEASE_ASSERT(PyCode_Check((Box*)code), ""); RELEASE_ASSERT(PyCode_Check((Box*)code), "");
RELEASE_ASSERT(!globals || PyDict_Check(globals) || globals->cls == attrwrapper_cls, "%s", globals->cls->tp_name); RELEASE_ASSERT(!globals || PyDict_Check(globals) || globals->cls == attrwrapper_cls, "%s", globals->cls->tp_name);
RELEASE_ASSERT(!locals || PyDict_Check(locals), "%s", locals->cls->tp_name); RELEASE_ASSERT(!locals || PyDict_Check(locals), "%s", locals->cls->tp_name);
return (PyFrameObject*)BoxedFrame::boxFrame(getFrame(0), (BoxedCode*)code, globals, locals); return (PyFrameObject*)BoxedFrame::createFrame(getFrame(0), (BoxedCode*)code, globals, locals);
} }
extern "C" PyObject* PyFrame_GetGlobals(PyFrameObject* f) noexcept { extern "C" PyObject* PyFrame_GetGlobals(PyFrameObject* f) noexcept {
...@@ -310,6 +311,7 @@ extern "C" PyObject* PyFrame_GetCode(PyFrameObject* f) noexcept { ...@@ -310,6 +311,7 @@ extern "C" PyObject* PyFrame_GetCode(PyFrameObject* f) noexcept {
} }
extern "C" PyFrameObject* PyFrame_ForStackLevel(int stack_level) noexcept { extern "C" PyFrameObject* PyFrame_ForStackLevel(int stack_level) noexcept {
assert(0 && "check refcounting -- are callers expecting a borrowed ref?");
return (PyFrameObject*)getFrame(stack_level); return (PyFrameObject*)getFrame(stack_level);
} }
......
...@@ -1363,8 +1363,8 @@ extern Box* dict_descr; ...@@ -1363,8 +1363,8 @@ extern Box* dict_descr;
FunctionMetadata* metadataFromCode(Box* code); FunctionMetadata* metadataFromCode(Box* code);
Box* getFrame(FrameInfo* frame_info); BORROWED(Box*) getFrame(FrameInfo* frame_info);
Box* getFrame(int depth); BORROWED(Box*) getFrame(int depth);
void frameInvalidateBack(BoxedFrame* frame); void frameInvalidateBack(BoxedFrame* frame);
extern "C" void deinitFrame(FrameInfo* frame_info); extern "C" void deinitFrame(FrameInfo* frame_info);
int frameinfo_traverse(FrameInfo* frame_info, visitproc visit, void* arg) noexcept; int frameinfo_traverse(FrameInfo* frame_info, visitproc visit, void* arg) noexcept;
......
# expected: reffail
import signal import signal
for k in sorted(dir(signal)): for k in sorted(dir(signal)):
......
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