clang 23.0.0git
InitMap.cpp
Go to the documentation of this file.
1//===----------------------- InitMap.cpp ------------------------*- 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#include "InitMap.h"
9
10using namespace clang;
11using namespace clang::interp;
12
14 unsigned Bucket = I / PER_FIELD;
15 T Mask = T(1) << (I % PER_FIELD);
16 if (!(data()[Bucket] & Mask)) {
17 data()[Bucket] |= Mask;
18 UninitFields -= 1;
19 }
20 return UninitFields == 0;
21}
22
23bool InitMap::isElementInitialized(unsigned I) const {
24 if (UninitFields == 0)
25 return true;
26 unsigned Bucket = I / PER_FIELD;
27 return data()[Bucket] & (T(1) << (I % PER_FIELD));
28}
29
30// Values in the second half of data() are inverted,
31// i.e. 0 means "lifetime started".
33 unsigned LifetimeIndex = NumElems + I;
34
35 unsigned Bucket = numFields(NumElems) / 2 + (I / PER_FIELD);
36 T Mask = T(1) << (LifetimeIndex % PER_FIELD);
37 if ((data()[Bucket] & Mask)) {
38 data()[Bucket] &= ~Mask;
39 --DeadFields;
40 }
41}
42
43// Values in the second half of data() are inverted,
44// i.e. 0 means "lifetime started".
46 unsigned LifetimeIndex = NumElems + I;
47
48 unsigned Bucket = numFields(NumElems) / 2 + (I / PER_FIELD);
49 T Mask = T(1) << (LifetimeIndex % PER_FIELD);
50 if (!(data()[Bucket] & Mask)) {
51 data()[Bucket] |= Mask;
52 ++DeadFields;
53 }
54}
The JSON file list parser is used to communicate input to InstallAPI.
const FunctionProtoType * T
void startElementLifetime(unsigned I)
Definition InitMap.cpp:32
void endElementLifetime(unsigned I)
Definition InitMap.cpp:45
bool isElementInitialized(unsigned I) const
Checks if an element was initialized.
Definition InitMap.cpp:23
bool initializeElement(unsigned I)
Initializes an element. Returns true when object if fully initialized.
Definition InitMap.cpp:13