17cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall//===--- ObjCMethodList.h - A singly linked list of methods -----*- C++ -*-===// 27cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// 37cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// The LLVM Compiler Infrastructure 47cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// 57cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// This file is distributed under the University of Illinois Open Source 67cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// License. See LICENSE.TXT for details. 77cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// 87cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall//===----------------------------------------------------------------------===// 97cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// 107cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// This file defines ObjCMethodList, a singly-linked list of methods. 117cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall// 127cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall//===----------------------------------------------------------------------===// 137cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall 147cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall#ifndef LLVM_CLANG_SEMA_OBJC_METHOD_LIST_H 157cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall#define LLVM_CLANG_SEMA_OBJC_METHOD_LIST_H 167cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall 172e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis#include "llvm/ADT/PointerIntPair.h" 182e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis 197cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCallnamespace clang { 207cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall 217cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCallclass ObjCMethodDecl; 227cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall 237cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall/// ObjCMethodList - a linked list of methods with different signatures. 247cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCallstruct ObjCMethodList { 257cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall ObjCMethodDecl *Method; 262e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis /// \brief The next list object and 2 bits for extra info. 272e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis llvm::PointerIntPair<ObjCMethodList *, 2> NextAndExtraBits; 282e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines ObjCMethodList() : Method(nullptr) { } 302e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis ObjCMethodList(ObjCMethodDecl *M, ObjCMethodList *C) 312e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis : Method(M), NextAndExtraBits(C, 0) { } 322e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis 332e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis ObjCMethodList *getNext() const { return NextAndExtraBits.getPointer(); } 342e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis unsigned getBits() const { return NextAndExtraBits.getInt(); } 352e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis void setNext(ObjCMethodList *L) { NextAndExtraBits.setPointer(L); } 362e3d8c0815acaf1bc5995ebe56cea07471e5c9c7Argyrios Kyrtzidis void setBits(unsigned B) { NextAndExtraBits.setInt(B); } 377cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall}; 387cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall 397cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall} 407cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall 417cd088e519d7e6caa4c4c12db52e0e4ae35d25c2John McCall#endif 42