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