Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmldomastdumper.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
6#include <QtQml/private/qqmljsast_p.h>
7#include <QtCore/QDebug>
8#include <QtCore/QString>
9#include <QtCore/QTextStream>
10
12
13namespace QQmlJS {
14namespace Dom {
15using namespace AST;
62// no export, just a supporting class...
64{
65public:
66 AstDumper(const std::function<void(QStringView)> &dumper,
67 AstDumperOptions options = AstDumperOption::None, int indent = 1, int baseIndent = 0,
69 : dumper(dumper), options(options), indent(indent), baseIndent(baseIndent), loc2str(loc2str)
70 {
71 }
72
73private:
74 void start(QStringView str) {
75 dumper(QString::fromLatin1(" ").repeated(baseIndent));
76 dumper(u"<");
77 dumper(str);
78 dumper(u">\n");
79 baseIndent += indent;
80 }
81
82 void stop(QStringView str) {
83 baseIndent -= indent;
84 dumper(QString::fromLatin1(" ").repeated(baseIndent));
85 dumper(u"</");
86 dumper(str);
87 dumper(u">\n");
88 }
89
90 QString quotedString(const QString &s) {
91 QString res(s);
92 return QStringLiteral(u"\"") + res
93 .replace(QLatin1String("\\"), QLatin1String("\\\\"))
94 .replace(QLatin1String("\""), QLatin1String("\\\"")) + QLatin1String("\"");
95 }
96
97 QString quotedString(QStringView s) {
98 return quotedString(s.toString());
99 }
100
101 QString loc(const SourceLocation &s, bool trim = false) {
102 QString tokenStr;
103 if (s.length > 0)
104 tokenStr = loc2str(s).toString()
105 .replace(QLatin1String("\\"), QLatin1String("\\\\"))
106 .replace(QLatin1String("\""),QLatin1String("\\\""));
107 if (trim)
108 tokenStr = tokenStr.trimmed();
109 if (noLocations() || s == SourceLocation())
110 return QLatin1String("\"%1\"").arg(tokenStr);
111 else {
112 return QLatin1String("\"off:%1 len:%2 l:%3 c:%4 %5\"").arg(QString::number(s.offset), QString::number(s.length), QString::number(s.startLine), QString::number(s.startColumn), tokenStr);
113 }
114 }
115
116 QString semicolonToken(const SourceLocation &s)
117 {
118 if (options & AstDumperOption::SloppyCompare)
119 return QString();
120 return QLatin1String(" semicolonToken=") + loc(s);
121 }
122
123 QString boolStr(bool v) { return (v ? quotedString(u"true"): quotedString(u"false")); }
124public:
125 bool preVisit(Node *) override { if (dumpNode()) start(u"Node"); return true; }
126 void postVisit(Node *) override { if (dumpNode()) stop(u"Node"); }
127
128 // Ui
129 bool visit(UiProgram *) override { start(u"UiProgram"); return true; }
130 void endVisit(AST::UiProgram *) override { stop(u"UiProgram"); }
131
132 bool visit(UiHeaderItemList *) override { start(u"UiHeaderItemList"); return true; }
133 void endVisit(AST::UiHeaderItemList *) override { stop(u"UiHeaderItemList"); }
134
135#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
136 bool visit(UiPragmaValueList *el) override {
137 start(QLatin1String("UiPragmaValueList value=%1").arg(el->value));
138 return true;
139 }
140 void endVisit(AST::UiPragmaValueList *) override { stop(u"UiPragmaValueList"); }
141#endif
142
143 bool visit(UiPragma *el) override {
144 start(QLatin1String("UiPragma name=%1 pragmaToken=%2%3")
145 .arg(quotedString(el->name), loc(el->pragmaToken),
146 semicolonToken(el->semicolonToken)));
147 return true;
148 }
149 void endVisit(AST::UiPragma *) override { stop(u"UiPragma"); }
150
151 bool visit(UiImport *el) override {
152 start(QLatin1String("UiImport fileName=%1 importId=%2 importToken=%3 fileNameToken=%4 "
153 "asToken=%5 importIdToken=%6%7")
154 .arg(quotedString(el->fileName), quotedString(el->importId),
155 loc(el->importToken), loc(el->fileNameToken), loc(el->asToken),
156 loc(el->importIdToken), semicolonToken(el->semicolonToken)));
157 return true;
158 }
159 void endVisit(AST::UiImport *el) override {
160 Node::accept(el->version, this);
161 stop(u"UiImport");
162 }
163
164 bool visit(UiPublicMember *el) override {
165 QString typeStr = ((el->type == UiPublicMember::Signal) ? QLatin1String("Signal") :
166 (el->type == UiPublicMember::Property) ? QLatin1String("Property") : QLatin1String("Unexpected(%1)").arg(QString::number(el->type)));
167 start(QLatin1String("UiPublicMember type=%1 typeModifier=%2 name=%3 isDefaultMember=%4 "
168 "isReadonlyMember=%5 isRequired=%6 "
169 "defaultToken=%7 readonlyToken=%8 propertyToken=%9 requiredToken=%10 "
170 "typeModifierToken=%11 typeToken=%12 "
171 "identifierToken=%13 colonToken=%14%15")
172 .arg(quotedString(typeStr), quotedString(el->typeModifier),
173 quotedString(el->name), boolStr(el->isDefaultMember()),
174 boolStr(el->isReadonly()), boolStr(el->isRequired()),
175 loc(el->defaultToken()), loc(el->readonlyToken()),
176 loc(el->propertyToken()), loc(el->requiredToken()),
177 loc(el->typeModifierToken), loc(el->typeToken),
178 loc(el->identifierToken), loc(el->colonToken),
179 semicolonToken(el->semicolonToken)));
180 if (!noAnnotations()) // put annotations inside the node they refer to
181 Node::accept(el->annotations, this);
182 Node::accept(el->memberType, this);
183 return true;
184 }
186 Node::accept(el->parameters, this);
187 stop(u"UiPublicMember");
188 }
189
190 bool visit(AST::UiSourceElement *el) override {
191 start(u"UiSourceElement");
192 if (!noAnnotations()) // put annotations inside the node they refer to
193 Node::accept(el->annotations, this);
194 return true;
195 }
196 void endVisit(AST::UiSourceElement *) override { stop(u"UiSourceElement"); }
197
199 start(u"UiObjectDefinition");
200 if (!noAnnotations()) // put annotations inside the node they refer to
201 Node::accept(el->annotations, this);
202 return true;
203 }
204 void endVisit(AST::UiObjectDefinition *) override { stop(u"UiObjectDefinition"); }
205
207 start(QLatin1String("UiObjectInitializer lbraceToken=%1 rbraceToken=%2")
208 .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
209 return true;
210 }
211 void endVisit(AST::UiObjectInitializer *) override { stop(u"UiObjectInitializer"); }
212
213 bool visit(AST::UiObjectBinding *el) override {
214 start(QLatin1String("UiObjectBinding colonToken=%1 hasOnToken=%2")
215 .arg(loc(el->colonToken), boolStr(el->hasOnToken)));
216 if (!noAnnotations()) // put annotations inside the node they refer to
217 Node::accept(el->annotations, this);
218 return true;
219 }
220 void endVisit(AST::UiObjectBinding *) override { stop(u"UiObjectBinding"); }
221
222 bool visit(AST::UiScriptBinding *el) override {
223 start(QLatin1String("UiScriptBinding colonToken=%1")
224 .arg(loc(el->colonToken)));
225 if (!noAnnotations()) // put annotations inside the node they refer to
226 Node::accept(el->annotations, this);
227 return true;
228 }
229 void endVisit(AST::UiScriptBinding *) override { stop(u"UiScriptBinding"); }
230
231 bool visit(AST::UiArrayBinding *el) override {
232 start(QLatin1String("UiArrayBinding colonToken=%1 lbracketToken=%2 rbracketToken=%3")
233 .arg(loc(el->colonToken), loc(el->lbracketToken), loc(el->rbracketToken)));
234 if (!noAnnotations()) // put annotations inside the node they refer to
235 Node::accept(el->annotations, this);
236 return true;
237 }
238 void endVisit(AST::UiArrayBinding *) override { stop(u"UiArrayBinding"); }
239
240 bool visit(AST::UiParameterList *el) override {
241 start(QLatin1String("UiParameterList name=%1 commaToken=%2 propertyTypeToken=%3 identifierToken=%4 colonToken=%5")
242 .arg(quotedString(el->name), loc(el->commaToken), loc(el->propertyTypeToken), loc(el->identifierToken), loc(el->colonToken)));
243 Node::accept(el->type, this);
244 return true;
245 }
247 stop(u"UiParameterList");
248 Node::accept(el->next, this); // put other args at the same level as this one...
249 }
250
251 bool visit(AST::UiObjectMemberList *) override { start(u"UiObjectMemberList"); return true; }
252 void endVisit(AST::UiObjectMemberList *) override { stop(u"UiObjectMemberList"); }
253
255 start(QLatin1String("UiArrayMemberList commaToken=%1")
256 .arg(loc(el->commaToken)));
257 return true;
258 }
259 void endVisit(AST::UiArrayMemberList *) override { stop(u"UiArrayMemberList"); }
260
261 bool visit(AST::UiQualifiedId *el) override {
262 start(QLatin1String("UiQualifiedId name=%1 identifierToken=%2")
263 .arg(quotedString(el->name), loc(el->identifierToken)));
264 Node::accept(el->next, this);
265 return true;
266 }
267 void endVisit(AST::UiQualifiedId *) override { stop(u"UiQualifiedId"); }
268
270 start(QLatin1String("UiEnumDeclaration enumToken=%1 rbraceToken=%2 name=%3")
271 .arg(loc(el->enumToken), loc(el->rbraceToken), quotedString(el->name)));
272 if (!noAnnotations()) // put annotations inside the node they refer to
273 Node::accept(el->annotations, this);
274 return true;
275 }
276 void endVisit(AST::UiEnumDeclaration *) override { stop(u"UiEnumDeclaration"); }
277
279 start(QLatin1String("UiEnumMemberList member=%1 value=%2 memberToken=%3 valueToken=%4")
280 .arg(quotedString(el->member), quotedString(QString::number(el->value)), loc(el->memberToken), loc(el->valueToken)));
281 return true;
282 }
284 stop(u"UiEnumMemberList");
285 Node::accept(el->next, this); // put other enum members at the same level as this one...
286 }
287
289 start(QLatin1String("UiVersionSpecifier majorVersion=%1 minorVersion=%2 majorToken=%3 minorToken=%4")
290 .arg(quotedString(QString::number(el->version.majorVersion())),
291 quotedString(QString::number(el->version.minorVersion())),
292 loc(el->majorToken), loc(el->minorToken)));
293 return true;
294 }
295 void endVisit(AST::UiVersionSpecifier *) override { stop(u"UiVersionSpecifier"); }
296
298 start(QLatin1String("UiInlineComponent name=%1 componentToken=%2")
299 .arg(quotedString(el->name), loc(el->componentToken)));
300 if (!noAnnotations()) // put annotations inside the node they refer to
301 Node::accept(el->annotations, this);
302 return true;
303 }
304 void endVisit(AST::UiInlineComponent *) override { stop(u"UiInlineComponent"); }
305
306 bool visit(UiRequired *el) override {
307 start(QLatin1String("UiRequired name=%1 requiredToken=%2%3")
308 .arg(quotedString(el->name), loc(el->requiredToken),
309 semicolonToken(el->semicolonToken)));
310 return true;
311 }
312 void endVisit(UiRequired *) override { stop(u"UiRequired"); }
313
314 bool visit(UiAnnotation *) override {
315 start(u"UiAnnotation");
316 return true;
317 }
318 void endVisit(UiAnnotation *) override { stop(u"UiAnnotation"); }
319
320 bool visit(UiAnnotationList *) override {
321 start(u"UiAnnotationList");
322 return true;
323 }
324 void endVisit(UiAnnotationList *) override { stop(u"UiAnnotationList"); }
325
326 // QQmlJS
327 bool visit(AST::TypeExpression *) override {
328 start(u"TypeExpression");
329 return true;
330 }
331 void endVisit(AST::TypeExpression *) override { stop(u"TypeExpression"); }
332
333 bool visit(AST::ThisExpression *el) override {
334 start(QLatin1String("ThisExpression thisToken=%1")
335 .arg(loc(el->thisToken)));
336 return true;
337 }
338 void endVisit(AST::ThisExpression *) override { stop(u"ThisExpression"); }
339
341 start(QLatin1String("IdentifierExpression name=%1 identifierToken=%2")
342 .arg(quotedString(el->name), loc(el->identifierToken)));
343 return true;
344 }
345 void endVisit(AST::IdentifierExpression *) override { stop(u"IdentifierExpression"); }
346
347 bool visit(AST::NullExpression *el) override {
348 start(QLatin1String("NullExpression nullToken=%1")
349 .arg(loc(el->nullToken)));
350 return true;
351 }
352 void endVisit(AST::NullExpression *) override { stop(u"NullExpression"); }
353
354 bool visit(AST::TrueLiteral *el) override {
355 start(QLatin1String("TrueLiteral trueToken=%1")
356 .arg(loc(el->trueToken)));
357 return true;
358 }
359 void endVisit(AST::TrueLiteral *) override { stop(u"TrueLiteral"); }
360
361 bool visit(AST::FalseLiteral *el) override {
362 start(QLatin1String("FalseLiteral falseToken=%1")
363 .arg(loc(el->falseToken)));
364 return true;
365 }
366 void endVisit(AST::FalseLiteral *) override { stop(u"FalseLiteral"); }
367
368 bool visit(AST::SuperLiteral *el) override {
369 start(QLatin1String("SuperLiteral superToken=%1")
370 .arg(loc(el->superToken)));
371 return true;
372 }
373 void endVisit(AST::SuperLiteral *) override { stop(u"SuperLiteral"); }
374
375 bool visit(AST::StringLiteral *el) override {
376 start(QLatin1String("StringLiteral value=%1 literalToken=%2")
377 .arg(quotedString(el->value), loc(el->literalToken)));
378 return true;
379 }
380 void endVisit(AST::StringLiteral *) override { stop(u"StringLiteral"); }
381
382 bool visit(AST::TemplateLiteral *el) override {
383 start(QLatin1String("TemplateLiteral value=%1 rawValue=%2 literalToken=%3")
384 .arg(quotedString(el->value), quotedString(el->rawValue), loc(el->literalToken)));
385 Node::accept(el->expression, this);
386 return true;
387 }
388 void endVisit(AST::TemplateLiteral *) override { stop(u"TemplateLiteral"); }
389
390 bool visit(AST::NumericLiteral *el) override {
391 start(QLatin1String("NumericLiteral value=%1 literalToken=%2")
392 .arg(quotedString(QString::number(el->value)), loc(el->literalToken)));
393 return true;
394 }
395 void endVisit(AST::NumericLiteral *) override { stop(u"NumericLiteral"); }
396
397 bool visit(AST::RegExpLiteral *el) override {
398 start(QLatin1String("RegExpLiteral pattern=%1 flags=%2 literalToken=%3")
399 .arg(quotedString(el->pattern), quotedString(QString::number(el->flags, 16)), loc(el->literalToken)));
400 return true;
401 }
402 void endVisit(AST::RegExpLiteral *) override { stop(u"RegExpLiteral"); }
403
404 bool visit(AST::ArrayPattern *el) override {
405 start(QLatin1String("ArrayPattern lbracketToken=%1 commaToken=%2 rbracketToken=%3 parseMode=%4")
406 .arg(loc(el->lbracketToken),loc(el->commaToken),loc(el->rbracketToken), quotedString(QString::number(el->parseMode, 16))));
407 return true;
408 }
409 void endVisit(AST::ArrayPattern *) override { stop(u"ArrayPattern"); }
410
411 bool visit(AST::ObjectPattern *el) override {
412 start(QLatin1String("ObjectPattern lbraceToken=%1 rbraceToken=%2 parseMode=%3")
413 .arg(loc(el->lbraceToken), loc(el->rbraceToken), quotedString(QString::number(el->parseMode, 16))));
414 return true;
415 }
416 void endVisit(AST::ObjectPattern *) override { stop(u"ObjectPattern"); }
417
418 bool visit(AST::PatternElementList *) override { start(u"PatternElementList"); return true; }
419 void endVisit(AST::PatternElementList *) override { stop(u"PatternElementList"); }
420
421 bool visit(AST::PatternPropertyList *) override { start(u"PatternPropertyList"); return true; }
422 void endVisit(AST::PatternPropertyList *) override { stop(u"PatternPropertyList"); }
423
424 bool visit(AST::PatternElement *el) override {
425 start(QLatin1String("PatternElement identifierToken=%1 bindingIdentifier=%2 type=%3 scope=%4 isForDeclaration=%5")
426 .arg(loc(el->identifierToken), quotedString(el->bindingIdentifier), quotedString(QString::number(el->type, 16)),
427 quotedString(QString::number(static_cast<int>(el->scope), 16)), boolStr(el->isForDeclaration)));
428 return true;
429 }
430 void endVisit(AST::PatternElement *) override { stop(u"PatternElement"); }
431
432 bool visit(AST::PatternProperty *el) override {
433 start(QLatin1String("PatternProperty identifierToken=%1 bindingIdentifier=%2 type=%3 scope=%4 isForDeclaration=%5 colonToken=%6")
434 .arg(loc(el->identifierToken), quotedString(el->bindingIdentifier), quotedString(QString::number(el->type, 16)),
435 quotedString(QString::number(static_cast<int>(el->scope), 16)), boolStr(el->isForDeclaration), loc(el->colonToken)));
436 return true;
437 }
438 void endVisit(AST::PatternProperty *) override { stop(u"PatternProperty"); }
439
440 bool visit(AST::Elision *el) override {
441 start(QLatin1String("Elision commaToken=%1")
442 .arg(loc(el->commaToken)));
443 return true;
444 }
445 void endVisit(AST::Elision *el) override {
446 stop(u"Elision");
447 Node::accept(el->next, this); // emit other elisions at the same level
448 }
449
451 start(QLatin1String("NestedExpression lparenToken=%1 rparenToken=%2")
452 .arg(loc(el->lparenToken), loc(el->rparenToken)));
453 return true;
454 }
455 void endVisit(AST::NestedExpression *) override { stop(u"NestedExpression"); }
456
458 if (options & AstDumperOption::SloppyCompare)
459 start(QLatin1String("StringLiteralOrIdentifierPropertyName id=%1")
460 .arg(quotedString(el->id)));
461 else
462 start(QLatin1String("IdentifierPropertyName id=%1 propertyNameToken=%2")
463 .arg(quotedString(el->id), loc(el->propertyNameToken)));
464 return true;
465 }
467 if (options & AstDumperOption::SloppyCompare)
468 stop(u"StringLiteralOrIdentifierPropertyName");
469 else
470 stop(u"IdentifierPropertyName");
471 }
472
474 if (options & AstDumperOption::SloppyCompare)
475 start(QLatin1String("StringLiteralOrIdentifierPropertyName id=%1")
476 .arg(quotedString(el->id)));
477 else
478 start(QLatin1String("StringLiteralPropertyName id=%1 propertyNameToken=%2")
479 .arg(quotedString(el->id), loc(el->propertyNameToken)));
480 return true;
481 }
483 if (options & AstDumperOption::SloppyCompare)
484 stop(u"StringLiteralOrIdentifierPropertyName");
485 else
486 stop(u"StringLiteralPropertyName");
487 }
488
490 start(QLatin1String("NumericLiteralPropertyName id=%1 propertyNameToken=%2")
491 .arg(quotedString(QString::number(el->id)),loc(el->propertyNameToken)));
492 return true;
493 }
494 void endVisit(AST::NumericLiteralPropertyName *) override { stop(u"NumericLiteralPropertyName"); }
495
497 start(u"ComputedPropertyName");
498 return true;
499 }
500 void endVisit(AST::ComputedPropertyName *) override { stop(u"ComputedPropertyName"); }
501
503 start(QLatin1String("ArrayMemberExpression lbraketToken=%1 rbraketToken=%2")
504 .arg(loc(el->lbracketToken), loc(el->rbracketToken)));
505 return true;
506 }
507 void endVisit(AST::ArrayMemberExpression *) override { stop(u"ArrayMemberExpression"); }
508
510 start(QLatin1String("FieldMemberExpression name=%1 dotToken=%2 identifierToken=%3")
511 .arg(quotedString(el->name), loc(el->dotToken), loc(el->identifierToken)));
512 return true;
513 }
514 void endVisit(AST::FieldMemberExpression *) override { stop(u"FieldMemberExpression"); }
515
516 bool visit(AST::TaggedTemplate *) override {
517 start(u"TaggedTemplate");
518 return true;
519 }
520 void endVisit(AST::TaggedTemplate *) override { stop(u"TaggedTemplate"); }
521
523 start(QLatin1String("NewMemberExpression newToken=%1 lparenToken=%2 rparenToken=%3")
524 .arg(loc(el->newToken), loc(el->lparenToken), loc(el->rparenToken)));
525 return true;
526 }
527 void endVisit(AST::NewMemberExpression *) override { stop(u"NewMemberExpression"); }
528
529 bool visit(AST::NewExpression *el) override {
530 start(QLatin1String("NewExpression newToken=%1")
531 .arg(loc(el->newToken)));
532 return true;
533 }
534 void endVisit(AST::NewExpression *) override { stop(u"NewExpression"); }
535
536 bool visit(AST::CallExpression *el) override {
537 start(QLatin1String("CallExpression lparenToken=%1 rparenToken=%2")
538 .arg(loc(el->lparenToken), loc(el->rparenToken)));
539 return true;
540 }
541 void endVisit(AST::CallExpression *) override { stop(u"CallExpression"); }
542
543 bool visit(AST::ArgumentList *el) override {
544 start(QLatin1String("ArgumentList commaToken=%1 isSpreadElement=%2")
545 .arg(loc(el->commaToken), boolStr(el->isSpreadElement)));
546 return true;
547 }
548 void endVisit(AST::ArgumentList *) override { stop(u"ArgumentList"); }
549
551 start(QLatin1String("PostIncrementExpression incrementToken=%1")
552 .arg(loc(el->incrementToken)));
553 return true;
554 }
555 void endVisit(AST::PostIncrementExpression *) override { stop(u"PostIncrementExpression"); }
556
558 start(QLatin1String("PostDecrementExpression decrementToken=%1")
559 .arg(loc(el->decrementToken)));
560 return true;
561 }
562 void endVisit(AST::PostDecrementExpression *) override { stop(u"PostDecrementExpression"); }
563
565 start(QLatin1String("DeleteExpression deleteToken=%1")
566 .arg(loc(el->deleteToken)));
567 return true;
568 }
569 void endVisit(AST::DeleteExpression *) override { stop(u"DeleteExpression"); }
570
571 bool visit(AST::VoidExpression *el) override {
572 start(QLatin1String("VoidExpression voidToken=%1")
573 .arg(loc(el->voidToken)));
574 return true;
575 }
576 void endVisit(AST::VoidExpression *) override { stop(u"VoidExpression"); }
577
579 start(QLatin1String("TypeOfExpression typeofToken=%1")
580 .arg(loc(el->typeofToken)));
581 return true;
582 }
583 void endVisit(AST::TypeOfExpression *) override { stop(u"TypeOfExpression"); }
584
586 start(QLatin1String("PreIncrementExpression incrementToken=%1")
587 .arg(loc(el->incrementToken)));
588 return true;
589 }
590 void endVisit(AST::PreIncrementExpression *) override { stop(u"PreIncrementExpression"); }
591
593 start(QLatin1String("PreDecrementExpression decrementToken=%1")
594 .arg(loc(el->decrementToken)));
595 return true;
596 }
597 void endVisit(AST::PreDecrementExpression *) override { stop(u"PreDecrementExpression"); }
598
600 start(QLatin1String("UnaryPlusExpression plusToken=%1")
601 .arg(loc(el->plusToken)));
602 return true;
603 }
604 void endVisit(AST::UnaryPlusExpression *) override { stop(u"UnaryPlusExpression"); }
605
607 start(QLatin1String("UnaryMinusExpression minusToken=%1")
608 .arg(loc(el->minusToken)));
609 return true;
610 }
611 void endVisit(AST::UnaryMinusExpression *) override { stop(u"UnaryMinusExpression"); }
612
613 bool visit(AST::TildeExpression *el) override {
614 start(QLatin1String("TildeExpression tildeToken=%1")
615 .arg(loc(el->tildeToken)));
616 return true;
617 }
618 void endVisit(AST::TildeExpression *) override { stop(u"TildeExpression"); }
619
620 bool visit(AST::NotExpression *el) override {
621 start(QLatin1String("NotExpression notToken=%1")
622 .arg(loc(el->notToken)));
623 return true;
624 }
625 void endVisit(AST::NotExpression *) override { stop(u"NotExpression"); }
626
628 start(QLatin1String("BinaryExpression op=%1 operatorToken=%2")
629 .arg(quotedString(QString::number(el->op,16)), loc(el->operatorToken)));
630 return true;
631 }
632 void endVisit(AST::BinaryExpression *) override { stop(u"BinaryExpression"); }
633
635 start(QLatin1String("ConditionalExpression questionToken=%1 colonToken=%2")
636 .arg(loc(el->questionToken), loc(el->colonToken)));
637 return true;
638 }
639 void endVisit(AST::ConditionalExpression *) override { stop(u"ConditionalExpression"); }
640
641 bool visit(AST::Expression *el) override {
642 start(QLatin1String("Expression commaToken=%1")
643 .arg(loc(el->commaToken)));
644 return true;
645 }
646 void endVisit(AST::Expression *) override { stop(u"Expression"); }
647
648 bool visit(AST::Block *el) override {
649 start(QLatin1String("Block lbraceToken=%1 rbraceToken=%2")
650 .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
651 return true;
652 }
653 void endVisit(AST::Block *) override { stop(u"Block"); }
654
655 bool visit(AST::StatementList *) override {
656 start(u"StatementList");
657 return true;
658 }
659 void endVisit(AST::StatementList *) override { stop(u"StatementList"); }
660
662 start(QLatin1String("VariableStatement declarationKindToken=%1")
663 .arg(loc(el->declarationKindToken)));
664 return true;
665 }
666 void endVisit(AST::VariableStatement *) override { stop(u"VariableStatement"); }
667
669 start(QLatin1String("VariableDeclarationList commaToken=%1")
670 .arg(loc(el->commaToken)));
671 return true;
672 }
673 void endVisit(AST::VariableDeclarationList *) override { stop(u"VariableDeclarationList"); }
674
675 bool visit(AST::EmptyStatement *el) override {
676 start(QLatin1String("EmptyStatement%1").arg(semicolonToken(el->semicolonToken)));
677 return true;
678 }
679 void endVisit(AST::EmptyStatement *) override { stop(u"EmptyStatement"); }
680
682 if (options & AstDumperOption::SloppyCompare)
683 start(u"ExpressionStatement");
684 else
685 start(QLatin1String("ExpressionStatement%1").arg(semicolonToken(el->semicolonToken)));
686 return true;
687 }
688 void endVisit(AST::ExpressionStatement *) override { stop(u"ExpressionStatement"); }
689
690 bool visit(AST::IfStatement *el) override {
691 start(QLatin1String("IfStatement ifToken=%1 lparenToken=%2 rparenToken=%3 elseToken=%4")
692 .arg(loc(el->ifToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->elseToken)));
693 return true;
694 }
695 void endVisit(AST::IfStatement *) override { stop(u"IfStatement"); }
696
699 "DoWhileStatement doToken=%1 whileToken=%2 lparenToken=%3 rparenToken=%4%5")
700 .arg(loc(el->doToken), loc(el->whileToken), loc(el->lparenToken),
701 loc(el->rparenToken), semicolonToken(el->semicolonToken)));
702 return true;
703 }
704 void endVisit(AST::DoWhileStatement *) override { stop(u"DoWhileStatement"); }
705
706 bool visit(AST::WhileStatement *el) override {
707 start(QLatin1String("WhileStatement whileToken=%1 lparenToken=%2 rparenToken=%3")
708 .arg(loc(el->whileToken), loc(el->lparenToken), loc(el->rparenToken)));
709 return true;
710 }
711 void endVisit(AST::WhileStatement *) override { stop(u"WhileStatement"); }
712
713 bool visit(AST::ForStatement *el) override {
714 if (options & AstDumperOption::SloppyCompare)
715 start(QLatin1String("ForStatement forToken=%1 lparenToken=%2 rparenToken=%5")
716 .arg(loc(el->forToken), loc(el->lparenToken), loc(el->rparenToken)));
717 else
718 start(QLatin1String("ForStatement forToken=%1 lparenToken=%2 firstSemicolonToken=%3 "
719 "secondSemicolonToken=%4 rparenToken=%5")
720 .arg(loc(el->forToken), loc(el->lparenToken),
721 loc(el->firstSemicolonToken), loc(el->secondSemicolonToken),
722 loc(el->rparenToken)));
723 return true;
724 }
725 void endVisit(AST::ForStatement *) override { stop(u"ForStatement"); }
726
728 start(QLatin1String("ForEachStatement forToken=%1 lparenToken=%2 inOfToken=%3 rparenToken=%4 type=%5")
729 .arg(loc(el->forToken), loc(el->lparenToken), loc(el->inOfToken), loc(el->rparenToken), quotedString(QString::number(static_cast<int>(el->type), 16))));
730 return true;
731 }
732 void endVisit(AST::ForEachStatement *) override { stop(u"ForEachStatement"); }
733
735 start(QLatin1String("ContinueStatement label=%1 continueToken=%2 identifierToken=%3%4")
736 .arg(quotedString(el->label), loc(el->continueToken),
737 loc(el->identifierToken), semicolonToken(el->semicolonToken)));
738 return true;
739 }
740 void endVisit(AST::ContinueStatement *) override { stop(u"ContinueStatement"); }
741
742 bool visit(AST::BreakStatement *el) override {
743 start(QLatin1String("BreakStatement label=%1 breakToken=%2 identifierToken=%3%4")
744 .arg(quotedString(el->label), loc(el->breakToken), loc(el->identifierToken),
745 semicolonToken(el->semicolonToken)));
746 return true;
747 }
748 void endVisit(AST::BreakStatement *) override { stop(u"BreakStatement"); }
749
750 bool visit(AST::ReturnStatement *el) override {
751 start(QLatin1String("ReturnStatement returnToken=%1%2")
752 .arg(loc(el->returnToken), semicolonToken(el->semicolonToken)));
753 return true;
754 }
755 void endVisit(AST::ReturnStatement *) override { stop(u"ReturnStatement"); }
756
757 bool visit(AST::YieldExpression *el) override {
758 start(QLatin1String("YieldExpression isYieldStar=%1 yieldToken=%2")
759 .arg(boolStr(el->isYieldStar), loc(el->yieldToken)));
760 return true;
761 }
762 void endVisit(AST::YieldExpression *) override { stop(u"YieldExpression"); }
763
764 bool visit(AST::WithStatement *el) override {
765 start(QLatin1String("WithStatement withToken=%1 lparenToken=%2 rparenToken=%3")
766 .arg(loc(el->withToken), loc(el->lparenToken), loc(el->rparenToken)));
767 return true;
768 }
769 void endVisit(AST::WithStatement *) override { stop(u"WithStatement"); }
770
771 bool visit(AST::SwitchStatement *el) override {
772 start(QLatin1String("SwitchStatement switchToken=%1 lparenToken=%2 rparenToken=%3")
773 .arg(loc(el->switchToken), loc(el->lparenToken), loc(el->rparenToken)));
774 return true;
775 }
776 void endVisit(AST::SwitchStatement *) override { stop(u"SwitchStatement"); }
777
778 bool visit(AST::CaseBlock *el) override {
779 start(QLatin1String("CaseBlock lbraceToken=%1 rbraceToken=%2")
780 .arg(loc(el->lbraceToken), loc(el->rbraceToken)));
781 return true;
782 }
783 void endVisit(AST::CaseBlock *) override { stop(u"CaseBlock"); }
784
785 bool visit(AST::CaseClauses *) override {
786 start(u"CaseClauses");
787 return true;
788 }
789 void endVisit(AST::CaseClauses *) override { stop(u"CaseClauses"); }
790
791 bool visit(AST::CaseClause *el) override {
792 start(QLatin1String("CaseClause caseToken=%1 colonToken=%2")
793 .arg(loc(el->caseToken), loc(el->colonToken)));
794 return true;
795 }
796 void endVisit(AST::CaseClause *) override { stop(u"CaseClause"); }
797
798 bool visit(AST::DefaultClause *el) override {
799 start(QLatin1String("DefaultClause defaultToken=%1 colonToken=%2")
800 .arg(loc(el->defaultToken), loc(el->colonToken)));
801 return true;
802 }
803 void endVisit(AST::DefaultClause *) override { stop(u"DefaultClause"); }
804
806 start(QLatin1String("LabelledStatement label=%1 identifierToken=%2 colonToken=%3")
807 .arg(quotedString(el->label), loc(el->identifierToken), loc(el->colonToken)));
808 return true;
809 }
810 void endVisit(AST::LabelledStatement *) override { stop(u"LabelledStatement"); }
811
812 bool visit(AST::ThrowStatement *el) override {
813 start(QLatin1String("ThrowStatement throwToken=%1%2")
814 .arg(loc(el->throwToken), semicolonToken(el->semicolonToken)));
815 return true;
816 }
817 void endVisit(AST::ThrowStatement *) override { stop(u"ThrowStatement"); }
818
819 bool visit(AST::TryStatement *el) override {
820 start(QLatin1String("TryStatement tryToken=%1")
821 .arg(loc(el->tryToken)));
822 return true;
823 }
824 void endVisit(AST::TryStatement *) override { stop(u"TryStatement"); }
825
826 bool visit(AST::Catch *el) override {
827 start(QLatin1String("Catch catchToken=%1 lparenToken=%2 identifierToken=%3 rparenToken=%4")
828 .arg(loc(el->catchToken), loc(el->lparenToken), loc(el->identifierToken), loc(el->rparenToken)));
829 return true;
830 }
831 void endVisit(AST::Catch *) override { stop(u"Catch"); }
832
833 bool visit(AST::Finally *el) override {
834 start(QLatin1String("Finally finallyToken=%1")
835 .arg(loc(el->finallyToken)));
836 return true;
837 }
838 void endVisit(AST::Finally *) override { stop(u"Finally"); }
839
841 start(QLatin1String("FunctionDeclaration name=%1 isArrowFunction=%2 isGenerator=%3 functionToken=%4 "
842 "identifierToken=%5 lparenToken=%6 rparenToken=%7 lbraceToken=%8 rbraceToken=%9")
843 .arg(quotedString(el->name), boolStr(el->isArrowFunction), boolStr(el->isGenerator),
844 loc(el->functionToken, options & AstDumperOption::SloppyCompare),
845 loc(el->identifierToken), loc(el->lparenToken), loc(el->rparenToken), loc(el->lbraceToken),
846 loc(el->rbraceToken)));
847 return true;
848 }
849 void endVisit(AST::FunctionDeclaration *) override { stop(u"FunctionDeclaration"); }
850
852 start(QLatin1String("FunctionExpression name=%1 isArrowFunction=%2 isGenerator=%3 "
853 "functionToken=%4 "
854 "identifierToken=%5 lparenToken=%6 rparenToken=%7 lbraceToken=%8 "
855 "rbraceToken=%9")
856 .arg(quotedString(el->name), boolStr(el->isArrowFunction),
857 boolStr(el->isGenerator),
858 loc(el->functionToken, options & AstDumperOption::SloppyCompare),
859 loc(el->identifierToken), loc(el->lparenToken), loc(el->rparenToken),
860 loc(el->lbraceToken), loc(el->rbraceToken)));
861 return true;
862 }
863 void endVisit(AST::FunctionExpression *) override { stop(u"FunctionExpression"); }
864
866 start(u"FormalParameterList");
867 return true;
868 }
869 void endVisit(AST::FormalParameterList *) override { stop(u"FormalParameterList"); }
870
871 bool visit(AST::ClassExpression *el) override {
872 start(QLatin1String("ClassExpression name=%1 classToken=%2 identifierToken=%3 lbraceToken=%4 rbraceToken=%5")
873 .arg(quotedString(el->name), loc(el->classToken), loc(el->identifierToken), loc(el->lbraceToken), loc(el->rbraceToken)));
874 return true;
875 }
876 void endVisit(AST::ClassExpression *) override { stop(u"ClassExpression"); }
877
879 start(QLatin1String("ClassDeclaration name=%1 classToken=%2 identifierToken=%3 lbraceToken=%4 rbraceToken=%5")
880 .arg(quotedString(el->name), loc(el->classToken), loc(el->identifierToken), loc(el->lbraceToken), loc(el->rbraceToken)));
881 return true;
882 }
883 void endVisit(AST::ClassDeclaration *) override { stop(u"ClassDeclaration"); }
884
886 start(QLatin1String("ClassElementList isStatic=%1")
887 .arg(boolStr(el->isStatic)));
888 return true;
889 }
890 void endVisit(AST::ClassElementList *) override { stop(u"ClassElementList"); }
891
892 bool visit(AST::Program *) override {
893 start(u"Program");
894 return true;
895 }
896 void endVisit(AST::Program *) override { stop(u"Program"); }
897
898 bool visit(AST::NameSpaceImport *el) override {
899 start(QLatin1String("NameSpaceImport starToken=%1 importedBindingToken=%2 importedBinding=%3")
900 .arg(loc(el->starToken), loc(el->importedBindingToken), quotedString(el->importedBinding)));
901 return true;
902 }
903 void endVisit(AST::NameSpaceImport *) override { stop(u"NameSpaceImport"); }
904
905 bool visit(AST::ImportSpecifier *el) override {
906 start(QLatin1String("ImportSpecifier identifierToken=%1 importedBindingToken=%2 identifier=%3 importedBinding=%4")
907 .arg(loc(el->identifierToken), loc(el->importedBindingToken), quotedString(el->identifier), quotedString(el->importedBinding)));
908 return true;
909 }
910 void endVisit(AST::ImportSpecifier *) override { stop(u"ImportSpecifier"); }
911
912 bool visit(AST::ImportsList *el) override {
913 start(QLatin1String("ImportsList importSpecifierToken=%1")
914 .arg(loc(el->importSpecifierToken)));
915 return true;
916 }
917 void endVisit(AST::ImportsList *) override { stop(u"ImportsList"); }
918
919 bool visit(AST::NamedImports *el) override {
920 start(QLatin1String("NamedImports leftBraceToken=%1 rightBraceToken=%2")
921 .arg(loc(el->leftBraceToken), loc(el->rightBraceToken)));
922 return true;
923 }
924 void endVisit(AST::NamedImports *) override { stop(u"NamedImports"); }
925
926 bool visit(AST::FromClause *el) override {
927 start(QLatin1String("FromClause fromToken=%1 moduleSpecifierToken=%2 moduleSpecifier=%3")
928 .arg(loc(el->fromToken), loc(el->moduleSpecifierToken), quotedString(el->moduleSpecifier)));
929 return true;
930 }
931 void endVisit(AST::FromClause *) override { stop(u"FromClause"); }
932
933 bool visit(AST::ImportClause *el) override {
934 start(QLatin1String("ImportClause importedDefaultBindingToken=%1 importedDefaultBinding=%2")
935 .arg(loc(el->importedDefaultBindingToken), quotedString(el->importedDefaultBinding)));
936 return true;
937 }
938 void endVisit(AST::ImportClause *) override { stop(u"ImportClause"); }
939
941 start(QLatin1String("ImportDeclaration importToken=%1 moduleSpecifierToken=%2 moduleSpecifier=%3")
942 .arg(loc(el->importToken), loc(el->moduleSpecifierToken), quotedString(el->moduleSpecifier)));
943 return true;
944 }
945 void endVisit(AST::ImportDeclaration *) override { stop(u"ImportDeclaration"); }
946
947 bool visit(AST::ExportSpecifier *el) override {
948 start(QLatin1String("ExportSpecifier identifierToken=%1 exportedIdentifierToken=%2 identifier=%3 exportedIdentifier=%4")
949 .arg(loc(el->identifierToken), loc(el->exportedIdentifierToken), quotedString(el->identifier), quotedString(el->exportedIdentifier)));
950 return true;
951 }
952 void endVisit(AST::ExportSpecifier *) override { stop(u"ExportSpecifier"); }
953
954 bool visit(AST::ExportsList *) override {
955 start(u"ExportsList");
956 return true;
957 }
958 void endVisit(AST::ExportsList *) override { stop(u"ExportsList"); }
959
960 bool visit(AST::ExportClause *el) override {
961 start(QLatin1String("ExportClause leftBraceToken=%1 rightBraceToken=%2")
962 .arg(loc(el->leftBraceToken), loc(el->rightBraceToken)));
963 return true;
964 }
965 void endVisit(AST::ExportClause *) override { stop(u"ExportClause"); }
966
968 start(QLatin1String("ExportDeclaration exportToken=%1 exportDefault=%3")
969 .arg(loc(el->exportToken), boolStr(el->exportDefault)));
970 return true;
971 }
972 void endVisit(AST::ExportDeclaration *) override { stop(u"ExportDeclaration"); }
973
974 bool visit(AST::ESModule *) override {
975 start(u"ESModule");
976 return true;
977 }
978 void endVisit(AST::ESModule *) override { stop(u"ESModule"); }
979
981 start(QLatin1String("DebuggerStatement debuggerToken=%1%2")
982 .arg(loc(el->debuggerToken), semicolonToken(el->semicolonToken)));
983 return true;
984 }
985 void endVisit(AST::DebuggerStatement *) override { stop(u"DebuggerStatement"); }
986
987 bool visit(AST::Type *) override {
988 start(u"Type");
989 return true;
990 }
991 void endVisit(AST::Type *) override { stop(u"Type"); }
992
993 bool visit(AST::TypeAnnotation *el) override {
994 start(QLatin1String("TypeAnnotation colonToken=%1")
995 .arg(loc(el->colonToken)));
996 return true;
997 }
998 void endVisit(AST::TypeAnnotation *) override { stop(u"TypeAnnotation"); }
999
1001 qCWarning(domLog) << "Maximum statement or expression depth exceeded in AstDumper";
1002 }
1003
1004private:
1005 // attributes
1006 std::function <void (QStringView)> dumper;
1007 AstDumperOptions options = AstDumperOption::None;
1008 int indent = 0;
1009 int baseIndent = 0;
1011 bool dumpNode(){
1012 return options & AstDumperOption::DumpNode;
1013 }
1014 bool noLocations() {
1015 return options & AstDumperOption::NoLocations;
1016 }
1017 bool noAnnotations() {
1018 return options & AstDumperOption::NoAnnotations;
1019 }
1020};
1021
1023 QDebug noQuote = d.noquote().nospace();
1024 AstDumper visitor([&noQuote](QStringView s){ noQuote << s; });
1025 Node::accept(n, &visitor);
1026 return d;
1027}
1028
1030 QTextStream d1(&s1), d2(&s2);
1031 QList<QString> preLines(nContext);
1032 int nLine = 0;
1033 bool same = true;
1034 QString l1, l2;
1035 while (same && !d1.atEnd() && !d2.atEnd()) {
1036 l1=d1.readLine();
1037 l2=d2.readLine();
1038 if (l1 == l2)
1039 preLines[nLine++ % nContext] = l1;
1040 else
1041 same = false;
1042 }
1043 QString res;
1044 QTextStream ss(&res);
1045 if (!same || !d1.atEnd() || !d2.atEnd()) {
1046 for (int iline = qMin(nLine, nContext); iline > 0; --iline) {
1047 ss << QLatin1String(" ") << preLines[(nLine - iline) % nContext] << QLatin1String("\n");
1048 }
1049 int iline = 0;
1050 if (!same) {
1051 ss << QLatin1String("-") << l1 << QLatin1String("\n");
1052 ++iline;
1053 }
1054 if (same && nContext == 0)
1055 nContext = 1;
1056 for (;iline < nContext && !d1.atEnd(); iline ++) {
1057 l1 = d1.readLine();
1058 ss << QLatin1String("-") << l1 << QLatin1String("\n");
1059 }
1060 iline = 0;
1061 if (!same) {
1062 ss << QLatin1String("+") << l2 << QLatin1String("\n");
1063 ++iline;
1064 }
1065 for (;iline < nContext && !d2.atEnd(); iline ++) {
1066 l2 = d2.readLine();
1067 ss << QLatin1String("+") << l2 << QLatin1String("\n");
1068 }
1069 }
1070 return res;
1071}
1072
1073QString astNodeDiff(AST::Node *n1, AST::Node *n2, int nContext, AstDumperOptions opt, int indent,
1076 QString s1, s2;
1077 QTextStream d1(&s1), d2(&s2);
1078 AstDumper visitor1=AstDumper([&d1](QStringView s){ d1 << s; }, opt, indent, 0, loc2str1);
1079 AstDumper visitor2=AstDumper([&d2](QStringView s){ d2 << s; }, opt, indent, 0, loc2str2);
1080 Node::accept(n1, &visitor1);
1081 Node::accept(n2, &visitor2);
1082 d1.flush();
1083 d2.flush();
1084 return lineDiff(s1, s2, nContext);
1085}
1086
1087void astNodeDumper(const Sink &s, Node *n, AstDumperOptions opt, int indent, int baseIndent,
1089{
1090 AstDumper visitor=AstDumper(s, opt, indent, baseIndent, loc2str);
1091 Node::accept(n, &visitor);
1092}
1093
1094QString astNodeDump(Node *n, AstDumperOptions opt, int indent, int baseIndent,
1096{
1097 return dumperToString(
1098 [n, opt, indent, baseIndent, loc2str = std::move(loc2str)](const Sink &s) {
1099 astNodeDumper(s, n, opt, indent, baseIndent, std::move(loc2str));
1100 });
1101}
1102
1103} // end namespace Dom
1104} // end namespace QQmlJS
1105
\inmodule QtCore
QString arg(Args &&...args) const
void accept(BaseVisitor *visitor)
bool visit(AST::TildeExpression *el) override
bool visit(AST::ClassExpression *el) override
bool visit(UiPragmaValueList *el) override
void endVisit(AST::DefaultClause *) override
bool visit(AST::FormalParameterList *) override
bool visit(AST::NotExpression *el) override
bool visit(AST::FalseLiteral *el) override
void endVisit(AST::ImportSpecifier *) override
void endVisit(AST::ForEachStatement *) override
bool visit(AST::NameSpaceImport *el) override
void endVisit(AST::UiSourceElement *) override
void endVisit(AST::FormalParameterList *) override
void endVisit(AST::UiEnumMemberList *el) override
bool visit(AST::TrueLiteral *el) override
void endVisit(AST::VariableStatement *) override
bool visit(AST::StringLiteralPropertyName *el) override
void endVisit(AST::UiQualifiedId *) override
bool visit(AST::ThisExpression *el) override
void endVisit(AST::ComputedPropertyName *) override
void endVisit(AST::ObjectPattern *) override
void endVisit(AST::PreDecrementExpression *) override
bool visit(AST::BreakStatement *el) override
void endVisit(AST::Expression *) override
void endVisit(AST::RegExpLiteral *) override
bool visit(UiRequired *el) override
void endVisit(AST::Finally *) override
bool visit(AST::ArrayPattern *el) override
void endVisit(AST::WithStatement *) override
bool visit(AST::Type *) override
bool visit(AST::Catch *el) override
bool visit(AST::CallExpression *el) override
bool visit(AST::ObjectPattern *el) override
bool visit(AST::NewMemberExpression *el) override
bool visit(AST::UiArrayMemberList *el) override
bool visit(AST::UiObjectMemberList *) override
void endVisit(AST::UnaryPlusExpression *) override
void endVisit(AST::UiArrayMemberList *) override
bool visit(AST::ContinueStatement *el) override
void endVisit(AST::TemplateLiteral *) override
bool visit(AST::NullExpression *el) override
void endVisit(AST::Block *) override
void postVisit(Node *) override
void endVisit(AST::CaseBlock *) override
bool visit(AST::NewExpression *el) override
void endVisit(AST::TypeAnnotation *) override
void endVisit(AST::NumericLiteral *) override
void endVisit(UiAnnotation *) override
bool visit(AST::RegExpLiteral *el) override
bool visit(AST::ExportSpecifier *el) override
void endVisit(AST::ClassDeclaration *) override
void endVisit(AST::UiPragmaValueList *) override
void endVisit(AST::VoidExpression *) override
bool visit(AST::DeleteExpression *el) override
void endVisit(AST::NewExpression *) override
bool visit(AST::IfStatement *el) override
void endVisit(AST::TildeExpression *) override
void endVisit(AST::BreakStatement *) override
bool visit(AST::ArrayMemberExpression *el) override
void endVisit(AST::ExportSpecifier *) override
bool visit(AST::EmptyStatement *el) override
void endVisit(AST::ESModule *) override
void endVisit(AST::ClassExpression *) override
bool visit(AST::UnaryPlusExpression *el) override
bool visit(AST::SwitchStatement *el) override
bool visit(AST::UiInlineComponent *el) override
void endVisit(AST::TypeExpression *) override
void endVisit(AST::DoWhileStatement *) override
bool visit(AST::NamedImports *el) override
bool visit(AST::ExpressionStatement *el) override
void endVisit(AST::NumericLiteralPropertyName *) override
void endVisit(AST::UiArrayBinding *) override
void endVisit(AST::ImportsList *) override
bool visit(AST::IdentifierPropertyName *el) override
void endVisit(AST::Type *) override
bool visit(AST::TypeExpression *) override
bool visit(AST::NumericLiteral *el) override
void endVisit(AST::PreIncrementExpression *) override
void endVisit(AST::PatternElementList *) override
void endVisit(AST::FieldMemberExpression *) override
void endVisit(AST::IdentifierExpression *) override
bool visit(UiProgram *) override
void endVisit(AST::ExportClause *) override
void endVisit(AST::UiPragma *) override
void endVisit(AST::ImportDeclaration *) override
bool visit(AST::UiVersionSpecifier *el) override
bool visit(AST::UiScriptBinding *el) override
void endVisit(AST::PatternElement *) override
bool visit(AST::PostDecrementExpression *el) override
void endVisit(AST::ArgumentList *) override
bool visit(AST::ExportDeclaration *el) override
bool visit(AST::DoWhileStatement *el) override
bool visit(AST::PatternProperty *el) override
bool visit(AST::DefaultClause *el) override
void endVisit(AST::StringLiteral *) override
void endVisit(AST::LabelledStatement *) override
bool visit(AST::ImportDeclaration *el) override
bool visit(AST::ESModule *) override
bool visit(UiPragma *el) override
bool visit(AST::ExportClause *el) override
void endVisit(AST::UnaryMinusExpression *) override
bool visit(AST::PatternPropertyList *) override
bool visit(AST::ClassElementList *el) override
bool visit(AST::CaseClause *el) override
void endVisit(AST::UiObjectDefinition *) override
bool visit(AST::ComputedPropertyName *) override
void endVisit(AST::ExpressionStatement *) override
bool visit(AST::CaseBlock *el) override
void endVisit(AST::NotExpression *) override
void endVisit(AST::UiInlineComponent *) override
void endVisit(AST::NewMemberExpression *) override
void endVisit(AST::SuperLiteral *) override
bool visit(AST::ImportSpecifier *el) override
void endVisit(AST::BinaryExpression *) override
void endVisit(AST::UiImport *el) override
bool preVisit(Node *) override
bool visit(AST::VariableStatement *el) override
bool visit(AST::IdentifierExpression *el) override
void endVisit(AST::NameSpaceImport *) override
void endVisit(AST::UiHeaderItemList *) override
void endVisit(AST::NullExpression *) override
void endVisit(AST::UiObjectMemberList *) override
bool visit(AST::UiArrayBinding *el) override
bool visit(AST::TaggedTemplate *) override
bool visit(AST::UiEnumMemberList *el) override
bool visit(AST::DebuggerStatement *el) override
void endVisit(AST::NestedExpression *) override
void endVisit(AST::ImportClause *) override
void endVisit(AST::ForStatement *) override
void endVisit(AST::CaseClauses *) override
bool visit(AST::ImportsList *el) override
void endVisit(AST::PatternProperty *) override
void endVisit(AST::Program *) override
void throwRecursionDepthError() override
bool visit(AST::StatementList *) override
void endVisit(AST::CaseClause *) override
bool visit(AST::ThrowStatement *el) override
bool visit(AST::Elision *el) override
void endVisit(AST::PostDecrementExpression *) override
bool visit(AST::NumericLiteralPropertyName *el) override
void endVisit(AST::ArrayPattern *) override
void endVisit(AST::TaggedTemplate *) override
void endVisit(AST::ThisExpression *) override
void endVisit(AST::DebuggerStatement *) override
void endVisit(AST::TypeOfExpression *) override
void endVisit(AST::EmptyStatement *) override
void endVisit(AST::ContinueStatement *) override
bool visit(AST::YieldExpression *el) override
bool visit(AST::ForEachStatement *el) override
bool visit(AST::NestedExpression *el) override
void endVisit(AST::FalseLiteral *) override
bool visit(AST::FunctionExpression *el) override
bool visit(AST::Program *) override
bool visit(UiImport *el) override
bool visit(AST::FunctionDeclaration *el) override
void endVisit(AST::TrueLiteral *) override
bool visit(AST::ExportsList *) override
void endVisit(AST::Elision *el) override
bool visit(AST::FromClause *el) override
void endVisit(AST::PatternPropertyList *) override
void endVisit(AST::UiObjectInitializer *) override
void endVisit(AST::UiPublicMember *el) override
bool visit(AST::TemplateLiteral *el) override
void endVisit(AST::UiScriptBinding *) override
void endVisit(AST::PostIncrementExpression *) override
bool visit(UiHeaderItemList *) override
AstDumper(const std::function< void(QStringView)> &dumper, AstDumperOptions options=AstDumperOption::None, int indent=1, int baseIndent=0, function_ref< QStringView(SourceLocation)> loc2str=&noStr)
void endVisit(AST::WhileStatement *) override
bool visit(AST::ImportClause *el) override
bool visit(AST::TypeAnnotation *el) override
void endVisit(AST::UiEnumDeclaration *) override
bool visit(AST::LabelledStatement *el) override
bool visit(AST::SuperLiteral *el) override
void endVisit(AST::YieldExpression *) override
bool visit(UiAnnotationList *) override
void endVisit(AST::ArrayMemberExpression *) override
bool visit(AST::PreIncrementExpression *el) override
void endVisit(AST::UiVersionSpecifier *) override
bool visit(AST::PreDecrementExpression *el) override
void endVisit(AST::ExportDeclaration *) override
void endVisit(AST::FunctionExpression *) override
bool visit(AST::Block *el) override
void endVisit(AST::DeleteExpression *) override
bool visit(AST::ReturnStatement *el) override
bool visit(AST::TypeOfExpression *el) override
void endVisit(AST::CallExpression *) override
void endVisit(AST::IdentifierPropertyName *) override
bool visit(AST::PostIncrementExpression *el) override
bool visit(AST::FieldMemberExpression *el) override
bool visit(UiPublicMember *el) override
void endVisit(AST::ReturnStatement *) override
bool visit(AST::UiObjectBinding *el) override
void endVisit(AST::IfStatement *) override
bool visit(AST::ClassDeclaration *el) override
void endVisit(AST::ExportsList *) override
void endVisit(AST::VariableDeclarationList *) override
void endVisit(AST::SwitchStatement *) override
bool visit(AST::UiParameterList *el) override
bool visit(AST::VariableDeclarationList *el) override
void endVisit(AST::TryStatement *) override
void endVisit(AST::NamedImports *) override
bool visit(AST::Expression *el) override
void endVisit(UiRequired *) override
bool visit(AST::UiSourceElement *el) override
bool visit(AST::TryStatement *el) override
bool visit(AST::StringLiteral *el) override
bool visit(UiAnnotation *) override
void endVisit(AST::UiParameterList *el) override
void endVisit(AST::FromClause *) override
bool visit(AST::ArgumentList *el) override
void endVisit(UiAnnotationList *) override
void endVisit(AST::ThrowStatement *) override
bool visit(AST::UiObjectInitializer *el) override
bool visit(AST::ForStatement *el) override
bool visit(AST::ConditionalExpression *el) override
bool visit(AST::UiQualifiedId *el) override
bool visit(AST::UiEnumDeclaration *el) override
void endVisit(AST::Catch *) override
bool visit(AST::Finally *el) override
bool visit(AST::PatternElementList *) override
bool visit(AST::VoidExpression *el) override
void endVisit(AST::UiProgram *) override
void endVisit(AST::ClassElementList *) override
void endVisit(AST::FunctionDeclaration *) override
bool visit(AST::PatternElement *el) override
bool visit(AST::WithStatement *el) override
void endVisit(AST::UiObjectBinding *) override
void endVisit(AST::ConditionalExpression *) override
void endVisit(AST::StringLiteralPropertyName *) override
void endVisit(AST::StatementList *) override
bool visit(AST::UiObjectDefinition *el) override
bool visit(AST::CaseClauses *) override
bool visit(AST::BinaryExpression *el) override
bool visit(AST::WhileStatement *el) override
bool visit(AST::UnaryMinusExpression *el) override
\inmodule QtCore
Definition qstringview.h:78
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:5871
static QString number(int, int base=10)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qstring.cpp:8084
\inmodule QtCore
QString str
[2]
QStyleOptionButton opt
QDebug operator<<(QDebug d, AST::Node *n)
QString astNodeDump(Node *n, AstDumperOptions opt, int indent, int baseIndent, function_ref< QStringView(SourceLocation)>loc2str)
QString dumperToString(const Dumper &writer)
Converts a dumper to a string.
QString astNodeDiff(AST::Node *n1, AST::Node *n2, int nContext, AstDumperOptions opt, int indent, function_ref< QStringView(SourceLocation)>loc2str1, function_ref< QStringView(SourceLocation)>loc2str2)
void astNodeDumper(const Sink &s, Node *n, AstDumperOptions opt, int indent, int baseIndent, function_ref< QStringView(SourceLocation)>loc2str)
QStringView noStr(SourceLocation)
QString lineDiff(QString s1, QString s2, int nContext)
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define qCWarning(category,...)
constexpr const T & qMin(const T &a, const T &b)
Definition qminmax.h:40
GLsizei const GLfloat * v
[13]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat s1
GLuint start
GLfloat n
GLdouble s
[6]
Definition qopenglext.h:235
GLuint res
static QLatin1StringView typeStr(QShaderDescription::VariableType t)
SSL_CTX int void * arg
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
#define QStringLiteral(str)
#define s2
#define s1
QDate d1(1995, 5, 17)
[0]
QDate d2(1995, 5, 20)
QStringView el