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 empty()15Context Context::empty() { return Context(/*DataPtr=*/nullptr); } 16 Context(std::shared_ptr<const Data> DataPtr)17Context::Context(std::shared_ptr<const Data> DataPtr) 18 : DataPtr(std::move(DataPtr)) {} 19 clone() const20Context Context::clone() const { return Context(DataPtr); } 21 currentContext()22static Context ¤tContext() { 23 static thread_local auto C = Context::empty(); 24 return C; 25 } 26 current()27const Context &Context::current() { return currentContext(); } 28 swapCurrent(Context Replacement)29Context Context::swapCurrent(Context Replacement) { 30 std::swap(Replacement, currentContext()); 31 return Replacement; 32 } 33 34 } // namespace clangd 35 } // namespace clang 36