1 /****************************************************************************
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 ** This file is part of the QtScript module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
10 ** This file contains pre-release code and may not be distributed.
11 ** You may use this file in accordance with the terms and conditions
12 ** contained in the either Technology Preview License Agreement or the
13 ** Beta Release License Agreement.
15 ** GNU Lesser General Public License Usage
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
17 ** General Public License version 2.1 as published by the Free Software
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
19 ** packaging of this file. Please review the following information to
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23 ** In addition, as a special exception, Nokia gives you certain
24 ** additional rights. These rights are described in the Nokia Qt LGPL
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
28 ** GNU General Public License Usage
29 ** Alternatively, this file may be used under the terms of the GNU
30 ** General Public License version 3.0 as published by the Free Software
31 ** Foundation and appearing in the file LICENSE.GPL included in the
32 ** packaging of this file. Please review the following information to
33 ** ensure the GNU General Public License version 3.0 requirements will be
34 ** met: http://www.gnu.org/copyleft/gpl.html.
36 ** If you are unsure which license is appropriate for your use, please
37 ** contact the sales department at http://www.qtsoftware.com/contact.
40 ****************************************************************************/
42 #ifndef QSCRIPTPRETTYPRETTY_P_H
43 #define QSCRIPTPRETTYPRETTY_P_H
49 // This file is not part of the Qt API. It exists purely as an
50 // implementation detail. This header file may change from version to
51 // version without notice, or even be removed.
56 #include <QtCore/qglobal.h>
58 #include "qscriptastvisitor_p.h"
66 class PrettyPretty
: protected AST::Visitor
69 PrettyPretty(QTextStream
&out
);
70 virtual ~PrettyPretty();
72 QTextStream
&operator () (AST::Node
*node
, int level
= 0);
75 void accept(AST::Node
*node
);
77 virtual bool preVisit(AST::Node
*node
);
79 virtual bool visit(AST::ThisExpression
*node
);
80 virtual void endVisit(AST::ThisExpression
*node
);
82 virtual bool visit(AST::IdentifierExpression
*node
);
83 virtual void endVisit(AST::IdentifierExpression
*node
);
85 virtual bool visit(AST::NullExpression
*node
);
86 virtual void endVisit(AST::NullExpression
*node
);
88 virtual bool visit(AST::TrueLiteral
*node
);
89 virtual void endVisit(AST::TrueLiteral
*node
);
91 virtual bool visit(AST::FalseLiteral
*node
);
92 virtual void endVisit(AST::FalseLiteral
*node
);
94 virtual bool visit(AST::StringLiteral
*node
);
95 virtual void endVisit(AST::StringLiteral
*node
);
97 virtual bool visit(AST::NumericLiteral
*node
);
98 virtual void endVisit(AST::NumericLiteral
*node
);
100 virtual bool visit(AST::RegExpLiteral
*node
);
101 virtual void endVisit(AST::RegExpLiteral
*node
);
103 virtual bool visit(AST::ArrayLiteral
*node
);
104 virtual void endVisit(AST::ArrayLiteral
*node
);
106 virtual bool visit(AST::ObjectLiteral
*node
);
107 virtual void endVisit(AST::ObjectLiteral
*node
);
109 virtual bool visit(AST::ElementList
*node
);
110 virtual void endVisit(AST::ElementList
*node
);
112 virtual bool visit(AST::Elision
*node
);
113 virtual void endVisit(AST::Elision
*node
);
115 virtual bool visit(AST::PropertyNameAndValueList
*node
);
116 virtual void endVisit(AST::PropertyNameAndValueList
*node
);
118 virtual bool visit(AST::IdentifierPropertyName
*node
);
119 virtual void endVisit(AST::IdentifierPropertyName
*node
);
121 virtual bool visit(AST::StringLiteralPropertyName
*node
);
122 virtual void endVisit(AST::StringLiteralPropertyName
*node
);
124 virtual bool visit(AST::NumericLiteralPropertyName
*node
);
125 virtual void endVisit(AST::NumericLiteralPropertyName
*node
);
127 virtual bool visit(AST::ArrayMemberExpression
*node
);
128 virtual void endVisit(AST::ArrayMemberExpression
*node
);
130 virtual bool visit(AST::FieldMemberExpression
*node
);
131 virtual void endVisit(AST::FieldMemberExpression
*node
);
133 virtual bool visit(AST::NewMemberExpression
*node
);
134 virtual void endVisit(AST::NewMemberExpression
*node
);
136 virtual bool visit(AST::NewExpression
*node
);
137 virtual void endVisit(AST::NewExpression
*node
);
139 virtual bool visit(AST::CallExpression
*node
);
140 virtual void endVisit(AST::CallExpression
*node
);
142 virtual bool visit(AST::ArgumentList
*node
);
143 virtual void endVisit(AST::ArgumentList
*node
);
145 virtual bool visit(AST::PostIncrementExpression
*node
);
146 virtual void endVisit(AST::PostIncrementExpression
*node
);
148 virtual bool visit(AST::PostDecrementExpression
*node
);
149 virtual void endVisit(AST::PostDecrementExpression
*node
);
151 virtual bool visit(AST::DeleteExpression
*node
);
152 virtual void endVisit(AST::DeleteExpression
*node
);
154 virtual bool visit(AST::VoidExpression
*node
);
155 virtual void endVisit(AST::VoidExpression
*node
);
157 virtual bool visit(AST::TypeOfExpression
*node
);
158 virtual void endVisit(AST::TypeOfExpression
*node
);
160 virtual bool visit(AST::PreIncrementExpression
*node
);
161 virtual void endVisit(AST::PreIncrementExpression
*node
);
163 virtual bool visit(AST::PreDecrementExpression
*node
);
164 virtual void endVisit(AST::PreDecrementExpression
*node
);
166 virtual bool visit(AST::UnaryPlusExpression
*node
);
167 virtual void endVisit(AST::UnaryPlusExpression
*node
);
169 virtual bool visit(AST::UnaryMinusExpression
*node
);
170 virtual void endVisit(AST::UnaryMinusExpression
*node
);
172 virtual bool visit(AST::TildeExpression
*node
);
173 virtual void endVisit(AST::TildeExpression
*node
);
175 virtual bool visit(AST::NotExpression
*node
);
176 virtual void endVisit(AST::NotExpression
*node
);
178 virtual bool visit(AST::BinaryExpression
*node
);
179 virtual void endVisit(AST::BinaryExpression
*node
);
181 virtual bool visit(AST::ConditionalExpression
*node
);
182 virtual void endVisit(AST::ConditionalExpression
*node
);
184 virtual bool visit(AST::Expression
*node
);
185 virtual void endVisit(AST::Expression
*node
);
187 virtual bool visit(AST::Block
*node
);
188 virtual void endVisit(AST::Block
*node
);
190 virtual bool visit(AST::StatementList
*node
);
191 virtual void endVisit(AST::StatementList
*node
);
193 virtual bool visit(AST::VariableStatement
*node
);
194 virtual void endVisit(AST::VariableStatement
*node
);
196 virtual bool visit(AST::VariableDeclarationList
*node
);
197 virtual void endVisit(AST::VariableDeclarationList
*node
);
199 virtual bool visit(AST::VariableDeclaration
*node
);
200 virtual void endVisit(AST::VariableDeclaration
*node
);
202 virtual bool visit(AST::EmptyStatement
*node
);
203 virtual void endVisit(AST::EmptyStatement
*node
);
205 virtual bool visit(AST::ExpressionStatement
*node
);
206 virtual void endVisit(AST::ExpressionStatement
*node
);
208 virtual bool visit(AST::IfStatement
*node
);
209 virtual void endVisit(AST::IfStatement
*node
);
211 virtual bool visit(AST::DoWhileStatement
*node
);
212 virtual void endVisit(AST::DoWhileStatement
*node
);
214 virtual bool visit(AST::WhileStatement
*node
);
215 virtual void endVisit(AST::WhileStatement
*node
);
217 virtual bool visit(AST::ForStatement
*node
);
218 virtual void endVisit(AST::ForStatement
*node
);
220 virtual bool visit(AST::LocalForStatement
*node
);
221 virtual void endVisit(AST::LocalForStatement
*node
);
223 virtual bool visit(AST::ForEachStatement
*node
);
224 virtual void endVisit(AST::ForEachStatement
*node
);
226 virtual bool visit(AST::LocalForEachStatement
*node
);
227 virtual void endVisit(AST::LocalForEachStatement
*node
);
229 virtual bool visit(AST::ContinueStatement
*node
);
230 virtual void endVisit(AST::ContinueStatement
*node
);
232 virtual bool visit(AST::BreakStatement
*node
);
233 virtual void endVisit(AST::BreakStatement
*node
);
235 virtual bool visit(AST::ReturnStatement
*node
);
236 virtual void endVisit(AST::ReturnStatement
*node
);
238 virtual bool visit(AST::WithStatement
*node
);
239 virtual void endVisit(AST::WithStatement
*node
);
241 virtual bool visit(AST::SwitchStatement
*node
);
242 virtual void endVisit(AST::SwitchStatement
*node
);
244 virtual bool visit(AST::CaseBlock
*node
);
245 virtual void endVisit(AST::CaseBlock
*node
);
247 virtual bool visit(AST::CaseClauses
*node
);
248 virtual void endVisit(AST::CaseClauses
*node
);
250 virtual bool visit(AST::CaseClause
*node
);
251 virtual void endVisit(AST::CaseClause
*node
);
253 virtual bool visit(AST::DefaultClause
*node
);
254 virtual void endVisit(AST::DefaultClause
*node
);
256 virtual bool visit(AST::LabelledStatement
*node
);
257 virtual void endVisit(AST::LabelledStatement
*node
);
259 virtual bool visit(AST::ThrowStatement
*node
);
260 virtual void endVisit(AST::ThrowStatement
*node
);
262 virtual bool visit(AST::TryStatement
*node
);
263 virtual void endVisit(AST::TryStatement
*node
);
265 virtual bool visit(AST::Catch
*node
);
266 virtual void endVisit(AST::Catch
*node
);
268 virtual bool visit(AST::Finally
*node
);
269 virtual void endVisit(AST::Finally
*node
);
271 virtual bool visit(AST::FunctionDeclaration
*node
);
272 virtual void endVisit(AST::FunctionDeclaration
*node
);
274 virtual bool visit(AST::FunctionExpression
*node
);
275 virtual void endVisit(AST::FunctionExpression
*node
);
277 virtual bool visit(AST::FormalParameterList
*node
);
278 virtual void endVisit(AST::FormalParameterList
*node
);
280 virtual bool visit(AST::FunctionBody
*node
);
281 virtual void endVisit(AST::FunctionBody
*node
);
283 virtual bool visit(AST::Program
*node
);
284 virtual void endVisit(AST::Program
*node
);
286 virtual bool visit(AST::SourceElements
*node
);
287 virtual void endVisit(AST::SourceElements
*node
);
289 virtual bool visit(AST::FunctionSourceElement
*node
);
290 virtual void endVisit(AST::FunctionSourceElement
*node
);
292 virtual bool visit(AST::StatementSourceElement
*node
);
293 virtual void endVisit(AST::StatementSourceElement
*node
);
295 virtual bool visit(AST::DebuggerStatement
*node
);
296 virtual void endVisit(AST::DebuggerStatement
*node
);
298 int indentLevel(int level
)
300 int was
= m_indentLevel
;
301 m_indentLevel
= level
;
305 void pushIndentLevel()
308 void popIndentLevel()
311 QTextStream
&newlineAndIndent();
313 void acceptAsBlock(AST::Node
*node
);
315 static int operatorPrecedenceLevel(int op
);
316 static int compareOperatorPrecedence(int op1
, int op2
);
322 Q_DISABLE_COPY(PrettyPretty
)
325 } // namespace QScript