From 3946247caf2c4e6c4d24439b62611d5c15771467 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Fri, 13 Nov 2015 01:24:52 +0000 Subject: Introduce a `PythonExceptionState` class. This is a helper class which supports a number of features including exception to string formatting with backtrace handling and auto-restore of exception state upon scope exit. Additionally, unit tests are included to verify the feature set of the class. llvm-svn: 252994 --- .../Python/PythonExceptionState.h | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h') diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h b/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h new file mode 100644 index 0000000..854276b --- /dev/null +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonExceptionState.h @@ -0,0 +1,63 @@ +//===-- PythonExceptionState.h ----------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_PYTHONEXCEPTIONSTATE_H +#define LLDB_PLUGINS_SCRIPTINTERPRETER_PYTHON_PYTHONEXCEPTIONSTATE_H + +#include "PythonDataObjects.h" + +namespace lldb_private +{ + +class PythonExceptionState +{ + public: + explicit PythonExceptionState(bool restore_on_exit); + ~PythonExceptionState(); + + void + Acquire(bool restore_on_exit); + + void + Restore(); + + void + Discard(); + + static bool + HasErrorOccurred(); + + bool + IsError() const; + + PythonObject + GetType() const; + + PythonObject + GetValue() const; + + PythonObject + GetTraceback() const; + + std::string + Format() const; + + private: + std::string + ReadBacktrace() const; + + bool m_restore_on_exit; + + PythonObject m_type; + PythonObject m_value; + PythonObject m_traceback; +}; +} + +#endif -- cgit v1.1