diff --git a/lib/ExecutionEngine/Interpreter/Execution.cpp b/lib/ExecutionEngine/Interpreter/Execution.cpp index 6881ff9ed7d..800a62cc8db 100644 --- a/lib/ExecutionEngine/Interpreter/Execution.cpp +++ b/lib/ExecutionEngine/Interpreter/Execution.cpp @@ -1086,20 +1086,3 @@ void Interpreter::print(const Type *Ty, GenericValue V) { CW << Ty << " "; printValue(Ty, V); } - -void Interpreter::print(const std::string &Name) { - Value *PickedVal = ChooseOneOption(Name, LookupMatchingNames(Name)); - if (!PickedVal) return; - - if (const Function *F = dyn_cast(PickedVal)) { - CW << F; // Print the function - } else if (const Type *Ty = dyn_cast(PickedVal)) { - CW << "type %" << Name << " = " << Ty->getDescription() << "\n"; - } else if (const BasicBlock *BB = dyn_cast(PickedVal)) { - CW << BB; // Print the basic block - } else { // Otherwise there should be an annotation for the slot# - print(PickedVal->getType(), - getOperandValue(PickedVal, ECStack[CurFrame])); - std::cout << "\n"; - } -} diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.h b/lib/ExecutionEngine/Interpreter/Interpreter.h index 9ea2bb1f6da..5434fe0b81e 100644 --- a/lib/ExecutionEngine/Interpreter/Interpreter.h +++ b/lib/ExecutionEngine/Interpreter/Interpreter.h @@ -103,7 +103,6 @@ public: // User Interation Methods... bool callFunction(const std::string &Name); // return true on failure - void print(const std::string &Name); static void print(const Type *Ty, GenericValue V); static void printValue(const Type *Ty, GenericValue V); @@ -181,20 +180,6 @@ private: // Helper functions // void printCurrentInstruction(); - // LookupMatchingNames - Search the current function namespace, then the - // global namespace looking for values that match the specified name. Return - // ALL matches to that name. This is obviously slow, and should only be used - // for user interaction. - // - std::vector LookupMatchingNames(const std::string &Name); - - // ChooseOneOption - Prompt the user to choose among the specified options to - // pick one value. If no options are provided, emit an error. If a single - // option is provided, just return that option. - // - Value *ChooseOneOption(const std::string &Name, - const std::vector &Opts); - void initializeExecutionEngine(); void initializeExternalFunctions(); }; diff --git a/lib/ExecutionEngine/Interpreter/Support.cpp b/lib/ExecutionEngine/Interpreter/Support.cpp deleted file mode 100644 index d857b664f9f..00000000000 --- a/lib/ExecutionEngine/Interpreter/Support.cpp +++ /dev/null @@ -1,77 +0,0 @@ -//===-- Support.cpp - Support routines for interpreter --------------------===// -// -// This file contains support routines for the interpreter core. -// -//===----------------------------------------------------------------------===// - -#include "Interpreter.h" -#include "llvm/SymbolTable.h" -#include "llvm/Assembly/Writer.h" -#include "llvm/Module.h" - -//===----------------------------------------------------------------------===// -// -// LookupMatchingNames helper - Search a symbol table for values matching Name. -// -static inline void LookupMatchingNames(const std::string &Name, - SymbolTable &SymTab, - std::vector &Results) { - // Loop over all of the type planes in the symbol table... - for (SymbolTable::iterator I = SymTab.begin(), E = SymTab.end(); I != E; ++I){ - SymbolTable::VarMap &Plane = I->second; - - // Search the symbol table plane for this name... - SymbolTable::VarMap::iterator Val = Plane.find(Name); - if (Val != Plane.end()) - Results.push_back(Val->second); // Found a name match! - } -} - -// LookupMatchingNames - Search the current function namespace, then the global -// namespace looking for values that match the specified name. Return ALL -// matches to that name. This is obviously slow, and should only be used for -// user interaction. -// -std::vector Interpreter::LookupMatchingNames(const std::string &Name) { - std::vector Results; - Function *CurFunc = getCurrentFunction(); - - if (CurFunc) ::LookupMatchingNames(Name, CurFunc->getSymbolTable(), Results); - ::LookupMatchingNames(Name, getModule().getSymbolTable(), Results); - return Results; -} - -// ChooseOneOption - Prompt the user to choose among the specified options to -// pick one value. If no options are provided, emit an error. If a single -// option is provided, just return that option. -// -Value *Interpreter::ChooseOneOption(const std::string &Name, - const std::vector &Opts) { - switch (Opts.size()) { - case 1: return Opts[0]; - case 0: - std::cout << "Error: no entities named '" << Name << "' found!\n"; - return 0; - default: break; // Must prompt user... - } - - std::cout << "Multiple entities named '" << Name - << "' found! Please choose:\n"; - std::cout << " 0. Cancel operation\n"; - for (unsigned i = 0; i < Opts.size(); ++i) { - std::cout << " " << (i+1) << "."; - WriteAsOperand(std::cout, Opts[i]) << "\n"; - } - - unsigned Option; - do { - std::cout << "lli> " << std::flush; - std::cin >> Option; - if (Option > Opts.size()) - std::cout << "Invalid selection: Please choose from 0 to " << Opts.size() - << "\n"; - } while (Option > Opts.size()); - - if (Option == 0) return 0; - return Opts[Option-1]; -}