void luaInterpreterWrapper::doAfterExecution( bool fail, const string &code, bool putVariables, bool failOnException ) { if(fail) { Info << "Lua Exception" << endl; printError(); } if( interactiveAfterException_ && fail ) { Info << "Got an exception for "<< code << " now you can interact." << endl; interactiveLoop("Exception handling"); } if( fail && ( !tolerateExceptions_ || failOnException ) ) { FatalErrorIn("luaInterpreterWrapper::doAfterExecution") << "Lua exception raised by " << nl << code << endl << "To debug set 'interactiveAfterException true;' in " << dict().name() << endl << exit(FatalError); } if(interactiveAfterExecute_) { Info << "Executed "<< code << " now you can interact." << endl; interactiveLoop("After execution"); } if(putVariables) { setGlobals(); } }
void runInteractive(llvm::Module *llvmModule_, ModulePtr module_) { signal(SIGABRT, exceptionHandler); llvmModule = llvmModule_; module = module_; llvm::errs() << "Clay interpreter\n"; llvm::errs() << ":q to exit\n"; llvm::errs() << ":print {identifier} to print an identifier\n"; llvm::errs() << ":modules to list global modules\n"; llvm::errs() << ":globals to list globals\n"; llvm::errs() << "In multi-line mode empty line to exit\n"; llvm::EngineBuilder eb(llvmModule); llvm::TargetOptions targetOptions; targetOptions.JITExceptionHandling = true; eb.setTargetOptions(targetOptions); engine = eb.create(); engine->runStaticConstructorsDestructors(false); setAddTokens(&addTokens); interactiveLoop(); }