//===--- SValVisitor.h - Visitor for SVal subclasses ------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the SValVisitor, SymExprVisitor, and MemRegionVisitor // interfaces, and also FullSValVisitor, which visits all three hierarchies. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SVALVISITOR_H #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SVALVISITOR_H #include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h" #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h" #include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h" namespace clang { namespace ento { /// SValVisitor - this class implements a simple visitor for SVal /// subclasses. template <typename ImplClass, typename RetTy = void> class SValVisitor { … }; /// SymExprVisitor - this class implements a simple visitor for SymExpr /// subclasses. template <typename ImplClass, typename RetTy = void> class SymExprVisitor { … }; /// MemRegionVisitor - this class implements a simple visitor for MemRegion /// subclasses. template <typename ImplClass, typename RetTy = void> class MemRegionVisitor { … }; /// FullSValVisitor - a convenient mixed visitor for all three: /// SVal, SymExpr and MemRegion subclasses. template <typename ImplClass, typename RetTy = void> class FullSValVisitor : public SValVisitor<ImplClass, RetTy>, public SymExprVisitor<ImplClass, RetTy>, public MemRegionVisitor<ImplClass, RetTy> { … }; } // end namespace ento } // end namespace clang #endif