//===-- 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

#ifndef LLDB_DISABLE_PYTHON

#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();

    void
    Reset();

    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

#endif
