llvm/clang/include/clang/AST/IgnoreExpr.h

//===--- IgnoreExpr.h - Ignore intermediate Expressions -----------------===//
//
// 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 common functions to ignore intermediate expression nodes
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_AST_IGNOREEXPR_H
#define LLVM_CLANG_AST_IGNOREEXPR_H

#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"

namespace clang {
namespace detail {
/// Given an expression E and functions Fn_1,...,Fn_n : Expr * -> Expr *,
/// Return Fn_n(...(Fn_1(E)))
inline Expr *IgnoreExprNodesImpl(Expr *E) {}
template <typename FnTy, typename... FnTys>
Expr *IgnoreExprNodesImpl(Expr *E, FnTy &&Fn, FnTys &&... Fns) {}
} // namespace detail

/// Given an expression E and functions Fn_1,...,Fn_n : Expr * -> Expr *,
/// Recursively apply each of the functions to E until reaching a fixed point.
/// Note that a null E is valid; in this case nothing is done.
template <typename... FnTys> Expr *IgnoreExprNodes(Expr *E, FnTys &&... Fns) {}

template <typename... FnTys>
const Expr *IgnoreExprNodes(const Expr *E, FnTys &&...Fns) {}

inline Expr *IgnoreImplicitCastsSingleStep(Expr *E) {}

inline Expr *IgnoreImplicitCastsExtraSingleStep(Expr *E) {}

inline Expr *IgnoreCastsSingleStep(Expr *E) {}

inline Expr *IgnoreLValueCastsSingleStep(Expr *E) {}

inline Expr *IgnoreBaseCastsSingleStep(Expr *E) {}

inline Expr *IgnoreImplicitSingleStep(Expr *E) {}

inline Expr *IgnoreElidableImplicitConstructorSingleStep(Expr *E) {}

inline Expr *IgnoreImplicitAsWrittenSingleStep(Expr *E) {}

inline Expr *IgnoreParensOnlySingleStep(Expr *E) {}

inline Expr *IgnoreParensSingleStep(Expr *E) {}

} // namespace clang

#endif // LLVM_CLANG_AST_IGNOREEXPR_H