本文整理汇总了Golang中github.com/axw/llgo.Module.Dispose方法的典型用法代码示例。如果您正苦于以下问题:Golang Module.Dispose方法的具体用法?Golang Module.Dispose怎么用?Golang Module.Dispose使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/axw/llgo.Module
的用法示例。
在下文中一共展示了Module.Dispose方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: getRuntimeModuleFile
func getRuntimeModuleFile() (string, error) {
if runtimemodulefile != "" {
return runtimemodulefile, nil
}
gofiles, llfiles, cfiles, err := getRuntimeFiles()
if err != nil {
return "", err
}
var runtimeModule *llgo.Module
runtimeModule, err = compileFiles(testCompiler, gofiles, "runtime")
defer runtimeModule.Dispose()
if err != nil {
return "", err
}
outfile := filepath.Join(tempdir, "runtime.bc")
f, err := os.Create(outfile)
if err != nil {
return "", err
}
err = llvm.WriteBitcodeToFile(runtimeModule.Module, f)
if err != nil {
f.Close()
return "", err
}
f.Close()
for i, cfile := range cfiles {
bcfile := filepath.Join(tempdir, fmt.Sprintf("%d.bc", i))
args := []string{"-c", "-emit-llvm", "-o", bcfile, cfile}
if runtime.GOOS != "darwin" {
// TODO(q): -g breaks badly on my system at the moment,
// so is not enabled on darwin for now
args = append([]string{"-g"}, args...)
}
cmd := exec.Command("clang", args...)
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return "", fmt.Errorf("clang failed: %s", err)
}
llfiles = append(llfiles, bcfile)
}
if llfiles != nil {
args := append([]string{"-o", outfile, outfile}, llfiles...)
cmd := exec.Command("llvm-link", args...)
output, err := cmd.CombinedOutput()
if err != nil {
err = fmt.Errorf("llvm-link failed: %s", err)
fmt.Fprintf(os.Stderr, string(output))
return "", err
}
}
runtimemodulefile = outfile
return runtimemodulefile, nil
}
示例2: getRuntimeModule
func getRuntimeModule() (llvm.Module, error) {
gofiles, llfiles, err := getRuntimeFiles()
if err != nil {
return llvm.Module{}, err
}
var runtimeModule *llgo.Module
runtimeModule, err = compileFiles(testCompiler, gofiles, "runtime")
if err != nil {
return llvm.Module{}, err
}
if llfiles != nil {
outfile, err := ioutil.TempFile("", "runtime.ll")
if err != nil {
runtimeModule.Dispose()
return llvm.Module{}, err
}
defer func() {
outfile.Close()
os.Remove(outfile.Name())
}()
err = llvm.WriteBitcodeToFile(runtimeModule.Module, outfile)
if err != nil {
runtimeModule.Dispose()
return llvm.Module{}, err
}
runtimeModule.Dispose()
o := outfile.Name()
for _, llfile := range llfiles {
cmd := exec.Command("llvm-link", "-o", o, o, llfile)
output, err := cmd.CombinedOutput()
if err != nil {
err = fmt.Errorf("llvm-link failed: %s", err)
fmt.Fprintf(os.Stderr, string(output))
return llvm.Module{}, err
}
}
runtimeModule.Module, err = llvm.ParseBitcodeFile(o)
if err != nil {
return llvm.Module{}, err
}
}
return runtimeModule.Module, nil
}