// Packages creates an SSA program for a set of packages. // // The packages must have been loaded from source syntax using the // [packages.Load] function in [packages.LoadSyntax] or // [packages.LoadAllSyntax] mode. // // Packages creates an SSA package for each well-typed package in the // initial list, plus all their dependencies. The resulting list of // packages corresponds to the list of initial packages, and may contain // a nil if SSA code could not be constructed for the corresponding initial // package due to type errors. // // Code for bodies of functions is not built until [Program.Build] is // called on the resulting Program. SSA code is constructed only for // the initial packages with well-typed syntax trees. // // The mode parameter controls diagnostics and checking during SSA construction. func Packages(initial []*packages.Package, mode ssa.BuilderMode) (*ssa.Program, []*ssa.Package) { … } // AllPackages creates an SSA program for a set of packages plus all // their dependencies. // // The packages must have been loaded from source syntax using the // [packages.Load] function in [packages.LoadAllSyntax] mode. // // AllPackages creates an SSA package for each well-typed package in the // initial list, plus all their dependencies. The resulting list of // packages corresponds to the list of initial packages, and may contain // a nil if SSA code could not be constructed for the corresponding // initial package due to type errors. // // Code for bodies of functions is not built until Build is called on // the resulting Program. SSA code is constructed for all packages with // well-typed syntax trees. // // The mode parameter controls diagnostics and checking during SSA construction. func AllPackages(initial []*packages.Package, mode ssa.BuilderMode) (*ssa.Program, []*ssa.Package) { … } func doPackages(initial []*packages.Package, mode ssa.BuilderMode, deps bool) (*ssa.Program, []*ssa.Package) { … } // BuildPackage builds an SSA program with SSA intermediate // representation (IR) for all functions of a single package. // // It populates pkg by type-checking the specified file syntax trees. All // dependencies are loaded using the importer specified by tc, which // typically loads compiler export data; SSA code cannot be built for // those packages. BuildPackage then constructs an [ssa.Program] with all // dependency packages created, and builds and returns the SSA package // corresponding to pkg. // // The caller must have set pkg.Path to the import path. // // The operation fails if there were any type-checking or import errors. // // See ../example_test.go for an example. func BuildPackage(tc *types.Config, fset *token.FileSet, pkg *types.Package, files []*ast.File, mode ssa.BuilderMode) (*ssa.Package, *types.Info, error) { … }