()
| 37 | } |
| 38 | |
| 39 | func (p *Package) declarationMappings() (stringset.Set, map[ast.PredicateSym]bool, error) { |
| 40 | usedPackages := stringset.New(p.Name) |
| 41 | definedIdentifier := map[ast.PredicateSym]bool{} |
| 42 | for _, u := range p.units { |
| 43 | for _, clause := range u.Clauses { |
| 44 | oldSym := clause.Head.Predicate |
| 45 | definedIdentifier[oldSym] = true |
| 46 | } |
| 47 | for _, decl := range u.Decls { |
| 48 | if decl.DeclaredAtom.Predicate == symbols.Package { |
| 49 | continue |
| 50 | } |
| 51 | if decl.DeclaredAtom.Predicate == symbols.Use { |
| 52 | for _, desc := range decl.Descr { |
| 53 | if desc.Predicate == nameSym { |
| 54 | if len(desc.Args) != 1 { |
| 55 | return nil, nil, fmt.Errorf("unexpected length %v", len(desc.Args)) |
| 56 | } |
| 57 | n, ok := desc.Args[0].(ast.Constant) |
| 58 | if !ok { |
| 59 | return nil, nil, fmt.Errorf("unexpected type for name, expected constant") |
| 60 | } |
| 61 | v, err := n.StringValue() |
| 62 | if err != nil { |
| 63 | return nil, nil, err |
| 64 | } |
| 65 | if v == p.Name { |
| 66 | return nil, nil, fmt.Errorf("used package %q is same as current package", v) |
| 67 | } |
| 68 | usedPackages.Add(v) |
| 69 | break |
| 70 | } |
| 71 | } |
| 72 | } |
| 73 | oldSym := decl.DeclaredAtom.Predicate |
| 74 | definedIdentifier[oldSym] = true |
| 75 | } |
| 76 | } |
| 77 | return usedPackages, definedIdentifier, nil |
| 78 | } |
| 79 | |
| 80 | // Decls returns Decls of the package with rewritten identifiers. |
| 81 | func (p *Package) Decls() ([]ast.Decl, error) { |
no test coverage detected