License Header change: Removed the LICENSE_END before beta
[scilab.git] / scilab / modules / ast / includes / ast / macrovarvisitor.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2013 - 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 __MACROVARVISITOR_HXX__
17 #define __MACROVARVISITOR_HXX__
18
19 #include "visitor.hxx"
20 #include "allexp.hxx"
21 #include "allvar.hxx"
22 #include "alldec.hxx"
23 #include "dummyvisitor.hxx"
24
25 /*
26 ** This class defines a dummy visitor which only purpose is to
27 ** followup itself through the AST.
28 */
29
30 namespace ast
31 {
32 class EXTERN_AST MacrovarVisitor : public DummyVisitor
33 {
34 public:
35     MacrovarVisitor()
36     {
37         isAssignExpLeftExp = false;
38     }
39     ~MacrovarVisitor() {}
40
41     MacrovarVisitor* clone()
42     {
43         return new MacrovarVisitor();
44     }
45
46     void visit (const MatrixLineExp &e);
47     void visit (const SimpleVar &e);
48     void visit(const OpExp &e);
49     void visit(const CallExp &e);
50     void visit(const ForExp &e);
51     void visit (const VarDec &e);
52     void visit (const FunctionDec &e);
53     void visit(const FieldExp &e);
54     void visit(const AssignExp &e);
55     void visit(const AssignListExp &e);
56
57     std::list<std::wstring>& getIn();
58     std::list<std::wstring>& getOut();
59     std::list<std::wstring>& getExternal();
60     std::list<std::wstring>& getCalled();
61     std::list<std::wstring>& getLocal();
62     void add(std::list<std::wstring>& lst);
63     void add();
64
65     bool isAlreadyIn(std::list<std::wstring>& lst);
66     bool isAlreadyUsed();
67
68     void addIn(const std::wstring& st)
69     {
70         m_in.push_back(st);
71     }
72
73     void addOut(const std::wstring& st)
74     {
75         m_out.push_back(st);
76     }
77
78     std::list<std::wstring> m_in; //inout variables
79     std::list<std::wstring> m_out; //output functions
80     std::list<std::wstring> m_external; //external variables
81     std::list<std::wstring> m_called; //called functions
82     std::list<std::wstring> m_local; // local variables
83
84     std::wstring m_current;
85     bool isAssignExpLeftExp;
86 };
87 }
88
89 #endif /* !__MACROVARVISITOR_HXX__ */