remove watches from scilab debugger
[scilab.git] / scilab / modules / ast / includes / ast / scilabexception.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010 - DIGITEO - Antoine ELIAS
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #ifndef AST_SCILABEXCEPTION_HXX
17 #define AST_SCILABEXCEPTION_HXX
18
19 #include <string>
20 #include <stdexcept>
21 #include "location.hxx"
22 #include "localization.hxx"
23 //#include "configvariable.hxx"
24
25 extern "C"
26 {
27 #include "lasterror.h"
28 #include "sci_malloc.h"
29 #include "localization.h"
30 }
31
32 //disable warnings about exports STL items
33 #ifdef _MSC_VER
34 #pragma warning (disable : 4251)
35 #endif
36
37 namespace ast
38 {
39
40 enum ExceptionType
41 {
42     TYPE_ERROR,
43     TYPE_EXCEPTION
44 };
45
46 class ScilabException : public std::exception
47 {
48 public :
49     ScilabException() : m_wstErrorMessage(), m_iErrorNumber(0), m_ErrorLocation(), m_type(TYPE_ERROR) {}
50
51     ScilabException(const std::wstring& _wstErrorMesssage)
52     {
53         m_type = TYPE_EXCEPTION;
54         createScilabException(_wstErrorMesssage, 999, Location());
55     }
56
57     ScilabException(const std::string& _stErrorMesssage)
58     {
59         m_type = TYPE_EXCEPTION;
60         wchar_t* pwst = to_wide_string(_stErrorMesssage.c_str());
61         createScilabException(pwst, 999, Location());
62         FREE(pwst);
63     }
64
65     ScilabException(const std::wstring& _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation)
66     {
67         m_type = TYPE_EXCEPTION;
68         createScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation);
69     }
70
71     virtual ~ScilabException() throw() {};
72
73     void SetErrorMessage(const std::wstring& _wstErrorMesssage)
74     {
75         m_wstErrorMessage = _wstErrorMesssage;
76     }
77
78     std::wstring GetErrorMessage(void) const
79     {
80         return m_wstErrorMessage;
81     }
82
83     void SetErrorNumber(int _iErrorNumber)
84     {
85         m_iErrorNumber = _iErrorNumber;
86     }
87
88     int GetErrorNumber(void) const
89     {
90         return m_iErrorNumber;
91     }
92
93     void SetErrorLocation(const Location& _ErrorLocation)
94     {
95         m_ErrorLocation = _ErrorLocation;
96     }
97
98     const Location& GetErrorLocation(void) const
99     {
100         return m_ErrorLocation;
101     }
102
103     void SetErrorType(ExceptionType _type)
104     {
105         m_type = _type;
106     }
107
108     ExceptionType GetErrorType(void)
109     {
110         return m_type;
111     }
112
113 protected :
114     std::wstring m_wstErrorMessage;
115     int m_iErrorNumber;
116     Location m_ErrorLocation;
117     ExceptionType m_type;
118
119 protected :
120     void createScilabException(const std::wstring& _wstErrorMessage, int _iErrorNumber, const Location& _ErrorLocation)
121     {
122         m_wstErrorMessage = _wstErrorMessage;
123         m_iErrorNumber = _iErrorNumber;
124         m_ErrorLocation = _ErrorLocation;
125     }
126 };
127
128 class InternalError : public ScilabException
129 {
130 public :
131     InternalError(const std::wstring& _wstErrorMesssage) : ScilabException(_wstErrorMesssage)
132     {
133         m_type = TYPE_ERROR;
134         setLastError(999, _wstErrorMesssage.c_str(), 0, NULL);
135     }
136
137     InternalError(std::string _stErrorMesssage) : ScilabException(_stErrorMesssage)
138     {
139         m_type = TYPE_ERROR;
140         setLastError(999, m_wstErrorMessage.c_str(), 0, NULL);
141     }
142
143     InternalError(const std::wstring& _wstErrorMesssage, int _iErrorNumber, const Location& _ErrorLocation) : ScilabException(_wstErrorMesssage, _iErrorNumber, _ErrorLocation)
144     {
145         m_type = TYPE_ERROR;
146         setLastError(_iErrorNumber, _wstErrorMesssage.c_str(), _ErrorLocation.first_line, NULL);
147     }
148 };
149
150
151 class InternalAbort : public ScilabException
152 {
153 public:
154     InternalAbort() {}
155 };
156
157 class RecursionException : public ScilabException
158 {
159 public:
160     RecursionException() {}
161 };
162 }
163 #endif // !AST_SCILABEXCEPTION_HXX