/** * コード生成実行 * @param TranslationUnitAST Module名(入力ファイル名) * @return 成功時:true 失敗時:false */ bool CodeGen::doCodeGen(TranslationUnitAST &tunit, std::string name, std::string link_file, bool with_jit=false){ if(!generateTranslationUnit(tunit, name)){ return false; } //LinkFileの指定があったらModuleをリンク if( !link_file.empty() && !linkModule(Mod, link_file) ) return false; //JITのフラグが立っていたらJIT if(with_jit){ llvm::ExecutionEngine *EE = llvm::EngineBuilder(Mod).create(); llvm::EngineBuilder(Mod).create(); llvm::Function *F; if(!(F=Mod->getFunction("main"))) return false; int (*fp)() = (int (*)())EE->getPointerToFunction(F); fprintf(stderr,"%d\n",fp()); } return true; }
/** * コード生成実行 * @param TranslationUnitAST Module名(入力ファイル名) * @return 成功時:true 失敗時:false */ bool CodeGen::doCodeGen(TranslationUnitAST &tunit, std::string name){ return generateTranslationUnit(tunit, name); }