remove watches from scilab debugger
[scilab.git] / scilab / modules / ast / includes / ast / prettyprintvisitor.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - DIGITEO - Bruno JOFRET
4  *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #ifndef AST_DEBUGVISITOR_HXX
18 #define AST_DEBUGVISITOR_HXX
19
20 #include <iostream>
21 #include <sstream>
22
23 #include "visitor.hxx"
24 #include "allexp.hxx"
25 #include "allvar.hxx"
26 #include "alldec.hxx"
27 #include "alltypes.hxx"
28
29 enum TermColor
30 {
31     NORMAL,
32     BOLD,
33     RED,
34     GREEN,
35     YELLOW,
36     BLUE,
37     MAGENTA,
38     CYAN,
39     WHITE,
40     RESET
41 };
42
43
44 namespace ast
45 {
46 class EXTERN_AST PrettyPrintVisitor : public GenVisitor<const_kind>
47 {
48 public:
49     PrettyPrintVisitor(std::wostream & my_ostr = std::wcerr, const bool _printDecoration = false, const bool _colored = false) :
50         ostr(&my_ostr),
51         printDecoration(_printDecoration)
52     {
53         colored = _colored;
54     }
55
56     PrettyPrintVisitor* clone()
57     {
58         return new PrettyPrintVisitor(*ostr);
59     }
60     /** \name Visit Matrix Expressions nodes.
61      ** \{ */
62 public :
63     virtual void visit (const MatrixExp &e);
64     virtual void visit (const MatrixLineExp &e);
65     /** \} */
66
67     /** \name Visit Cell Expressions nodes.
68      ** \{ */
69 public :
70     virtual void visit (const CellExp &e);
71     /** \} */
72
73     /** \name Visit Constant Expressions nodes.
74      ** \{ */
75 public :
76     virtual void visit (const StringExp &e);
77     virtual void visit (const CommentExp &e);
78     virtual void visit (const DoubleExp  &e);
79     virtual void visit (const BoolExp  &e);
80     virtual void visit (const NilExp &e);
81     /** \} */
82
83     /** \name Visit Variable related nodes.
84      ** \{ */
85     virtual void visit (const SimpleVar &e);
86     virtual void visit (const ColonVar &e);
87     virtual void visit (const DollarVar &e);
88     virtual void visit (const ArrayListVar &e);
89     /** \} */
90
91     /** \name Visit Control Expressions or Instructions nodes.
92      ** \{ */
93     virtual void visit (const FieldExp &e);
94     virtual void visit (const OpExp &e);
95     virtual void visit (const LogicalOpExp &e);
96     virtual void visit (const AssignExp  &e);
97     virtual void visit (const CellCallExp &e);
98     virtual void visit (const CallExp &e);
99     virtual void visit (const IfExp  &e);
100     virtual void visit (const TryCatchExp  &e);
101     virtual void visit (const WhileExp  &e);
102     virtual void visit (const ForExp  &e);
103     virtual void visit (const BreakExp &e);
104     virtual void visit (const ContinueExp &e);
105     virtual void visit (const ReturnExp &e);
106     virtual void visit (const SeqExp  &e);
107     virtual void visit (const SelectExp  &e);
108     virtual void visit (const CaseExp  &e);
109     virtual void visit (const ArrayListExp  &e);
110     virtual void visit (const AssignListExp  &e);
111     /** \} */
112
113     /** \name Visit Single Operation nodes.
114      ** \{ */
115     virtual void visit (const NotExp &e);
116     virtual void visit (const TransposeExp &e);
117     /** \} */
118
119     /** \name Visit Declaration nodes.
120      ** \{ */
121     /** \brief Visit Var declarations. */
122     virtual void visit (const VarDec &e);
123     virtual void visit (const FunctionDec &e);
124     /** \} */
125
126     /** \name Visit Type dedicated Expressions related node.
127      ** \{ */
128 public:
129     virtual void visit(const ListExp &e);
130
131     /* optimized */
132     virtual void visit(const OptimizedExp &e);
133     virtual void visit(const MemfillExp &e);
134     virtual void visit(const DAXPYExp &e);
135     virtual void visit(const IntSelectExp &e);
136     virtual void visit(const StringSelectExp &e);
137     /** \} */
138
139     template<typename T>
140     inline void printInternalType(std::wostringstream & stream, types::InternalType * pIT)
141     {
142         T * pT = static_cast<T *>(pIT);
143         if (pT)
144         {
145             const int size = pT->getSize();
146             if (size == 0)
147             {
148                 stream << L"[]";
149             }
150             else if (size == 1)
151             {
152                 stream << pT->get(0);
153             }
154             else
155             {
156                 stream << L"[";
157                 const int _size = std::min(4, size);
158                 for (unsigned int i = 0; i < _size - 1; ++i)
159                 {
160                     stream << pT->get(i) << L",";
161                 }
162                 stream << pT->get(_size - 1);
163                 if (size <= _size)
164                 {
165                     stream << L"]";
166                 }
167                 else
168                 {
169                     stream << L"...";
170                 }
171             }
172         }
173     }
174
175     static bool colored;
176 protected:
177
178     std::wostream * ostr;
179     const bool printDecoration;
180
181 private:
182
183     void START_NODE(const ast::Ast & e);
184     void END_NODE(void);
185     void print(const TermColor& cpre, const std::wstring & pre, const Location & loc, const TermColor& cpost, const std::wstring & post, const TermColor& cdeco, const std::wstring & deco);
186     void print(const TermColor& c, const std::wstring & str);
187     void print(const TermColor& c, const std::wstring & str, const Exp & e);
188     void print(const Exp & e);
189     void print(const Location & loc);
190
191
192 };
193
194 }
195 #endif // !AST_DEBUGVISITOR_HXX