1 | //===--- Context.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 | |
9 | #include "support/Context.h" |
10 | #include <cassert> |
11 | |
12 | namespace clang { |
13 | namespace clangd { |
14 | |
15 | Context Context::empty() { return Context(/*DataPtr=*/nullptr); } |
16 | |
17 | Context::Context(std::shared_ptr<const Data> DataPtr) |
18 | : DataPtr(std::move(DataPtr)) {} |
19 | |
20 | Context Context::clone() const { return Context(DataPtr); } |
21 | |
22 | static Context ¤tContext() { |
23 | static thread_local auto C = Context::empty(); |
24 | return C; |
25 | } |
26 | |
27 | const Context &Context::current() { return currentContext(); } |
28 | |
29 | Context Context::swapCurrent(Context Replacement) { |
30 | std::swap(a&: Replacement, b&: currentContext()); |
31 | return Replacement; |
32 | } |
33 | |
34 | } // namespace clangd |
35 | } // namespace clang |
36 |