//===-- loop-convert/VariableNaming.h - Gererate variable names -*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file contains the definitino of the VariableNamer class, which is
// responsible for generating new variable names and ensuring that they do not
// conflict with existing ones.
//
//===----------------------------------------------------------------------===//
#include "VariableNaming.h"

namespace clang {
namespace loop_migrate {

std::string VariableNamer::createIndexName() {
  // FIXME: Add in naming conventions to handle:
  //  - Uppercase/lowercase indices
  //  - How to handle conflicts
  //  - An interactive process for naming
  std::string IteratorName;
  std::string ContainerName;
  if (TheContainer)
    ContainerName = TheContainer->getName().str();

  size_t Len = ContainerName.length();
  if (Len > 1 && ContainerName[Len - 1] == 's')
    IteratorName = ContainerName.substr(0, Len - 1);
  else
    IteratorName = "elem";

  if (!declarationExists(IteratorName))
    return IteratorName;

  IteratorName = ContainerName + "_" + OldIndex->getName().str();
  if (!declarationExists(IteratorName))
    return IteratorName;

  IteratorName = ContainerName + "_elem";
  if (!declarationExists(IteratorName))
    return IteratorName;

  IteratorName += "_elem";
  if (!declarationExists(IteratorName))
    return IteratorName;

  IteratorName = "_elem_";

  // Someone defeated my naming scheme...
  while (declarationExists(IteratorName))
    IteratorName += "i";
  return IteratorName;
}

/// \brief Determines whether or not the the name Symbol exists in LoopContext,
/// any of its parent contexts, or any of its child statements.
///
/// We also check to see if the same identifier was generated by this loop
/// converter in a loop nested within SourceStmt.
bool VariableNamer::declarationExists(const StringRef Symbol) {
  // Determine if the symbol was generated in a parent context.
  for (const Stmt *S = SourceStmt; S != NULL; S = ReverseAST->lookup(S)) {
    StmtGeneratedVarNameMap::const_iterator I = GeneratedDecls->find(S);
    if (I != GeneratedDecls->end() && I->second == Symbol)
      return true;
  }

  // FIXME: Rather than detecting conflicts at their usages, we should check the
  // parent context.
  // For some reason, lookup() always returns the pair (NULL, NULL) because its
  // StoredDeclsMap is not initialized (i.e. LookupPtr.getInt() is false inside
  // of DeclContext::lookup()). Why is this?

  // Finally, determine if the symbol was used in the loop or a child context.
  DeclFinderASTVisitor DeclFinder(Symbol, GeneratedDecls);
  return DeclFinder.findUsages(SourceStmt);
}

} // namespace loop_migrate
} // namespace clang
