clang 18.0.0git
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
21#include "llvm/Support/DataTypes.h"
22
23namespace clang {
24
25class 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
34public:
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 }
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
Defines various enumerations that describe declaration and type specifiers.
A POD class for pairing a NamedDecl* with an access specifier.
static DeclAccessPair make(NamedDecl *D, AccessSpecifier AS)
void setDecl(NamedDecl *D)
NamedDecl * getDecl() const
void set(NamedDecl *D, AccessSpecifier AS)
NamedDecl * operator->() const
void setAccess(AccessSpecifier AS)
AccessSpecifier getAccess() const
This represents a decl that may have a name.
Definition: Decl.h:247
AccessSpecifier
A C++ access specifier (public, private, protected), plus the special value "none" which means differ...
Definition: Specifiers.h:114
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...