* Bug #13932 fixed - macrovar was broken in YaSp branch.
[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  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #ifndef __MACROVARVISITOR_HXX__
14 #define __MACROVARVISITOR_HXX__
15
16 #include "visitor.hxx"
17 #include "allexp.hxx"
18 #include "allvar.hxx"
19 #include "alldec.hxx"
20 #include "dummyvisitor.hxx"
21
22 /*
23 ** This class defines a dummy visitor which only purpose is to
24 ** followup itself through the AST.
25 */
26
27 namespace ast
28 {
29 class EXTERN_AST MacrovarVisitor : public DummyVisitor
30 {
31 public:
32     MacrovarVisitor()
33     {
34         isAssignExpLeftExp = false;
35     }
36     ~MacrovarVisitor() {}
37
38     void visit (const MatrixLineExp &e);
39     void visit (const SimpleVar &e);
40     void visit(const OpExp &e);
41     void visit(const CallExp &e);
42     void visit(const ForExp &e);
43     void visit (const VarDec &e);
44     void visit (const FunctionDec &e);
45     void visit(const FieldExp &e);
46     void visit(const AssignExp &e);
47     void visit(const AssignListExp &e);
48
49     std::list<std::wstring>& getIn();
50     std::list<std::wstring>& getOut();
51     std::list<std::wstring>& getExternal();
52     std::list<std::wstring>& getCalled();
53     std::list<std::wstring>& getLocal();
54     void add(std::list<std::wstring>& lst);
55     void add();
56
57     bool isAlreadyIn(std::list<std::wstring>& lst);
58     bool isAlreadyUsed();
59
60     void addIn(std::wstring st)
61     {
62         m_in.push_back(st);
63     }
64
65     void addOut(std::wstring st)
66     {
67         m_out.push_back(st);
68     }
69
70     std::list<std::wstring> m_in; //inout variables
71     std::list<std::wstring> m_out; //output functions
72     std::list<std::wstring> m_external; //external variables
73     std::list<std::wstring> m_called; //called functions
74     std::list<std::wstring> m_local; // local variables
75
76     std::wstring m_current;
77     bool isAssignExpLeftExp;
78 };
79 }
80
81 #endif /* !__MACROVARVISITOR_HXX__ */