1
/****************************************************************************
3
** Copyright (C) 2004-2005 Trolltech AS. All rights reserved.
5
** This file is part of the porting application of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
28
#include "rpptreewalker.h"
32
void RppTreeWalker::evaluateItem(const Item *item)
36
if (Source *source = item->toSource())
37
evaluateSource(source);
38
else if (Directive *directive = item->toDirective())
39
evaluateDirective(directive);
40
else if (IfSection *ifSection = item->toIfSection())
41
evaluateIfSection(ifSection);
42
else if (Text *text = item->toText())
46
void RppTreeWalker::evaluateItemComposite(const ItemComposite *itemComposite)
50
for (int i = 0; i < itemComposite->count(); ++i) {
51
evaluateItem(itemComposite->item(i));
55
void RppTreeWalker::evaluateSource(const Source *source)
57
evaluateItemComposite(source->toItemComposite());
60
void RppTreeWalker::evaluateDirective(const Directive *directive)
64
if (EmptyDirective *dir = directive->toEmptyDirective())
65
evaluateEmptyDirective(dir);
66
else if (ErrorDirective *dir = directive->toErrorDirective())
67
evaluateErrorDirective(dir);
68
else if (PragmaDirective *dir = directive->toPragmaDirective())
69
evaluatePragmaDirective(dir);
70
else if (IncludeDirective *dir = directive->toIncludeDirective())
71
evaluateIncludeDirective(dir);
72
else if (DefineDirective *dir = directive->toDefineDirective())
73
evaluateDefineDirective(dir);
74
else if (UndefDirective *dir = directive->toUndefDirective())
75
evaluateUndefDirective(dir);
76
else if (LineDirective *dir = directive->toLineDirective())
77
evaluateLineDirective(dir);
78
else if (NonDirective *dir = directive->toNonDirective())
79
evaluateNonDirective(dir);
80
else if (NonDirective *dir = directive->toNonDirective())
81
evaluateNonDirective(dir);
82
else if (ConditionalDirective *dir = directive->toConditionalDirective())
83
evaluateConditionalDirective(dir);
87
This function evaluates all the branches of an IfSection. You should
88
override it if you want to only evaluate the "correct" branch.
90
void RppTreeWalker::evaluateIfSection(const IfSection *ifSection)
94
evaluateItemComposite(ifSection->toItemComposite());
97
void RppTreeWalker::evaluateConditionalDirective(const ConditionalDirective *conditionalDirective)
99
if (!conditionalDirective)
101
if (IfdefDirective *dir = conditionalDirective->toIfdefDirective())
102
evaluateIfdefDirective(dir);
103
else if (IfndefDirective *dir = conditionalDirective->toIfndefDirective())
104
evaluateIfndefDirective(dir);
105
else if (IfDirective *dir = conditionalDirective->toIfDirective())
106
evaluateIfDirective(dir);
107
else if (ElifDirective *dir = conditionalDirective->toElifDirective())
108
evaluateElifDirective(dir);
109
else if (ElseDirective *dir = conditionalDirective->toElseDirective())
110
evaluateElseDirective(dir);
113
void RppTreeWalker::evaluateIfdefDirective(const IfdefDirective *directive)
117
evaluateItemComposite(directive->toItemComposite());
120
void RppTreeWalker::evaluateIfndefDirective(const IfndefDirective *directive)
124
evaluateItemComposite(directive->toItemComposite());
127
void RppTreeWalker::evaluateIfDirective(const IfDirective *directive)
131
evaluateItemComposite(directive->toItemComposite());
134
void RppTreeWalker::evaluateElifDirective(const ElifDirective *directive)
138
evaluateItemComposite(directive->toItemComposite());
141
void RppTreeWalker::evaluateElseDirective(const ElseDirective *directive)
145
evaluateItemComposite(directive->toItemComposite());