clang  10.0.0svn
DeclAccessPair.h
Go to the documentation of this file.
1 //===--- DeclAccessPair.h - A decl bundled with its path access -*- 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 the DeclAccessPair class, which provides an
10 // efficient representation of a pair of a NamedDecl* and an
11 // AccessSpecifier. Generally the access specifier gives the
12 // natural access of a declaration when named in a class, as
13 // defined in C++ [class.access.base]p1.
14 //
15 //===----------------------------------------------------------------------===//
16 
17 #ifndef LLVM_CLANG_AST_DECLACCESSPAIR_H
18 #define LLVM_CLANG_AST_DECLACCESSPAIR_H
19 
20 #include "clang/Basic/Specifiers.h"
21 #include "llvm/Support/DataTypes.h"
22 
23 namespace clang {
24 
25 class NamedDecl;
26 
27 /// A POD class for pairing a NamedDecl* with an access specifier.
28 /// Can be put into unions.
30  uintptr_t Ptr; // we'd use llvm::PointerUnion, but it isn't trivial
31 
32  enum { Mask = 0x3 };
33 
34 public:
37  p.set(D, AS);
38  return p;
39  }
40 
41  NamedDecl *getDecl() const {
42  return reinterpret_cast<NamedDecl*>(~Mask & Ptr);
43  }
45  return AccessSpecifier(Mask & Ptr);
46  }
47 
48  void setDecl(NamedDecl *D) {
49  set(D, getAccess());
50  }
52  set(getDecl(), AS);
53  }
54  void set(NamedDecl *D, AccessSpecifier AS) {
55  Ptr = uintptr_t(AS) | reinterpret_cast<uintptr_t>(D);
56  }
57 
58  operator NamedDecl*() const { return getDecl(); }
59  NamedDecl *operator->() const { return getDecl(); }
60 };
61 }
62 
63 #endif
NamedDecl * getDecl() const
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
Definition: Specifiers.h:113
NamedDecl * operator->() const
static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
Definition: opencl-c-base.h:62
void set(NamedDecl *D, AccessSpecifier AS)
AccessSpecifier getAccess() const
void setAccess(AccessSpecifier AS)
Defines various enumerations that describe declaration and type specifiers.
A POD class for pairing a NamedDecl* with an access specifier.
Dataflow Directional Tag Classes.
void setDecl(NamedDecl *D)
This represents a decl that may have a name.
Definition: Decl.h:248