124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBError.h -----------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef LLDB_SBError_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define LLDB_SBError_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
135f81547fd786584b10999c087528b323b5945896Eli Friedman#include "lldb/API/SBDefines.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb {
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass SBError {
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SBError ();
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    SBError (const lldb::SBError &rhs);
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~SBError();
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const SBError &
26538eb82a89a68dbc57251915080bd5152b333978Greg Clayton    operator =(const lldb::SBError &rhs);
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetCString () const;
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear ();
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Fail () const;
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Success () const;
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetError () const;
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::ErrorType
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetType () const;
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetError (uint32_t err, lldb::ErrorType type);
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetErrorToErrno ();
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetErrorToGenericError ();
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetErrorString (const char *err_str);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
597e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda    SetErrorStringWithFormat (const char *format, ...) __attribute__ ((format (printf, 2, 3)));
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValid () const;
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6498f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    bool
6598f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice    GetDescription (lldb::SBStream &description);
6698f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
681ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton
69b9d995d0863e1860c12c4ace0d5eb0ba832f9c99Enrico Granata    friend class SBCommandReturnObject;
70915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    friend class SBData;
716e4c5ce0f697eb9899a54854a2a9004e961b0de2Caroline Tice    friend class SBDebugger;
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBCommunication;
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBHostOS;
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBInputReader;
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class SBProcess;
761ebdcc7789aac1ef30ad6dcd485dff86c63136adGreg Clayton    friend class SBThread;
77c5f728c81b4896cfbbc87ed1daedf42ba2c0ee63Greg Clayton    friend class SBTarget;
78c5f728c81b4896cfbbc87ed1daedf42ba2c0ee63Greg Clayton    friend class SBValue;
791fa6b3d6c83955fe06c63d3a4025f2c0ec431d68Greg Clayton    friend class SBWatchpoint;
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Error *
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    get();
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb_private::Error *
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator->();
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const lldb_private::Error &
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator*() const;
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
900baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton    lldb_private::Error &
910baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton    ref();
920baa394cd55c6dfb7a6259d215d0dea2b708067bGreg Clayton
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetError (const lldb_private::Error &lldb_error);
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
97102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton    std::unique_ptr<lldb_private::Error> m_opaque_ap;
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CreateIfNeeded ();
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // LLDB_SBError_h_
107