Add support for atexit function, remove support for __main function


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6194 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/ExecutionEngine/Interpreter/Interpreter.cpp b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
index 4582a6f..3453d83 100644
--- a/lib/ExecutionEngine/Interpreter/Interpreter.cpp
+++ b/lib/ExecutionEngine/Interpreter/Interpreter.cpp
@@ -48,10 +48,21 @@
     run();
   }
 
-  // If debug mode, allow the user to interact... also, if the user pressed 
-  // ctrl-c or execution hit an error, enter the event loop...
-  if (Debug || isStopped())
-    handleUserInput();
+  do {
+    // If debug mode, allow the user to interact... also, if the user pressed 
+    // ctrl-c or execution hit an error, enter the event loop...
+    if (Debug || isStopped())
+      handleUserInput();
+
+    // If the program has exited, run atexit handlers...
+    if (ECStack.empty() && !AtExitHandlers.empty()) {
+      callFunction(AtExitHandlers.back(), std::vector<GenericValue>());
+      AtExitHandlers.pop_back();
+      run();
+    }
+  } while (!ECStack.empty());
+
+  PerformExitStuff();
   return ExitCode;
 }