107905f40aa6dd3c17b7fbb3f8d2bb9fdf26946b
[oota-llvm.git] / lib / VMCore / LLVMContext.cpp
1 //===-- LLVMContext.cpp - Implement LLVMContext -----------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  This file implements LLVMContext, as a wrapper around the opaque
11 // class LLVMContextImpl.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #include "llvm/LLVMContext.h"
16 #include "llvm/Constants.h"
17 #include "llvm/DerivedTypes.h"
18 #include "llvm/Instruction.h"
19 #include "llvm/Metadata.h"
20 #include "llvm/Support/ManagedStatic.h"
21 #include "LLVMContextImpl.h"
22 #include <cstdarg>
23
24 using namespace llvm;
25
26 static ManagedStatic<LLVMContext> GlobalContext;
27
28 LLVMContext& llvm::getGlobalContext() {
29   return *GlobalContext;
30 }
31
32 LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl(*this)) { }
33 LLVMContext::~LLVMContext() { delete pImpl; }
34
35 // MDNode accessors
36 MDNode* LLVMContext::getMDNode(Value* const* Vals, unsigned NumVals) {
37   return pImpl->getMDNode(Vals, NumVals);
38 }
39
40 // MDString accessors
41 MDString* LLVMContext::getMDString(const StringRef &Str) {
42   return pImpl->getMDString(Str.data(), Str.size());
43 }
44
45 void LLVMContext::erase(MDString *M) {
46   pImpl->erase(M);
47 }
48
49 void LLVMContext::erase(MDNode *M) {
50   pImpl->erase(M);
51 }