1 //===- Interpreter.cpp - Top-Level LLVM Interpreter Implementation --------===// 2 // 3 // This file implements the top-level functionality for the LLVM interpreter. 4 // This interpreter is designed to be a very simple, portable, inefficient 5 // interpreter. 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "Interpreter.h" 10 #include "llvm/Target/TargetMachineImpls.h" 11 12 /// createInterpreter - Create a new interpreter object. This can never fail. 13 /// 14 ExecutionEngine *ExecutionEngine::createInterpreter(Module *M, 15 unsigned Config, 16 bool DebugMode, 17 bool TraceMode) { 18 return new Interpreter(M, Config, DebugMode, TraceMode); 19 } 20 21 //===----------------------------------------------------------------------===// 22 // Interpreter ctor - Initialize stuff 23 // 24 Interpreter::Interpreter(Module *M, unsigned Config, 25 bool DebugMode, bool TraceMode) 26 : ExecutionEngine(M), ExitCode(0), Debug(DebugMode), Trace(TraceMode), 27 CurFrame(-1), TD("lli", (Config & TM::EndianMask) == TM::LittleEndian, 28 1, 4, 29 (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4, 30 (Config & TM::PtrSizeMask) == TM::PtrSize64 ? 8 : 4) { 31 32 setTargetData(TD); 33 // Initialize the "backend" 34 initializeExecutionEngine(); 35 initializeExternalMethods(); 36 CW.setModule(M); // Update Writer 37 } 38 39 /// run - Start execution with the specified function and arguments. 40 /// 41 int Interpreter::run(const std::string &MainFunction, 42 const std::vector<std::string> &Args) { 43 // Start interpreter into the main function... 44 // 45 if (!callMainMethod(MainFunction, Args) && !Debug) { 46 // If not in debug mode and if the call succeeded, run the code now... 47 run(); 48 } 49 50 // If debug mode, allow the user to interact... also, if the user pressed 51 // ctrl-c or execution hit an error, enter the event loop... 52 if (Debug || isStopped()) 53 handleUserInput(); 54 return ExitCode; 55 } 56 57