ExtractPackages turns source units into merged source packages.
(program []parse.SourceUnit)
| 106 | |
| 107 | // ExtractPackages turns source units into merged source packages. |
| 108 | func ExtractPackages(program []parse.SourceUnit) (map[string]*packages.Package, error) { |
| 109 | pkgs := map[string]*packages.Package{} |
| 110 | for _, unit := range program { |
| 111 | p, err := packages.Extract(unit) |
| 112 | if err != nil { |
| 113 | return nil, err |
| 114 | } |
| 115 | pkg, ok := pkgs[p.Name] |
| 116 | if ok { |
| 117 | pkg.Merge(p) |
| 118 | } else { |
| 119 | pkgs[p.Name] = &p |
| 120 | } |
| 121 | } |
| 122 | return pkgs, nil |
| 123 | } |
| 124 | |
| 125 | // AnalyzeAndCheckBounds checks every rule, including bounds. |
| 126 | func AnalyzeAndCheckBounds(program []parse.SourceUnit, extraPredicates map[ast.PredicateSym]ast.Decl, boundsChecking BoundsCheckingMode) (*ProgramInfo, error) { |
no test coverage detected