Esempio n. 1
0
/**
  * コード生成実行
  * @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;
}
Esempio n. 2
0
/**
  * コード生成実行
  * @param  TranslationUnitAST Module名(入力ファイル名)
  * @return 成功時:true 失敗時:false
  */
bool CodeGen::doCodeGen(TranslationUnitAST &tunit, std::string name){
	return generateTranslationUnit(tunit, name);
}