#pragma once // // This file is distributed under the MIT License. See LICENSE.md for details. // #include "revng/TupleTree/TupleTree.h" // Note: the purpose of this file is to make sure we opt-in using // visitTupleTree in each translation unit to save on compilation time. namespace detail { template using ConstVisitor = typename TupleTreeVisitor::ConstVisitorBase; } template void TupleTree::visitImpl(detail::ConstVisitor &Pre, detail::ConstVisitor &Post) const { visitTupleTree(*Root, Pre, Post); } template void TupleTree::visitImpl(typename TupleTreeVisitor::VisitorBase &Pre, typename TupleTreeVisitor::VisitorBase &Post) { visitTupleTree(*Root, Pre, Post); } template bool TupleTree::verifyReferences(bool Assert) const { DisableTracking Guard(*Root); bool Result = true; visitReferences([&Result, &Assert, RootPointer = Root.get()](const auto &Element) { if (Result) { auto Check = [&Assert, &Result](bool Condition) { if (not Condition) { Result = false; if (Assert) revng_abort(); } }; if (not Element.empty()) { Check(Element.getRoot() == RootPointer); Check(not Element.isConst()); Check(Element.isValid()); } } }); return Result; }