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 20namespace clang { 21 22class ObjCMethodDecl; 23 24/// \brief a linked list of methods with the same selector name but different 25/// signatures. 26struct 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 33 ObjCMethodList() { } 34 ObjCMethodList(ObjCMethodDecl *M) 35 : MethodAndHasMoreThanOneDecl(M, 0) {} 36 ObjCMethodList(const ObjCMethodList &L) 37 : MethodAndHasMoreThanOneDecl(L.MethodAndHasMoreThanOneDecl), 38 NextAndExtraBits(L.NextAndExtraBits) {} 39 40 ObjCMethodList *getNext() const { return NextAndExtraBits.getPointer(); } 41 unsigned getBits() const { return NextAndExtraBits.getInt(); } 42 void setNext(ObjCMethodList *L) { NextAndExtraBits.setPointer(L); } 43 void setBits(unsigned B) { NextAndExtraBits.setInt(B); } 44 45 ObjCMethodDecl *getMethod() const { 46 return MethodAndHasMoreThanOneDecl.getPointer(); 47 } 48 void setMethod(ObjCMethodDecl *M) { 49 return MethodAndHasMoreThanOneDecl.setPointer(M); 50 } 51 52 bool hasMoreThanOneDecl() const { 53 return MethodAndHasMoreThanOneDecl.getInt(); 54 } 55 void setHasMoreThanOneDecl(bool B) { 56 return MethodAndHasMoreThanOneDecl.setInt(B); 57 } 58}; 59 60} 61 62#endif 63