NameSpec.cpp revision 37b74a387bb3993387029859c2d9d051c41c724e
1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- NameSpec.cpp -------------------------------------------------------===//
2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//                     The MCLinker Project
4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source
6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details.
7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//
8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/NameSpec.h"
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/GCFactory.h"
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines
13f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines#include <llvm/Support/ManagedStatic.h>
14f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
1537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld {
16f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
17f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinestypedef GCFactory<NameSpec, MCLD_SYMBOLS_PER_INPUT> NameSpecFactory;
18f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesstatic llvm::ManagedStatic<NameSpecFactory> g_NameSpecFactory;
19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// NameSpec
22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
2337b74a387bb3993387029859c2d9d051c41c724eStephen HinesNameSpec::NameSpec() {
24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
25f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesNameSpec::NameSpec(const std::string& pName, bool pAsNeeded)
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines    : InputToken(InputToken::NameSpec, pName, pAsNeeded) {
28f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3037b74a387bb3993387029859c2d9d051c41c724eStephen HinesNameSpec::~NameSpec() {
31f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3337b74a387bb3993387029859c2d9d051c41c724eStephen HinesNameSpec* NameSpec::create(const std::string& pName, bool pAsNeeded) {
34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  NameSpec* result = g_NameSpecFactory->allocate();
35f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  new (result) NameSpec(pName, pAsNeeded);
36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return result;
37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
38f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid NameSpec::destroy(NameSpec*& pNameSpec) {
40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_NameSpecFactory->destroy(pNameSpec);
41f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_NameSpecFactory->deallocate(pNameSpec);
42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  pNameSpec = NULL;
43f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
44f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid NameSpec::clear() {
46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_NameSpecFactory->clear();
47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
50