blob: cd8ce81ae0188f758f8ccf77de9373b3c8e14a08 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0 WITH Qt-GPL-exception-1.0
#include "ASTParent.h"
#include <cplusplus/AST.h>
using namespace CPlusPlus;
ASTParent::ASTParent(TranslationUnit *translationUnit, AST *rootNode)
: ASTVisitor(translationUnit)
{
accept(rootNode);
}
ASTParent::~ASTParent()
{ }
AST *ASTParent::operator()(AST *ast) const
{ return parent(ast); }
AST *ASTParent::parent(AST *ast) const
{ return _parentMap.value(ast); }
bool ASTParent::preVisit(AST *ast)
{
if (! _parentStack.isEmpty())
_parentMap.insert(ast, _parentStack.top());
_parentStack.push(ast);
return true;
}
QList<AST *> ASTParent::path(AST *ast) const
{
QList<AST *> path;
path_helper(ast, &path);
return path;
}
void ASTParent::path_helper(AST *ast, QList<AST *> *path) const
{
if (! ast)
return;
path_helper(parent(ast), path);
path->append(ast);
}
void ASTParent::postVisit(AST *)
{ _parentStack.pop(); }
|