1f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com//===--- ObjCMethodList.h - A singly linked list of methods -----*- C++ -*-===//
23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org//
33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org//                     The LLVM Compiler Infrastructure
4a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
5a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// This file is distributed under the University of Illinois Open Source
6a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org// License. See LICENSE.TXT for details.
7a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org//
8196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org//===----------------------------------------------------------------------===//
9196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org//
10196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org// This file defines ObjCMethodList, a singly-linked list of methods.
11196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org//
12196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org//===----------------------------------------------------------------------===//
13196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org
14196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#ifndef LLVM_CLANG_SEMA_OBJC_METHOD_LIST_H
15196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#define LLVM_CLANG_SEMA_OBJC_METHOD_LIST_H
16196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org
17196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "llvm/ADT/PointerIntPair.h"
18196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org
19196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgnamespace clang {
20196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org
21a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgclass ObjCMethodDecl;
22a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
23a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org/// ObjCMethodList - a linked list of methods with different signatures.
24a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgstruct ObjCMethodList {
25a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  ObjCMethodDecl *Method;
26a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  /// \brief The next list object and 2 bits for extra info.
27af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org  llvm::PointerIntPair<ObjCMethodList *, 2> NextAndExtraBits;
28a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org  ObjCMethodList() : Method(nullptr) { }
30a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  ObjCMethodList(ObjCMethodDecl *M, ObjCMethodList *C)
31a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org    : Method(M), NextAndExtraBits(C, 0) { }
32cc8e177451e2ab80cf4eacfd782d19cd05ec2070hpayer@chromium.org
33a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  ObjCMethodList *getNext() const { return NextAndExtraBits.getPointer(); }
34a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  unsigned getBits() const { return NextAndExtraBits.getInt(); }
35a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  void setNext(ObjCMethodList *L) { NextAndExtraBits.setPointer(L); }
36a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org  void setBits(unsigned B) { NextAndExtraBits.setInt(B); }
37dcebac0f4c6c0da579b7cc91a0cbba8f3c820c8dricow@chromium.org};
38837a67edd9afdbfe1b59482b41693f59c48846ffulan@chromium.org
3933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org}
40a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org
41a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org#endif
42a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org