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 "llvm/ADT/PointerIntPair.h" 18 19 namespace clang { 20 21 class ObjCMethodDecl; 22 23 /// \brief a linked list of methods with the same selector name but different 24 /// signatures. 25 struct ObjCMethodList { 26 // NOTE: If you add any members to this struct, make sure to serialize them. 27 /// \brief If there is more than one decl with this signature. 28 llvm::PointerIntPair<ObjCMethodDecl *, 1> MethodAndHasMoreThanOneDecl; 29 /// \brief The next list object and 2 bits for extra info. 30 llvm::PointerIntPair<ObjCMethodList *, 2> NextAndExtraBits; 31 ObjCMethodListObjCMethodList32 ObjCMethodList() { } ObjCMethodListObjCMethodList33 ObjCMethodList(ObjCMethodDecl *M) 34 : MethodAndHasMoreThanOneDecl(M, 0) {} 35 getNextObjCMethodList36 ObjCMethodList *getNext() const { return NextAndExtraBits.getPointer(); } getBitsObjCMethodList37 unsigned getBits() const { return NextAndExtraBits.getInt(); } setNextObjCMethodList38 void setNext(ObjCMethodList *L) { NextAndExtraBits.setPointer(L); } setBitsObjCMethodList39 void setBits(unsigned B) { NextAndExtraBits.setInt(B); } 40 getMethodObjCMethodList41 ObjCMethodDecl *getMethod() const { 42 return MethodAndHasMoreThanOneDecl.getPointer(); 43 } setMethodObjCMethodList44 void setMethod(ObjCMethodDecl *M) { 45 return MethodAndHasMoreThanOneDecl.setPointer(M); 46 } 47 hasMoreThanOneDeclObjCMethodList48 bool hasMoreThanOneDecl() const { 49 return MethodAndHasMoreThanOneDecl.getInt(); 50 } setHasMoreThanOneDeclObjCMethodList51 void setHasMoreThanOneDecl(bool B) { 52 return MethodAndHasMoreThanOneDecl.setInt(B); 53 } 54 }; 55 56 } 57 58 #endif 59