func (bare bareFunc) Compile(pinfo *build8.PkgInfo, opts *build8.Options) ( pkg *build8.Package, es []*lex8.Error, ) { // parsing theFile, e := findTheFile(pinfo) if e != nil { return nil, lex8.SingleErr(e) } stmts, es := parse.Stmts(theFile.Path, theFile) if es != nil { return nil, es } // building b := makeBuilder(pinfo) if es = b.Errs(); es != nil { return nil, es } if es := buildBareFunc(b, stmts); es != nil { return nil, es } if es := b.Errs(); es != nil { return nil, es } // logging if e := logIr(pinfo, b); e != nil { return nil, lex8.SingleErr(e) } // codegen lib, errs := ir.BuildPkg(b.p) if errs != nil { return nil, errs } ret := &build8.Package{ Lang: "g8-barefunc", Main: startName, Lib: lib, } return ret, nil }
func (l *lang) Compile(pinfo *build8.PkgInfo, opts *build8.Options) ( *build8.Package, []*lex8.Error, ) { // parsing asts, es := l.parsePkg(pinfo) if es != nil { return nil, es } // building b := makeBuilder(pinfo) if es = b.Errs(); es != nil { return nil, es } p := newPkg(asts) if es := p.build(b, pinfo); es != nil { return nil, es } g := p.deps g, err := g.Rename(func(name string) (string, error) { if strings.HasSuffix(name, ".g") { return strings.TrimSuffix(name, ".g"), nil } return name, fmt.Errorf("filename suffix missing: %q", name) }) if err != nil { return nil, lex8.SingleErr(err) } if err := logDeps(pinfo, g); err != nil { return nil, lex8.SingleErr(err) } bs, err := dagvis.LayoutJSON(g.Reverse()) if err != nil { return nil, lex8.SingleErr(err) } if err := logDepMap(pinfo, bs); err != nil { return nil, lex8.SingleErr(err) } // codegen lib, errs := ir.BuildPkg(b.p) if errs != nil { return nil, errs } // add debug symbols ir.AddDebug(b.p, pinfo.AddFuncDebug) // IR logging if err := logIr(pinfo, b); err != nil { return nil, lex8.SingleErr(err) } tests := make(map[string]uint32) for i, name := range p.testNames { tests[name] = uint32(i) } ret := &build8.Package{ Lang: "g8", Init: initName, Main: startName, TestMain: testStartName, Tests: tests, Lib: lib, Symbols: p.tops, } return ret, nil }