1 //===--- ObjCMethodList.h - A singly linked list of methods -----*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines ObjCMethodList, a singly-linked list of methods. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LLVM_CLANG_SEMA_OBJCMETHODLIST_H 15 #define LLVM_CLANG_SEMA_OBJCMETHODLIST_H 16 17 #include "clang/AST/DeclObjC.h" 18 #include "llvm/ADT/PointerIntPair.h" 19 20 namespace clang { 21 22 class ObjCMethodDecl; 23 24 /// \brief a linked list of methods with the same selector name but different 25 /// signatures. 26 struct ObjCMethodList { 27 // NOTE: If you add any members to this struct, make sure to serialize them. 28 /// \brief If there is more than one decl with this signature. 29 llvm::PointerIntPair<ObjCMethodDecl *, 1> MethodAndHasMoreThanOneDecl; 30 /// \brief The next list object and 2 bits for extra info. 31 llvm::PointerIntPair<ObjCMethodList *, 2> NextAndExtraBits; 32 ObjCMethodListObjCMethodList33 ObjCMethodList() { } ObjCMethodListObjCMethodList34 ObjCMethodList(ObjCMethodDecl *M) 35 : MethodAndHasMoreThanOneDecl(M, 0) {} ObjCMethodListObjCMethodList36 ObjCMethodList(const ObjCMethodList &L) 37 : MethodAndHasMoreThanOneDecl(L.MethodAndHasMoreThanOneDecl), 38 NextAndExtraBits(L.NextAndExtraBits) {} 39 getNextObjCMethodList40 ObjCMethodList *getNext() const { return NextAndExtraBits.getPointer(); } getBitsObjCMethodList41 unsigned getBits() const { return NextAndExtraBits.getInt(); } setNextObjCMethodList42 void setNext(ObjCMethodList *L) { NextAndExtraBits.setPointer(L); } setBitsObjCMethodList43 void setBits(unsigned B) { NextAndExtraBits.setInt(B); } 44 getMethodObjCMethodList45 ObjCMethodDecl *getMethod() const { 46 return MethodAndHasMoreThanOneDecl.getPointer(); 47 } setMethodObjCMethodList48 void setMethod(ObjCMethodDecl *M) { 49 return MethodAndHasMoreThanOneDecl.setPointer(M); 50 } 51 hasMoreThanOneDeclObjCMethodList52 bool hasMoreThanOneDecl() const { 53 return MethodAndHasMoreThanOneDecl.getInt(); 54 } setHasMoreThanOneDeclObjCMethodList55 void setHasMoreThanOneDecl(bool B) { 56 return MethodAndHasMoreThanOneDecl.setInt(B); 57 } 58 }; 59 60 } 61 62 #endif 63