1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- StrToken.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/StrToken.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<StrToken, MCLD_SYMBOLS_PER_INPUT> StrTokenFactory;
18f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesstatic llvm::ManagedStatic<StrTokenFactory> g_StrTokenFactory;
19f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// StrToken
22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===//
2337b74a387bb3993387029859c2d9d051c41c724eStephen HinesStrToken::StrToken() : m_Kind(Unknown) {
24f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
25f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
26f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen HinesStrToken::StrToken(Kind pKind, const std::string& pString)
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines    : m_Kind(pKind), m_Name(pString) {
28f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
29f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3037b74a387bb3993387029859c2d9d051c41c724eStephen HinesStrToken::~StrToken() {
31f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
32f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3337b74a387bb3993387029859c2d9d051c41c724eStephen HinesStrToken* StrToken::create(const std::string& pString) {
34f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  StrToken* result = g_StrTokenFactory->allocate();
35f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  new (result) StrToken(String, pString);
36f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  return result;
37f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
38f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
3937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid StrToken::destroy(StrToken*& pStrToken) {
40f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_StrTokenFactory->destroy(pStrToken);
41f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_StrTokenFactory->deallocate(pStrToken);
42f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  pStrToken = NULL;
43f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
44f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines
4537b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid StrToken::clear() {
46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines  g_StrTokenFactory->clear();
47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines}
4837b74a387bb3993387029859c2d9d051c41c724eStephen Hines
4937b74a387bb3993387029859c2d9d051c41c724eStephen Hines}  // namespace mcld
50