Remove support for interactive (step finish next) instructions.
Remove printCurrentInstruction, printStackFrame and infoValue
 (only used interactively) and other unused methods of Interpreter.
Fold UserInput.cpp containing only callMainFunction() into Interpreter.cpp.
Remove unused Profile flag.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8359 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
index 4f8c407..6b82dad 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.cpp
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
@@ -8,6 +8,8 @@
 
 #include "Interpreter.h"
 #include "llvm/Module.h"
+#include "llvm/DerivedTypes.h"
+#include "llvm/Function.h"
 
 /// create - Create a new interpreter object.  This can never fail.
 ///
@@ -76,3 +78,45 @@
   return ExitCode;
 }
 
+
+// callMainFunction - Construct call to typical C main() function and
+// call it using callFunction().
+//
+bool Interpreter::callMainFunction(const std::string &Name,
+                                   const std::vector<std::string> &InputArgv) {
+  Function *M = getModule().getNamedFunction(Name);
+  if (M == 0) {
+    std::cerr << "Could not find function '" << Name << "' in module!\n";
+    return 1;
+  }
+  const FunctionType *MT = M->getFunctionType();
+
+  std::vector<GenericValue> Args;
+  if (MT->getParamTypes().size() >= 2) {
+    PointerType *SPP = PointerType::get(PointerType::get(Type::SByteTy));
+    if (MT->getParamTypes()[1] != SPP) {
+      CW << "Second argument of '" << Name << "' should have type: '"
+	 << SPP << "'!\n";
+      return true;
+    }
+    Args.push_back(PTOGV(CreateArgv(InputArgv)));
+  }
+
+  if (MT->getParamTypes().size() >= 1) {
+    if (!MT->getParamTypes()[0]->isInteger()) {
+      std::cout << "First argument of '" << Name
+		<< "' should be an integer!\n";
+      return true;
+    } else {
+      GenericValue GV; GV.UIntVal = InputArgv.size();
+      Args.insert(Args.begin(), GV);
+    }
+  }
+
+  callFunction(M, Args);  // Start executing it...
+
+  // Reset the current frame location to the top of stack
+  CurFrame = ECStack.size()-1;
+
+  return false;
+}