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