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