Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.
More...
|
| MSDependentExistsStmt (SourceLocation KeywordLoc, bool IsIfExists, NestedNameSpecifierLoc QualifierLoc, DeclarationNameInfo NameInfo, CompoundStmt *SubStmt) |
|
SourceLocation | getKeywordLoc () const |
| Retrieve the location of the __if_exists or __if_not_exists keyword.
|
|
bool | isIfExists () const |
| Determine whether this is an __if_exists statement.
|
|
bool | isIfNotExists () const |
| Determine whether this is an __if_exists statement.
|
|
NestedNameSpecifierLoc | getQualifierLoc () const |
| Retrieve the nested-name-specifier that qualifies this name, if any.
|
|
DeclarationNameInfo | getNameInfo () const |
| Retrieve the name of the entity we're testing for, along with location information.
|
|
CompoundStmt * | getSubStmt () const |
| Retrieve the compound statement that will be included in the program only if the existence of the symbol matches the initial keyword.
|
|
SourceLocation | getBeginLoc () const LLVM_READONLY |
|
SourceLocation | getEndLoc () const LLVM_READONLY |
|
child_range | children () |
|
const_child_range | children () const |
|
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.
|
|
Representation of a Microsoft __if_exists or __if_not_exists statement with a dependent name.
The __if_exists statement can be used to include a sequence of statements in the program only when a particular dependent name does not exist. For example:
template<typename T>
__if_exists (T::foo) {
t.foo();
}
}
const FunctionProtoType * T
Similarly, the __if_not_exists statement can be used to include the statements when a particular name does not exist.
Note that this statement only captures __if_exists and __if_not_exists statements whose name is dependent. All non-dependent cases are handled directly in the parser, so that they don't introduce a new scope. Clang introduces scopes in the dependent case to keep names inside the compound statement from leaking out into the surround statements, which would compromise the template instantiation model. This behavior differs from Visual C++ (which never introduces a scope), but is a fairly reasonable approximation of the VC++ behavior.
Definition at line 253 of file StmtCXX.h.