Skip to content

Commit

Permalink
Finish refactoring to separate files.
Browse files Browse the repository at this point in the history
  • Loading branch information
jamadden committed Sep 12, 2023
1 parent 748a9e0 commit 7451810
Show file tree
Hide file tree
Showing 7 changed files with 685 additions and 833 deletions.
62 changes: 62 additions & 0 deletions src/greenlet/TExceptionState.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#ifndef GREENLET_EXCEPTION_STATE_CPP
#define GREENLET_EXCEPTION_STATE_CPP

#include <Python.h>
#include "greenlet_greenlet.hpp"

namespace greenlet {


ExceptionState::ExceptionState()
{
this->clear();
}

void ExceptionState::operator<<(const PyThreadState *const tstate) noexcept
{
this->exc_info = tstate->exc_info;
this->exc_state = tstate->exc_state;
}

void ExceptionState::operator>>(PyThreadState *const tstate) noexcept
{
tstate->exc_state = this->exc_state;
tstate->exc_info =
this->exc_info ? this->exc_info : &tstate->exc_state;
this->clear();
}

void ExceptionState::clear() noexcept
{
this->exc_info = nullptr;
this->exc_state.exc_value = nullptr;
#if !GREENLET_PY311
this->exc_state.exc_type = nullptr;
this->exc_state.exc_traceback = nullptr;
#endif
this->exc_state.previous_item = nullptr;
}

int ExceptionState::tp_traverse(visitproc visit, void* arg) noexcept
{
Py_VISIT(this->exc_state.exc_value);
#if !GREENLET_PY311
Py_VISIT(this->exc_state.exc_type);
Py_VISIT(this->exc_state.exc_traceback);
#endif
return 0;
}

void ExceptionState::tp_clear() noexcept
{
Py_CLEAR(this->exc_state.exc_value);
#if !GREENLET_PY311
Py_CLEAR(this->exc_state.exc_type);
Py_CLEAR(this->exc_state.exc_traceback);
#endif
}


}; // namespace greenlet

#endif // GREENLET_EXCEPTION_STATE_CPP
6 changes: 6 additions & 0 deletions src/greenlet/TGreenlet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -601,4 +601,10 @@ Greenlet::tp_clear()
return 0;
}

bool Greenlet::is_currently_running_in_some_thread() const
{
return this->stack_state.active() && !this->python_state.top_frame();
}


}; // namespace greenlet

0 comments on commit 7451810

Please sign in to comment.