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;