diff options
| author | Ted Kremenek <kremenek@apple.com> | 2007-08-15 00:03:46 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2007-08-15 00:03:46 +0000 |
| commit | 85786be8e179ffc5955df41e33bcd37a46f366c8 (patch) | |
| tree | 5ea0c741ffc0d4706958ab94472a6247575c54d3 | |
| parent | 22c7993ecf9146a79b7a164a27900002d2832749 (diff) | |
| download | bcm5719-llvm-85786be8e179ffc5955df41e33bcd37a46f366c8.tar.gz bcm5719-llvm-85786be8e179ffc5955df41e33bcd37a46f366c8.zip | |
Added the following utility methods to VarDecl that provide
canonicalized queries of a variable's storage:
hasAutoStorage - Does a variable have (implicit) auto storage?
hasStaticStorage - Does a variable have (implicit) static storage?
hasLocalStorage - Is the variable a non-static local variable?
hasGlobalStorage - Is the variable a global variable or a static
local variable?
Additional comments documenting these functions are included in the
source.
llvm-svn: 41092
| -rw-r--r-- | clang/include/clang/AST/Decl.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index 90af50c36fa..f94e126cb52 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -151,6 +151,33 @@ public: Expr *getInit() { return Init; } void setInit(Expr *I) { Init = I; } + // hasAutoStorage - Returns true if either the implicit or explicit + // storage class of a variable is "auto." In particular, variables + // declared within a function that lack a storage keyword are + // implicitly "auto", but are represented internally with a storage + // class of None. + bool hasAutoStorage() { + return (SClass == Auto || (SClass == None && getKind() == BlockVariable)); + } + + // hasStaticStorage - Returns true if either the implicit or + // explicit storage class of a variable is "static." In + // particular, variables declared within a file (outside of a + // function) that lack a storage keyword are implicitly "static," + // but are represented internally with a storage class of "None". + bool hasStaticStorage() { + return (SClass == Static || (SClass == None && getKind() == FileVariable)); + } + + // hasLocalStorage - Returns true if a variable with function scope + // is a non-static local variable. + bool hasLocalStorage() { return (hasAutoStorage() || SClass == Register); } + + // hasGlobalStorage - Returns true for all variables that do not + // have local storage. This includs all global variables as well + // as static variables declared within a function. + bool hasGlobalStorage() { return !hasAutoStorage(); } + // Implement isa/cast/dyncast/etc. static bool classof(const Decl *D) { return D->getKind() >= BlockVariable && D->getKind() <= ParmVariable; |

