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