int service95_main(int (*main_fn)(int, char **), int argc, char **argv, char *display_name) { /* Windows 95/98 */ char *service_name; ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, NULL, "Hooking up the service monitor to watch for shutdown."); is_service = 1; die_on_logoff = FALSE; /* Set up the Win9x server name, as WinNT would */ ap_server_argv0 = globdat.name = display_name; /* Remove spaces from display name to create service name */ service_name = strdup(display_name); ap_remove_spaces(service_name, display_name); /* Prevent holding open the (hidden) console */ real_exit_code = 0; Windows9xServiceCtrlHandler(ap_control_handler, service_name); atexit(stop_service_monitor); /* Run the service */ globdat.exit_status = main_fn(argc, argv); return (globdat.exit_status); }
void run_code(const char* code) { NExpression* root_expr = getAST(code); if (root_expr == NULL) { std::cout << "Root expression was null! Ahhhhhhhhhhhhh!" << std::endl; return; } std::string error_str; llvm::Module* module = new llvm::Module("top", llvm::getGlobalContext()); llvm::ExecutionEngine* execution_engine = llvm::EngineBuilder(module).setErrorStr(&error_str).setEngineKind(llvm::EngineKind::JIT).create(); CodeGen code_gen(module); std::cout << "execution engine " << execution_engine << std::endl; if (execution_engine == NULL) { std::cout << "Unable to create execution engine." << std::endl; return; } NFunction main_fn(root_expr, NType::int_ty()); // llvm::Value* root_val = root_expr->gen_code(&code_gen); // std::cout << "Root val code:" << std::endl; // root_val->dump(); llvm::Function* main_fn_val = (llvm::Function*) main_fn.gen_code(&code_gen); std::cout << "Main fn code:" << std::endl; main_fn_val->dump(); void* fn_ptr = execution_engine->getPointerToFunction(main_fn_val); int32_t (*fn_ptr_native)() = (int32_t (*)()) fn_ptr; int32_t ret = fn_ptr_native(); std::cout << "Main fn at " << fn_ptr << "; executed: " << ret << std::endl; }
void Compiler::run_code(ASTNode* root) { std::vector<ASTNodeDeclaration*>* args = new std::vector<ASTNodeDeclaration*>(); ASTNodeFunctionPrototype* main_fn_prototype = new ASTNodeFunctionPrototype("Int", "main", args); ASTNodeFunction main_fn(main_fn_prototype, (ASTNodeBlock*) root); main_fn.pass_types(&this->code_gen_context, NULL); llvm::Function* main_fn_val = (llvm::Function*) main_fn.gen_code(&this->code_gen_context); void* fn_ptr = this->execution_engine->getPointerToFunction(main_fn_val); int32_t ret = ((int32_t (*)()) fn_ptr)(); std::cout << "Main fn at " << fn_ptr << "; executed: " << ret << std::endl; }
int main(void) { const float rain[YEARS][MONTHS] = { {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6}, {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3}, {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4}, {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2}, {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2} }; main_fn(rain); return 0; }