clang 20.0.0git
|
IfStmt - This represents an if/then/else. More...
#include "clang/AST/Stmt.h"
Public Member Functions | |
bool | hasInitStorage () const |
True if this IfStmt has the storage for an init statement. | |
bool | hasVarStorage () const |
True if this IfStmt has storage for a variable declaration. | |
bool | hasElseStorage () const |
True if this IfStmt has storage for an else statement. | |
Expr * | getCond () |
const Expr * | getCond () const |
void | setCond (Expr *Cond) |
Stmt * | getThen () |
const Stmt * | getThen () const |
void | setThen (Stmt *Then) |
Stmt * | getElse () |
const Stmt * | getElse () const |
void | setElse (Stmt *Else) |
VarDecl * | getConditionVariable () |
Retrieve the variable declared in this "if" statement, if any. | |
const VarDecl * | getConditionVariable () const |
void | setConditionVariable (const ASTContext &Ctx, VarDecl *V) |
Set the condition variable for this if statement. | |
DeclStmt * | getConditionVariableDeclStmt () |
If this IfStmt has a condition variable, return the faux DeclStmt associated with the creation of that condition variable. | |
const DeclStmt * | getConditionVariableDeclStmt () const |
void | setConditionVariableDeclStmt (DeclStmt *CondVar) |
Stmt * | getInit () |
const Stmt * | getInit () const |
void | setInit (Stmt *Init) |
SourceLocation | getIfLoc () const |
void | setIfLoc (SourceLocation IfLoc) |
SourceLocation | getElseLoc () const |
void | setElseLoc (SourceLocation ElseLoc) |
bool | isConsteval () const |
bool | isNonNegatedConsteval () const |
bool | isNegatedConsteval () const |
bool | isConstexpr () const |
void | setStatementKind (IfStatementKind Kind) |
IfStatementKind | getStatementKind () const |
std::optional< const Stmt * > | getNondiscardedCase (const ASTContext &Ctx) const |
If this is an 'if constexpr', determine which substatement will be taken. | |
std::optional< Stmt * > | getNondiscardedCase (const ASTContext &Ctx) |
bool | isObjCAvailabilityCheck () const |
SourceLocation | getBeginLoc () const |
SourceLocation | getEndLoc () const LLVM_READONLY |
SourceLocation | getLParenLoc () const |
void | setLParenLoc (SourceLocation Loc) |
SourceLocation | getRParenLoc () const |
void | setRParenLoc (SourceLocation Loc) |
child_range | children () |
const_child_range | children () const |
Public Member Functions inherited from clang::Stmt | |
void * | operator new (size_t bytes, const ASTContext &C, unsigned alignment=8) |
void * | operator new (size_t bytes, const ASTContext *C, unsigned alignment=8) |
void * | operator new (size_t bytes, void *mem) noexcept |
void | operator delete (void *, const ASTContext &, unsigned) noexcept |
void | operator delete (void *, const ASTContext *, unsigned) noexcept |
void | operator delete (void *, size_t) noexcept |
void | operator delete (void *, void *) noexcept |
Stmt ()=delete | |
Stmt (const Stmt &)=delete | |
Stmt (Stmt &&)=delete | |
Stmt & | operator= (const Stmt &)=delete |
Stmt & | operator= (Stmt &&)=delete |
Stmt (StmtClass SC) | |
StmtClass | getStmtClass () const |
const char * | getStmtClassName () const |
SourceRange | getSourceRange () const LLVM_READONLY |
SourceLocation tokens are not useful in isolation - they are low level value objects created/interpreted by SourceManager. | |
SourceLocation | getBeginLoc () const LLVM_READONLY |
SourceLocation | getEndLoc () const LLVM_READONLY |
void | dump () const |
Dumps the specified AST fragment and all subtrees to llvm::errs() . | |
void | dump (raw_ostream &OS, const ASTContext &Context) const |
int64_t | getID (const ASTContext &Context) const |
void | dumpColor () const |
dumpColor - same as dump(), but forces color highlighting. | |
void | dumpPretty (const ASTContext &Context) const |
dumpPretty/printPretty - These two methods do a "pretty print" of the AST back to its original source language syntax. | |
void | printPretty (raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const |
void | printPrettyControlled (raw_ostream &OS, PrinterHelper *Helper, const PrintingPolicy &Policy, unsigned Indentation=0, StringRef NewlineSymbol="\n", const ASTContext *Context=nullptr) const |
void | printJson (raw_ostream &Out, PrinterHelper *Helper, const PrintingPolicy &Policy, bool AddQuotes) const |
Pretty-prints in JSON format. | |
void | viewAST () const |
viewAST - Visualize an AST rooted at this Stmt* using GraphViz. | |
Stmt * | IgnoreContainers (bool IgnoreCaptured=false) |
Skip no-op (attributed, compound) container stmts and skip captured stmt at the top, if IgnoreCaptured is true. | |
const Stmt * | IgnoreContainers (bool IgnoreCaptured=false) const |
const Stmt * | stripLabelLikeStatements () const |
Strip off all label-like statements. | |
Stmt * | stripLabelLikeStatements () |
child_range | children () |
const_child_range | children () const |
child_iterator | child_begin () |
child_iterator | child_end () |
const_child_iterator | child_begin () const |
const_child_iterator | child_end () const |
void | Profile (llvm::FoldingSetNodeID &ID, const ASTContext &Context, bool Canonical, bool ProfileLambdaExpr=false) const |
Produce a unique representation of the given statement. | |
void | ProcessODRHash (llvm::FoldingSetNodeID &ID, ODRHash &Hash) const |
Calculate a unique representation for a statement that is stable across compiler invocations. | |
Static Public Member Functions | |
static IfStmt * | Create (const ASTContext &Ctx, SourceLocation IL, IfStatementKind Kind, Stmt *Init, VarDecl *Var, Expr *Cond, SourceLocation LPL, SourceLocation RPL, Stmt *Then, SourceLocation EL=SourceLocation(), Stmt *Else=nullptr) |
Create an IfStmt. | |
static IfStmt * | CreateEmpty (const ASTContext &Ctx, bool HasElse, bool HasVar, bool HasInit) |
Create an empty IfStmt optionally with storage for an else statement, condition variable and init expression. | |
static bool | classof (const Stmt *T) |
Static Public Member Functions inherited from clang::Stmt | |
static void | addStmtClass (const StmtClass s) |
static void | EnableStatistics () |
static void | PrintStats () |
static Likelihood | getLikelihood (ArrayRef< const Attr * > Attrs) |
static Likelihood | getLikelihood (const Stmt *S) |
static const Attr * | getLikelihoodAttr (const Stmt *S) |
static Likelihood | getLikelihood (const Stmt *Then, const Stmt *Else) |
static std::tuple< bool, const Attr *, const Attr * > | determineLikelihoodConflict (const Stmt *Then, const Stmt *Else) |
|
inline |
Definition at line 2373 of file Stmt.h.
References isConsteval().
|
inline |
Definition at line 2382 of file Stmt.h.
References isConsteval().
|
static |
Create an IfStmt.
Definition at line 958 of file Stmt.cpp.
References clang::ASTContext::Allocate(), and clang::Init.
Referenced by clang::Sema::BuildIfStmt(), create_call_once(), create_dispatch_once(), create_OSAtomicCompareAndSwap(), and clang::ASTNodeImporter::VisitIfStmt().
|
static |
Create an empty IfStmt optionally with storage for an else statement, condition variable and init expression.
Definition at line 973 of file Stmt.cpp.
References clang::ASTContext::Allocate().
|
inline |
Definition at line 2360 of file Stmt.h.
References getIfLoc().
|
inline |
Definition at line 2225 of file Stmt.h.
Referenced by DiagUninitUse(), EvaluateStmt(), getNondiscardedCase(), isIdenticalStmt(), isObjCAvailabilityCheck(), and clang::interp::Compiler< Emitter >::visitIfStmt().
VarDecl * IfStmt::getConditionVariable | ( | ) |
Retrieve the variable declared in this "if" statement, if any.
In the following example, "x" is the condition variable.
Definition at line 982 of file Stmt.cpp.
References getConditionVariableDeclStmt().
Referenced by EvaluateStmt(), and getConditionVariable().
|
inline |
Definition at line 2271 of file Stmt.h.
References getConditionVariable().
|
inline |
If this IfStmt has a condition variable, return the faux DeclStmt associated with the creation of that condition variable.
Definition at line 2281 of file Stmt.h.
References hasVarStorage().
Referenced by getConditionVariable(), and clang::interp::Compiler< Emitter >::visitIfStmt().
|
inline |
Definition at line 2287 of file Stmt.h.
References hasVarStorage().
|
inline |
Definition at line 2246 of file Stmt.h.
References hasElseStorage().
Referenced by DiagUninitUse(), EvaluateStmt(), getEndLoc(), getNondiscardedCase(), isIdenticalStmt(), and clang::interp::Compiler< Emitter >::visitIfStmt().
|
inline |
Definition at line 2251 of file Stmt.h.
References hasElseStorage().
|
inline |
Definition at line 2317 of file Stmt.h.
References hasElseStorage().
|
inline |
Definition at line 2361 of file Stmt.h.
References getElse(), clang::Stmt::getEndLoc(), and getThen().
|
inline |
Definition at line 2314 of file Stmt.h.
References clang::Stmt::IfStmtBits.
Referenced by getBeginLoc().
|
inline |
Definition at line 2298 of file Stmt.h.
References hasInitStorage().
Referenced by EvaluateStmt(), and clang::interp::Compiler< Emitter >::visitIfStmt().
|
inline |
Definition at line 2303 of file Stmt.h.
References hasInitStorage().
|
inline |
std::optional< Stmt * > IfStmt::getNondiscardedCase | ( | const ASTContext & | Ctx | ) |
Definition at line 1007 of file Stmt.cpp.
References clang::Expr::EvaluateKnownConstInt(), getCond(), getElse(), getThen(), and isConstexpr().
std::optional< const Stmt * > IfStmt::getNondiscardedCase | ( | const ASTContext & | Ctx | ) | const |
If this is an 'if constexpr', determine which substatement will be taken.
Otherwise, or if the condition is value-dependent, returns std::nullopt.
Definition at line 1014 of file Stmt.cpp.
References getNondiscardedCase(), and clang::Result.
Referenced by getNondiscardedCase().
|
inline |
|
inline |
Definition at line 2349 of file Stmt.h.
References clang::Stmt::IfStmtBits.
Referenced by isConsteval(), isConstexpr(), isNegatedConsteval(), and isNonNegatedConsteval().
|
inline |
Definition at line 2237 of file Stmt.h.
Referenced by DiagUninitUse(), EvaluateStmt(), getEndLoc(), getNondiscardedCase(), isIdenticalStmt(), and clang::interp::Compiler< Emitter >::visitIfStmt().
|
inline |
True if this IfStmt has storage for an else statement.
Definition at line 2223 of file Stmt.h.
References clang::Stmt::IfStmtBits.
Referenced by getElse(), getElseLoc(), setElse(), setElseLoc(), and clang::JSONNodeDumper::VisitIfStmt().
|
inline |
True if this IfStmt has the storage for an init statement.
Definition at line 2217 of file Stmt.h.
References clang::Stmt::IfStmtBits.
Referenced by getInit(), setInit(), and clang::JSONNodeDumper::VisitIfStmt().
|
inline |
True if this IfStmt has storage for a variable declaration.
Definition at line 2220 of file Stmt.h.
References clang::Stmt::IfStmtBits.
Referenced by getConditionVariableDeclStmt(), setConditionVariable(), setConditionVariableDeclStmt(), and clang::JSONNodeDumper::VisitIfStmt().
|
inline |
Definition at line 2328 of file Stmt.h.
References clang::ConstevalNegated, clang::ConstevalNonNegated, and getStatementKind().
Referenced by children(), EvaluateStmt(), and clang::JSONNodeDumper::VisitIfStmt().
|
inline |
Definition at line 2341 of file Stmt.h.
References clang::Constexpr, and getStatementKind().
Referenced by getNondiscardedCase(), and clang::JSONNodeDumper::VisitIfStmt().
|
inline |
Definition at line 2337 of file Stmt.h.
References clang::ConstevalNegated, and getStatementKind().
Referenced by clang::JSONNodeDumper::VisitIfStmt(), and clang::interp::Compiler< Emitter >::visitIfStmt().
|
inline |
Definition at line 2333 of file Stmt.h.
References clang::ConstevalNonNegated, and getStatementKind().
Referenced by EvaluateStmt(), and clang::interp::Compiler< Emitter >::visitIfStmt().
bool IfStmt::isObjCAvailabilityCheck | ( | ) | const |
void IfStmt::setConditionVariable | ( | const ASTContext & | Ctx, |
VarDecl * | V | ||
) |
Set the condition variable for this if statement.
The if statement must have storage for the condition variable.
Definition at line 989 of file Stmt.cpp.
References clang::SourceRange::getBegin(), clang::SourceRange::getEnd(), hasVarStorage(), and V.
|
inline |
Definition at line 2293 of file Stmt.h.
References hasVarStorage().
|
inline |
Definition at line 2256 of file Stmt.h.
References hasElseStorage().
|
inline |
Definition at line 2322 of file Stmt.h.
References hasElseStorage().
|
inline |
Definition at line 2315 of file Stmt.h.
References clang::Stmt::IfStmtBits.
|
inline |
Definition at line 2308 of file Stmt.h.
References hasInitStorage(), and clang::Init.
|
inline |
|
inline |
|
inline |
Definition at line 2345 of file Stmt.h.
References clang::Stmt::IfStmtBits, and Kind.