parser error message modified and bug 14039 fixed
[scilab.git] / scilab / modules / ast / includes / parse / parser_private.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
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  * === LICENSE_END ===
14  *
15  */
16
17 #ifndef __PARSER_PRIVATE_HXX__
18 #define __PARSER_PRIVATE_HXX__
19
20 #include "parser.hxx"
21
22 class ParserSingleInstance
23 {
24 public :
25     static Parser::ControlStatus getControlStatus(void)
26     {
27         if (!_control_status.empty())
28         {
29             return _control_status.front();
30         }
31         return Parser::AllControlClosed;
32     }
33
34     static void pushControlStatus(Parser::ControlStatus control_status)
35     {
36         _control_status.push_front(control_status);
37     }
38
39     static void popControlStatus(void)
40     {
41         if (!_control_status.empty())
42         {
43             _control_status.pop_front();
44         }
45     }
46
47     static void resetControlStatus(void)
48     {
49         _control_status.clear();
50     }
51
52     static Parser::ParserStatus getExitStatus(void)
53     {
54         return _exit_status;
55     }
56     static void setExitStatus(Parser::ParserStatus exit_status)
57     {
58         _exit_status = exit_status;
59     }
60
61     static ast::Exp* getTree(void)
62     {
63         return _the_program;
64     }
65     static void setTree(ast::Exp* theProgram)
66     {
67         _the_program = theProgram;
68     }
69
70     /*
71     ** Parsing functions
72     */
73     static void parse(const char *command);
74     static void parseFile(const std::wstring& fileName, const std::wstring& progName);
75
76     /*
77     ** Manage strict Mode
78     */
79     static bool isStrictMode(void)
80     {
81         return _strict_mode;
82     }
83     static void enableStrictMode(void)
84     {
85         _strict_mode = true;
86     }
87     static void disableStrictMode(void)
88     {
89         _strict_mode = false;
90     }
91
92     /*
93     ** Manage error recovery mode
94     */
95     static bool stopOnFirstError(void)
96     {
97         return _stop_on_first_error;
98     }
99     static void enableStopOnFirstError(void)
100     {
101         _stop_on_first_error = true;
102     }
103     static void disableStopOnFirstError(void)
104     {
105         _stop_on_first_error = false;
106     }
107
108     /*
109     ** Bison Debug management
110     */
111     static void enableParseTrace(void);
112     static void disableParseTrace(void);
113
114     /*
115     ** File name management
116     */
117     static const std::wstring getFileName(void)
118     {
119         return _file_name;
120     }
121     static void setFileName(const std::wstring& fileName)
122     {
123         _file_name = fileName;
124     }
125
126     /*
127     ** Program Name Management
128     */
129     static const std::wstring getProgName(void)
130     {
131         return L"Scilab";
132     }
133     static void setProgName(const std::wstring& progName)
134     {
135         _prog_name = progName;
136     }
137
138     /*
139     ** Error Message management
140     */
141     static std::wstring& getErrorMessage(void);
142     static void appendErrorMessage(const std::wstring& ostr);
143     static void resetErrorMessage(void)
144     {
145         _error_message.clear();
146     }
147
148     static void releaseTmpFile();
149     /*
150     ** \brief This funnction returns the parsed code written
151     ** at the given line.
152     ** out = getCodeLine(10, codeline)
153     ** When returning, out == *codeLine, _BUT_ out is allocated by a inner
154     ** function and must be manually free.
155     */
156     static char* getCodeLine(int line, char **codeLine);
157
158     static void PrintError(const std::wstring& msg);
159
160 private :
161     static std::wstring _file_name;
162     static std::wstring _prog_name;
163     static std::wstring _error_message;
164     static bool _strict_mode;
165     static bool _stop_on_first_error;
166     static ast::Exp* _the_program;
167     static Parser::ParserStatus _exit_status;
168     static std::list<Parser::ControlStatus> _control_status;
169     static FILE* fileLocker;
170
171 };
172
173 #endif /* !__PARSER_PRIVATE_HXX__ */
174