1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
6 ** This file is part of the QtDeclarative module of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
42 #include "qdeclarativejsast_p.h"
44 #include "qdeclarativejsastvisitor_p.h"
46 QT_QML_BEGIN_NAMESPACE
48 namespace QDeclarativeJS { namespace AST {
50 void Node::accept(Visitor *visitor)
52 if (visitor->preVisit(this)) {
55 visitor->postVisit(this);
58 void Node::accept(Node *node, Visitor *visitor)
61 node->accept(visitor);
64 ExpressionNode *Node::expressionCast()
69 BinaryExpression *Node::binaryExpressionCast()
74 Statement *Node::statementCast()
79 UiObjectMember *Node::uiObjectMemberCast()
84 ExpressionNode *ExpressionNode::expressionCast()
89 BinaryExpression *BinaryExpression::binaryExpressionCast()
94 Statement *Statement::statementCast()
99 UiObjectMember *UiObjectMember::uiObjectMemberCast()
104 void NestedExpression::accept0(Visitor *visitor)
106 if (visitor->visit(this)) {
107 accept(expression, visitor);
109 visitor->endVisit(this);
112 void ThisExpression::accept0(Visitor *visitor)
114 if (visitor->visit(this)) {
117 visitor->endVisit(this);
120 void IdentifierExpression::accept0(Visitor *visitor)
122 if (visitor->visit(this)) {
125 visitor->endVisit(this);
128 void NullExpression::accept0(Visitor *visitor)
130 if (visitor->visit(this)) {
133 visitor->endVisit(this);
136 void TrueLiteral::accept0(Visitor *visitor)
138 if (visitor->visit(this)) {
141 visitor->endVisit(this);
144 void FalseLiteral::accept0(Visitor *visitor)
146 if (visitor->visit(this)) {
149 visitor->endVisit(this);
152 void StringLiteral::accept0(Visitor *visitor)
154 if (visitor->visit(this)) {
157 visitor->endVisit(this);
160 void NumericLiteral::accept0(Visitor *visitor)
162 if (visitor->visit(this)) {
165 visitor->endVisit(this);
168 void RegExpLiteral::accept0(Visitor *visitor)
170 if (visitor->visit(this)) {
173 visitor->endVisit(this);
176 void ArrayLiteral::accept0(Visitor *visitor)
178 if (visitor->visit(this)) {
179 accept(elements, visitor);
180 accept(elision, visitor);
183 visitor->endVisit(this);
186 void ObjectLiteral::accept0(Visitor *visitor)
188 if (visitor->visit(this)) {
189 accept(properties, visitor);
192 visitor->endVisit(this);
195 void ElementList::accept0(Visitor *visitor)
197 if (visitor->visit(this)) {
198 for (ElementList *it = this; it; it = it->next) {
199 accept(it->elision, visitor);
200 accept(it->expression, visitor);
204 visitor->endVisit(this);
207 void Elision::accept0(Visitor *visitor)
209 if (visitor->visit(this)) {
213 visitor->endVisit(this);
216 void PropertyNameAndValueList::accept0(Visitor *visitor)
218 if (visitor->visit(this)) {
219 for (PropertyNameAndValueList *it = this; it; it = it->next) {
220 accept(it->name, visitor);
221 accept(it->value, visitor);
225 visitor->endVisit(this);
228 void IdentifierPropertyName::accept0(Visitor *visitor)
230 if (visitor->visit(this)) {
233 visitor->endVisit(this);
236 void StringLiteralPropertyName::accept0(Visitor *visitor)
238 if (visitor->visit(this)) {
241 visitor->endVisit(this);
244 void NumericLiteralPropertyName::accept0(Visitor *visitor)
246 if (visitor->visit(this)) {
249 visitor->endVisit(this);
252 void ArrayMemberExpression::accept0(Visitor *visitor)
254 if (visitor->visit(this)) {
255 accept(base, visitor);
256 accept(expression, visitor);
259 visitor->endVisit(this);
262 void FieldMemberExpression::accept0(Visitor *visitor)
264 if (visitor->visit(this)) {
265 accept(base, visitor);
268 visitor->endVisit(this);
271 void NewMemberExpression::accept0(Visitor *visitor)
273 if (visitor->visit(this)) {
274 accept(base, visitor);
275 accept(arguments, visitor);
278 visitor->endVisit(this);
281 void NewExpression::accept0(Visitor *visitor)
283 if (visitor->visit(this)) {
284 accept(expression, visitor);
287 visitor->endVisit(this);
290 void CallExpression::accept0(Visitor *visitor)
292 if (visitor->visit(this)) {
293 accept(base, visitor);
294 accept(arguments, visitor);
297 visitor->endVisit(this);
300 void ArgumentList::accept0(Visitor *visitor)
302 if (visitor->visit(this)) {
303 for (ArgumentList *it = this; it; it = it->next) {
304 accept(it->expression, visitor);
308 visitor->endVisit(this);
311 void PostIncrementExpression::accept0(Visitor *visitor)
313 if (visitor->visit(this)) {
314 accept(base, visitor);
317 visitor->endVisit(this);
320 void PostDecrementExpression::accept0(Visitor *visitor)
322 if (visitor->visit(this)) {
323 accept(base, visitor);
326 visitor->endVisit(this);
329 void DeleteExpression::accept0(Visitor *visitor)
331 if (visitor->visit(this)) {
332 accept(expression, visitor);
335 visitor->endVisit(this);
338 void VoidExpression::accept0(Visitor *visitor)
340 if (visitor->visit(this)) {
341 accept(expression, visitor);
344 visitor->endVisit(this);
347 void TypeOfExpression::accept0(Visitor *visitor)
349 if (visitor->visit(this)) {
350 accept(expression, visitor);
353 visitor->endVisit(this);
356 void PreIncrementExpression::accept0(Visitor *visitor)
358 if (visitor->visit(this)) {
359 accept(expression, visitor);
362 visitor->endVisit(this);
365 void PreDecrementExpression::accept0(Visitor *visitor)
367 if (visitor->visit(this)) {
368 accept(expression, visitor);
371 visitor->endVisit(this);
374 void UnaryPlusExpression::accept0(Visitor *visitor)
376 if (visitor->visit(this)) {
377 accept(expression, visitor);
380 visitor->endVisit(this);
383 void UnaryMinusExpression::accept0(Visitor *visitor)
385 if (visitor->visit(this)) {
386 accept(expression, visitor);
389 visitor->endVisit(this);
392 void TildeExpression::accept0(Visitor *visitor)
394 if (visitor->visit(this)) {
395 accept(expression, visitor);
398 visitor->endVisit(this);
401 void NotExpression::accept0(Visitor *visitor)
403 if (visitor->visit(this)) {
404 accept(expression, visitor);
407 visitor->endVisit(this);
410 void BinaryExpression::accept0(Visitor *visitor)
412 if (visitor->visit(this)) {
413 accept(left, visitor);
414 accept(right, visitor);
417 visitor->endVisit(this);
420 void ConditionalExpression::accept0(Visitor *visitor)
422 if (visitor->visit(this)) {
423 accept(expression, visitor);
428 visitor->endVisit(this);
431 void Expression::accept0(Visitor *visitor)
433 if (visitor->visit(this)) {
434 accept(left, visitor);
435 accept(right, visitor);
438 visitor->endVisit(this);
441 void Block::accept0(Visitor *visitor)
443 if (visitor->visit(this)) {
444 accept(statements, visitor);
447 visitor->endVisit(this);
450 void StatementList::accept0(Visitor *visitor)
452 if (visitor->visit(this)) {
453 for (StatementList *it = this; it; it = it->next) {
454 accept(it->statement, visitor);
458 visitor->endVisit(this);
461 void VariableStatement::accept0(Visitor *visitor)
463 if (visitor->visit(this)) {
464 accept(declarations, visitor);
467 visitor->endVisit(this);
470 void VariableDeclarationList::accept0(Visitor *visitor)
472 if (visitor->visit(this)) {
473 for (VariableDeclarationList *it = this; it; it = it->next) {
474 accept(it->declaration, visitor);
478 visitor->endVisit(this);
481 void VariableDeclaration::accept0(Visitor *visitor)
483 if (visitor->visit(this)) {
484 accept(expression, visitor);
487 visitor->endVisit(this);
490 void EmptyStatement::accept0(Visitor *visitor)
492 if (visitor->visit(this)) {
495 visitor->endVisit(this);
498 void ExpressionStatement::accept0(Visitor *visitor)
500 if (visitor->visit(this)) {
501 accept(expression, visitor);
504 visitor->endVisit(this);
507 void IfStatement::accept0(Visitor *visitor)
509 if (visitor->visit(this)) {
510 accept(expression, visitor);
515 visitor->endVisit(this);
518 void DoWhileStatement::accept0(Visitor *visitor)
520 if (visitor->visit(this)) {
521 accept(statement, visitor);
522 accept(expression, visitor);
525 visitor->endVisit(this);
528 void WhileStatement::accept0(Visitor *visitor)
530 if (visitor->visit(this)) {
531 accept(expression, visitor);
532 accept(statement, visitor);
535 visitor->endVisit(this);
538 void ForStatement::accept0(Visitor *visitor)
540 if (visitor->visit(this)) {
541 accept(initialiser, visitor);
542 accept(condition, visitor);
543 accept(expression, visitor);
544 accept(statement, visitor);
547 visitor->endVisit(this);
550 void LocalForStatement::accept0(Visitor *visitor)
552 if (visitor->visit(this)) {
553 accept(declarations, visitor);
554 accept(condition, visitor);
555 accept(expression, visitor);
556 accept(statement, visitor);
559 visitor->endVisit(this);
562 void ForEachStatement::accept0(Visitor *visitor)
564 if (visitor->visit(this)) {
565 accept(initialiser, visitor);
566 accept(expression, visitor);
567 accept(statement, visitor);
570 visitor->endVisit(this);
573 void LocalForEachStatement::accept0(Visitor *visitor)
575 if (visitor->visit(this)) {
576 accept(declaration, visitor);
577 accept(expression, visitor);
578 accept(statement, visitor);
581 visitor->endVisit(this);
584 void ContinueStatement::accept0(Visitor *visitor)
586 if (visitor->visit(this)) {
589 visitor->endVisit(this);
592 void BreakStatement::accept0(Visitor *visitor)
594 if (visitor->visit(this)) {
597 visitor->endVisit(this);
600 void ReturnStatement::accept0(Visitor *visitor)
602 if (visitor->visit(this)) {
603 accept(expression, visitor);
606 visitor->endVisit(this);
609 void WithStatement::accept0(Visitor *visitor)
611 if (visitor->visit(this)) {
612 accept(expression, visitor);
613 accept(statement, visitor);
616 visitor->endVisit(this);
619 void SwitchStatement::accept0(Visitor *visitor)
621 if (visitor->visit(this)) {
622 accept(expression, visitor);
623 accept(block, visitor);
626 visitor->endVisit(this);
629 void CaseBlock::accept0(Visitor *visitor)
631 if (visitor->visit(this)) {
632 accept(clauses, visitor);
633 accept(defaultClause, visitor);
634 accept(moreClauses, visitor);
637 visitor->endVisit(this);
640 void CaseClauses::accept0(Visitor *visitor)
642 if (visitor->visit(this)) {
643 for (CaseClauses *it = this; it; it = it->next) {
644 accept(it->clause, visitor);
648 visitor->endVisit(this);
651 void CaseClause::accept0(Visitor *visitor)
653 if (visitor->visit(this)) {
654 accept(expression, visitor);
655 accept(statements, visitor);
658 visitor->endVisit(this);
661 void DefaultClause::accept0(Visitor *visitor)
663 if (visitor->visit(this)) {
664 accept(statements, visitor);
667 visitor->endVisit(this);
670 void LabelledStatement::accept0(Visitor *visitor)
672 if (visitor->visit(this)) {
673 accept(statement, visitor);
676 visitor->endVisit(this);
679 void ThrowStatement::accept0(Visitor *visitor)
681 if (visitor->visit(this)) {
682 accept(expression, visitor);
685 visitor->endVisit(this);
688 void TryStatement::accept0(Visitor *visitor)
690 if (visitor->visit(this)) {
691 accept(statement, visitor);
692 accept(catchExpression, visitor);
693 accept(finallyExpression, visitor);
696 visitor->endVisit(this);
699 void Catch::accept0(Visitor *visitor)
701 if (visitor->visit(this)) {
702 accept(statement, visitor);
705 visitor->endVisit(this);
708 void Finally::accept0(Visitor *visitor)
710 if (visitor->visit(this)) {
711 accept(statement, visitor);
714 visitor->endVisit(this);
717 void FunctionDeclaration::accept0(Visitor *visitor)
719 if (visitor->visit(this)) {
720 accept(formals, visitor);
721 accept(body, visitor);
724 visitor->endVisit(this);
727 void FunctionExpression::accept0(Visitor *visitor)
729 if (visitor->visit(this)) {
730 accept(formals, visitor);
731 accept(body, visitor);
734 visitor->endVisit(this);
737 void FormalParameterList::accept0(Visitor *visitor)
739 if (visitor->visit(this)) {
743 visitor->endVisit(this);
746 void FunctionBody::accept0(Visitor *visitor)
748 if (visitor->visit(this)) {
749 accept(elements, visitor);
752 visitor->endVisit(this);
755 void Program::accept0(Visitor *visitor)
757 if (visitor->visit(this)) {
758 accept(elements, visitor);
761 visitor->endVisit(this);
764 void SourceElements::accept0(Visitor *visitor)
766 if (visitor->visit(this)) {
767 for (SourceElements *it = this; it; it = it->next) {
768 accept(it->element, visitor);
772 visitor->endVisit(this);
775 void FunctionSourceElement::accept0(Visitor *visitor)
777 if (visitor->visit(this)) {
778 accept(declaration, visitor);
781 visitor->endVisit(this);
784 void StatementSourceElement::accept0(Visitor *visitor)
786 if (visitor->visit(this)) {
787 accept(statement, visitor);
790 visitor->endVisit(this);
793 void DebuggerStatement::accept0(Visitor *visitor)
795 if (visitor->visit(this)) {
798 visitor->endVisit(this);
801 void UiProgram::accept0(Visitor *visitor)
803 if (visitor->visit(this)) {
804 accept(imports, visitor);
805 accept(members, visitor);
808 visitor->endVisit(this);
811 void UiPublicMember::accept0(Visitor *visitor)
813 if (visitor->visit(this)) {
814 accept(statement, visitor);
815 accept(binding, visitor);
818 visitor->endVisit(this);
821 void UiObjectDefinition::accept0(Visitor *visitor)
823 if (visitor->visit(this)) {
824 accept(qualifiedTypeNameId, visitor);
825 accept(initializer, visitor);
828 visitor->endVisit(this);
831 void UiObjectInitializer::accept0(Visitor *visitor)
833 if (visitor->visit(this)) {
834 accept(members, visitor);
837 visitor->endVisit(this);
840 void UiObjectBinding::accept0(Visitor *visitor)
842 if (visitor->visit(this)) {
843 accept(qualifiedId, visitor);
844 accept(qualifiedTypeNameId, visitor);
845 accept(initializer, visitor);
848 visitor->endVisit(this);
851 void UiScriptBinding::accept0(Visitor *visitor)
853 if (visitor->visit(this)) {
854 accept(qualifiedId, visitor);
855 accept(statement, visitor);
858 visitor->endVisit(this);
861 void UiArrayBinding::accept0(Visitor *visitor)
863 if (visitor->visit(this)) {
864 accept(qualifiedId, visitor);
865 accept(members, visitor);
868 visitor->endVisit(this);
871 void UiObjectMemberList::accept0(Visitor *visitor)
873 if (visitor->visit(this)) {
874 for (UiObjectMemberList *it = this; it; it = it->next)
875 accept(it->member, visitor);
878 visitor->endVisit(this);
881 void UiArrayMemberList::accept0(Visitor *visitor)
883 if (visitor->visit(this)) {
884 for (UiArrayMemberList *it = this; it; it = it->next)
885 accept(it->member, visitor);
888 visitor->endVisit(this);
891 void UiQualifiedId::accept0(Visitor *visitor)
893 if (visitor->visit(this)) {
896 visitor->endVisit(this);
899 void UiImport::accept0(Visitor *visitor)
901 if (visitor->visit(this)) {
902 accept(importUri, visitor);
905 visitor->endVisit(this);
908 void UiImportList::accept0(Visitor *visitor)
910 if (visitor->visit(this)) {
911 accept(import, visitor);
912 accept(next, visitor);
915 visitor->endVisit(this);
918 void UiSourceElement::accept0(Visitor *visitor)
920 if (visitor->visit(this)) {
921 accept(sourceElement, visitor);
924 visitor->endVisit(this);
927 } } // namespace QDeclarativeJS::AST