1*ad97ccf6SSam McCall //===--- Context.cpp ---------------------------------------------*- C++-*-===// 2*ad97ccf6SSam McCall // 3*ad97ccf6SSam McCall // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*ad97ccf6SSam McCall // See https://llvm.org/LICENSE.txt for license information. 5*ad97ccf6SSam McCall // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*ad97ccf6SSam McCall // 7*ad97ccf6SSam McCall //===----------------------------------------------------------------------===// 8*ad97ccf6SSam McCall 9*ad97ccf6SSam McCall #include "support/Context.h" 10*ad97ccf6SSam McCall #include <cassert> 11*ad97ccf6SSam McCall 12*ad97ccf6SSam McCall namespace clang { 13*ad97ccf6SSam McCall namespace clangd { 14*ad97ccf6SSam McCall empty()15*ad97ccf6SSam McCallContext Context::empty() { return Context(/*DataPtr=*/nullptr); } 16*ad97ccf6SSam McCall Context(std::shared_ptr<const Data> DataPtr)17*ad97ccf6SSam McCallContext::Context(std::shared_ptr<const Data> DataPtr) 18*ad97ccf6SSam McCall : DataPtr(std::move(DataPtr)) {} 19*ad97ccf6SSam McCall clone() const20*ad97ccf6SSam McCallContext Context::clone() const { return Context(DataPtr); } 21*ad97ccf6SSam McCall currentContext()22*ad97ccf6SSam McCallstatic Context ¤tContext() { 23*ad97ccf6SSam McCall static thread_local auto C = Context::empty(); 24*ad97ccf6SSam McCall return C; 25*ad97ccf6SSam McCall } 26*ad97ccf6SSam McCall current()27*ad97ccf6SSam McCallconst Context &Context::current() { return currentContext(); } 28*ad97ccf6SSam McCall swapCurrent(Context Replacement)29*ad97ccf6SSam McCallContext Context::swapCurrent(Context Replacement) { 30*ad97ccf6SSam McCall std::swap(Replacement, currentContext()); 31*ad97ccf6SSam McCall return Replacement; 32*ad97ccf6SSam McCall } 33*ad97ccf6SSam McCall 34*ad97ccf6SSam McCall } // namespace clangd 35*ad97ccf6SSam McCall } // namespace clang 36