GPL + CeCILL Header change
[scilab.git] / scilab / modules / ast / includes / ast / treevisitor.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2015 - 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 __LISTVISITOR_HXX__
18 #define __LISTVISITOR_HXX__
19
20 #include "dummyvisitor.hxx"
21 #include "tlist.hxx"
22
23 //used by macr2tree to generate a tlist from an AST
24
25 namespace ast
26 {
27 class EXTERN_AST TreeVisitor : public DummyVisitor
28 {
29 public:
30     TreeVisitor() : l(nullptr), eol(nullptr) {}
31     ~TreeVisitor() 
32     {
33         eol->killMe();
34         l->killMe();
35     }
36
37     virtual void visit(const SeqExp  &e);
38     virtual void visit(const CommentExp &e);
39     virtual void visit(const SimpleVar &e);
40     virtual void visit(const DoubleExp &e);
41     virtual void visit(const StringExp &e);
42     virtual void visit(const BoolExp &e);
43     virtual void visit(const DollarVar &e);
44     virtual void visit(const ColonVar &e);
45     virtual void visit(const MatrixExp &e);
46     virtual void visit(const MatrixLineExp &e);
47     virtual void visit(const OpExp &e);
48     virtual void visit(const LogicalOpExp &e);
49     virtual void visit(const IfExp &e);
50     virtual void visit(const ListExp &e);
51     virtual void visit(const AssignExp &e);
52     virtual void visit(const CallExp &e);
53     virtual void visit(const ForExp &e);
54     virtual void visit(const FieldExp &e);
55     virtual void visit(const TryCatchExp  &e);
56     virtual void visit(const WhileExp  &e);
57     virtual void visit(const ContinueExp &/*e*/);
58     virtual void visit(const BreakExp &/*e*/);
59     virtual void visit(const ReturnExp &e);
60     virtual void visit(const SelectExp &e);
61     virtual void visit(const CaseExp &e);
62     virtual void visit(const ArrayListExp &e);
63     virtual void visit(const NotExp &e);
64     virtual void visit(const TransposeExp &e);
65     virtual void visit(const FunctionDec &e);
66
67     inline types::List* getList()
68     {
69         return l;
70     }
71
72     static types::List* createVar(const std::wstring& str);
73     static types::List* createConst(types::InternalType* pIT);
74     static types::List* createOperation();
75     static types::List* createAssign();
76     static types::InternalType* getVerbose(const Exp& e);
77
78     types::InternalType* getEOL();
79 private:
80
81     types::List* l;
82     types::List* eol;
83 };
84 }
85 #endif /* !__LISTVISITOR_HXX__ */