Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- ObjCMethodList.h - A singly linked list of methods -----*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. //
  9. // This file defines ObjCMethodList, a singly-linked list of methods.
  10. //
  11. //===----------------------------------------------------------------------===//
  12.  
  13. #ifndef LLVM_CLANG_SEMA_OBJCMETHODLIST_H
  14. #define LLVM_CLANG_SEMA_OBJCMETHODLIST_H
  15.  
  16. #include "clang/AST/DeclObjC.h"
  17. #include "llvm/ADT/PointerIntPair.h"
  18.  
  19. namespace clang {
  20.  
  21. class ObjCMethodDecl;
  22.  
  23. /// a linked list of methods with the same selector name but different
  24. /// signatures.
  25. struct ObjCMethodList {
  26.   // NOTE: If you add any members to this struct, make sure to serialize them.
  27.   /// If there is more than one decl with this signature.
  28.   llvm::PointerIntPair<ObjCMethodDecl *, 1> MethodAndHasMoreThanOneDecl;
  29.   /// The next list object and 2 bits for extra info.
  30.   llvm::PointerIntPair<ObjCMethodList *, 2> NextAndExtraBits;
  31.  
  32.   ObjCMethodList() { }
  33.   ObjCMethodList(ObjCMethodDecl *M)
  34.       : MethodAndHasMoreThanOneDecl(M, 0) {}
  35.   ObjCMethodList(const ObjCMethodList &L)
  36.       : MethodAndHasMoreThanOneDecl(L.MethodAndHasMoreThanOneDecl),
  37.         NextAndExtraBits(L.NextAndExtraBits) {}
  38.  
  39.   ObjCMethodList &operator=(const ObjCMethodList &L) {
  40.     MethodAndHasMoreThanOneDecl = L.MethodAndHasMoreThanOneDecl;
  41.     NextAndExtraBits = L.NextAndExtraBits;
  42.     return *this;
  43.   }
  44.  
  45.   ObjCMethodList *getNext() const { return NextAndExtraBits.getPointer(); }
  46.   unsigned getBits() const { return NextAndExtraBits.getInt(); }
  47.   void setNext(ObjCMethodList *L) { NextAndExtraBits.setPointer(L); }
  48.   void setBits(unsigned B) { NextAndExtraBits.setInt(B); }
  49.  
  50.   ObjCMethodDecl *getMethod() const {
  51.     return MethodAndHasMoreThanOneDecl.getPointer();
  52.   }
  53.   void setMethod(ObjCMethodDecl *M) {
  54.     return MethodAndHasMoreThanOneDecl.setPointer(M);
  55.   }
  56.  
  57.   bool hasMoreThanOneDecl() const {
  58.     return MethodAndHasMoreThanOneDecl.getInt();
  59.   }
  60.   void setHasMoreThanOneDecl(bool B) {
  61.     return MethodAndHasMoreThanOneDecl.setInt(B);
  62.   }
  63. };
  64.  
  65. }
  66.  
  67. #endif
  68.