Breakpoints condition
[scilab.git] / scilab / modules / ast / includes / ast / breakpoint.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2015 - Scilab Enterprises - 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 __BREAKPOINT_HXX__
17 #define __BREAKPOINT_HXX__
18
19 #include <string>
20 #include "macro.hxx"
21 #include "exp.hxx"
22
23 extern "C"
24 {
25 #include "parsecommand.h"
26 }
27
28 namespace debugger
29 {
30 struct Breakpoint
31 {
32     Breakpoint() :  _pFunctionName(""),
33                     _iMacroLine(0),
34                     _pFileName(""),
35                     _iFileLine(0),
36                     _iFirstColumn(0),
37                     _condition(""),
38                     _conditionError(""),
39                     _conditionExp(NULL),
40                     _enable(true) {}
41     ~Breakpoint()
42     {
43         if (_conditionExp)
44         {
45             delete _conditionExp;
46         }
47     };
48
49     void setFileName(const std::string& name)
50     {
51         _pFileName = name;
52     }
53     const std::string& getFileName() const
54     {
55         return _pFileName;
56     }
57
58     void setFunctionName(const std::string& functionName)
59     {
60         _pFunctionName = functionName;
61     }
62     const std::string& getFunctioName() const
63     {
64         return _pFunctionName;
65     }
66
67     void setMacroLine(int line)
68     {
69         _iMacroLine = line;
70     }
71     int getMacroLine() const
72     {
73         return _iMacroLine;
74     }
75
76     void setBeginLine(int column)
77     {
78         _iFirstColumn = column;
79     }
80     int getBeginLine() const
81     {
82         return _iFirstColumn;
83     }
84
85     void setFileLine(int line)
86     {
87         _iFileLine = line;
88     }
89     int getFileLine() const
90     {
91         return _iFileLine;
92     }
93
94     bool hasMacro() const
95     {
96         return _pFunctionName.empty() == false && _iMacroLine >= 0;
97     }
98
99     bool hasFile() const
100     {
101         return _pFileName.empty() == false && _iFileLine >= 0;
102     }
103
104     bool hasCondition() const
105     {
106         return _condition.empty() == false;
107     }
108
109     bool hasConditionError() const
110     {
111         return _conditionError.empty() == false;
112     }
113
114     void setEnable()
115     {
116         _enable = true;
117     }
118     void setDisable()
119     {
120         _enable = false;
121     }
122     bool isEnable() const
123     {
124         return _enable;
125     }
126
127     const std::string& getConditionError(void)
128     {
129         return _conditionError;
130     }
131
132     void setConditionError(const std::string& error)
133     {
134         _conditionError = error;
135     }
136
137     char* setCondition(const std::string& condition)
138     {
139         _condition = condition;
140         char* error = parseCommand(condition.data(), (void**)(&_conditionExp));
141         if(error)
142         {
143             _conditionError = error;
144             return error;
145         }
146         _conditionExp->mute();
147         return nullptr;
148     }
149
150     const std::string& getCondition() const
151     {
152         return _condition;
153     }
154
155     ast::Exp* getConditionExp()
156     {
157         return _conditionExp;
158     }
159
160 private:
161     std::string _pFunctionName;
162     int _iMacroLine;
163     int _iFirstColumn;
164     std::string _pFileName;
165     int _iFileLine;
166     std::string _condition;
167     std::string _conditionError;
168     ast::Exp* _conditionExp;
169     bool _enable;
170 };
171
172 typedef std::vector<Breakpoint*> Breakpoints;
173
174 }
175
176 #endif /* !__BREAKPOINT_HXX__ */