From 8be9d0a9cdce8baa53844e54f6045c4600274269 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 31 Oct 2007 00:12:35 +0000 Subject: [PATCH] Added new type and bitfield fields in some decl types in preparation for objective-c's type qualifiers. Added initialization of Class/SEMA types. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43534 91177308-0d34-0410-b5e6-96231b3b80d8 --- Sema/SemaDecl.cpp | 4 ++++ clang.xcodeproj/project.pbxproj | 1 + include/clang/AST/Decl.h | 22 +++++++++++++++++++++- include/clang/AST/DeclObjC.h | 6 ++++++ 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index 4f59fe1278..861c31e0d7 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -1201,6 +1201,8 @@ Sema::DeclTy *Sema::ActOnStartCategoryImplementation( // somewhere else. At this time, this is a good enough place to do type // encoding of methods and ivars for the rewrite client. GetObjcIdType(AtCatImplLoc); + // GetObjcClassType(AtCatImplLoc); NYI + GetObjcSelType(AtCatImplLoc); /// TODO: Check that CatName, category name, is not used in another // implementation. @@ -1278,6 +1280,8 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation( // somewhere else. At this time, this is a good enough place to do type // encoding of methods and ivars for the rewrite client. GetObjcIdType(AtClassImplLoc); + // GetObjcClassType(AtClassImplLoc); NYI + GetObjcSelType(AtClassImplLoc); return IMPDecl; } diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj index de41b4628d..fe4cf8d85b 100644 --- a/clang.xcodeproj/project.pbxproj +++ b/clang.xcodeproj/project.pbxproj @@ -756,6 +756,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */; + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* clang */; projectDirPath = ""; diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 923ea8a11b..0ed304cab7 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -98,6 +98,19 @@ public: IDNS_Ordinary }; + /// ObjcDeclQualifier - Qualifier used on types in method declarations + /// for remote messaging. They are meant for the arguments though and + /// applied to the Decls (ObjcMethodDecl and ParmVarDecl). + enum ObjcDeclQualifier { + OBJC_TQ_None = 0x0, + OBJC_TQ_In = 0x1, + OBJC_TQ_Inout = 0x2, + OBJC_TQ_Out = 0x4, + OBJC_TQ_Bycopy = 0x8, + OBJC_TQ_Byref = 0x10, + OBJC_TQ_Oneway = 0x20 + }; + private: /// Loc - The location that this decl. SourceLocation Loc; @@ -280,6 +293,8 @@ public: // as static variables declared within a function. bool hasGlobalStorage() const { return !hasAutoStorage(); } + ObjcDeclQualifier getObjcDeclQualifier() const { return objcDeclQualifier; } + // Implement isa/cast/dyncast/etc. static bool classof(const Decl *D) { return D->getKind() >= VarFirst && D->getKind() <= VarLast; @@ -288,11 +303,16 @@ public: protected: VarDecl(Kind DK, SourceLocation L, IdentifierInfo *Id, QualType T, StorageClass SC, ScopedDecl *PrevDecl) - : ValueDecl(DK, L, Id, T, PrevDecl), Init(0) { SClass = SC; } + : ValueDecl(DK, L, Id, T, PrevDecl), Init(0), + objcDeclQualifier(OBJC_TQ_None) { SClass = SC; } private: Expr *Init; // FIXME: This can be packed into the bitfields in Decl. unsigned SClass : 3; + /// FIXME: Also can be paced into the bitfields in Decl. + /// in, inout, etc. + ObjcDeclQualifier objcDeclQualifier : 6; + friend class StmtIteratorBase; }; diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 9cc9e5ae49..0ca98bb6ec 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -218,6 +218,9 @@ private: /// @required/@optional ImplementationControl DeclImplementation : 2; + /// in, inout, etc. + ObjcDeclQualifier objcDeclQualifier : 6; + // A unigue name for this method. Selector SelName; @@ -241,11 +244,14 @@ public: Decl *PrevDecl = 0) : Decl(ObjcMethod, beginLoc), IsInstance(isInstance), DeclImplementation(impControl), + objcDeclQualifier(OBJC_TQ_None), SelName(SelInfo), MethodDeclType(T), ParamInfo(paramInfo), NumMethodParams(numParams), MethodAttrs(M), EndLoc(endLoc) {} virtual ~ObjcMethodDecl(); + ObjcDeclQualifier getObjcDeclQualifier() const { return objcDeclQualifier; } + // Location information, modeled after the Stmt API. SourceLocation getLocStart() const { return getLocation(); } SourceLocation getLocEnd() const { return EndLoc; } -- 2.40.0