Files
qt-creator/src/libs/cplusplus/ASTParent.cpp
Lucie Gérard a7956df3ca Use SPDX license identifiers
Replace the current license disclaimer in files by
a SPDX-License-Identifier.

Task-number: QTBUG-67283
Change-Id: I708fd1f9f2b73d60f57cc3568646929117825813
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2022-08-26 12:27:18 +00:00

53 lines
1.0 KiB
C++

// 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(); }