//===- FileToken.cpp ------------------------------------------------------===//
//
//                     The MCLinker Project
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include <mcld/Script/FileToken.h>
#include <mcld/Support/GCFactory.h>
#include <llvm/Support/ManagedStatic.h>

using namespace mcld;

typedef GCFactory<FileToken, MCLD_SYMBOLS_PER_INPUT> FileTokenFactory;
static llvm::ManagedStatic<FileTokenFactory> g_FileTokenFactory;

//===----------------------------------------------------------------------===//
// FileToken
//===----------------------------------------------------------------------===//
FileToken::FileToken()
{
}

FileToken::FileToken(const std::string& pName, bool pAsNeeded)
  : InputToken(InputToken::File, pName, pAsNeeded)
{
}

FileToken::~FileToken()
{
}

FileToken* FileToken::create(const std::string& pName, bool pAsNeeded)
{
  FileToken* result = g_FileTokenFactory->allocate();
  new (result) FileToken(pName, pAsNeeded);
  return result;
}

void FileToken::destroy(FileToken*& pFileToken)
{
  g_FileTokenFactory->destroy(pFileToken);
  g_FileTokenFactory->deallocate(pFileToken);
  pFileToken = NULL;
}

void FileToken::clear()
{
  g_FileTokenFactory->clear();
}
