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