Update dependencies (#5518)

This commit is contained in:
hongming
2023-02-12 23:09:20 +08:00
committed by GitHub
parent d3b35fb2da
commit a979342f56
1486 changed files with 126660 additions and 71128 deletions

View File

@@ -32,15 +32,16 @@ type RuleIndex interface {
// IndexResult contains the result of an index lookup.
type IndexResult struct {
Kind DocKind
Rules []*Rule
Else map[*Rule][]*Rule
Default *Rule
EarlyExit bool
Kind RuleKind
Rules []*Rule
Else map[*Rule][]*Rule
Default *Rule
EarlyExit bool
OnlyGroundRefs bool
}
// NewIndexResult returns a new IndexResult object.
func NewIndexResult(kind DocKind) *IndexResult {
func NewIndexResult(kind RuleKind) *IndexResult {
return &IndexResult{
Kind: kind,
Else: map[*Rule][]*Rule{},
@@ -53,18 +54,20 @@ func (ir *IndexResult) Empty() bool {
}
type baseDocEqIndex struct {
skipIndexing Set
isVirtual func(Ref) bool
root *trieNode
defaultRule *Rule
kind DocKind
skipIndexing Set
isVirtual func(Ref) bool
root *trieNode
defaultRule *Rule
kind RuleKind
onlyGroundRefs bool
}
func newBaseDocEqIndex(isVirtual func(Ref) bool) *baseDocEqIndex {
return &baseDocEqIndex{
skipIndexing: NewSet(NewTerm(InternalPrint.Ref())),
isVirtual: isVirtual,
root: newTrieNodeImpl(),
skipIndexing: NewSet(NewTerm(InternalPrint.Ref())),
isVirtual: isVirtual,
root: newTrieNodeImpl(),
onlyGroundRefs: true,
}
}
@@ -73,7 +76,7 @@ func (i *baseDocEqIndex) Build(rules []*Rule) bool {
return false
}
i.kind = rules[0].Head.DocKind()
i.kind = rules[0].Head.RuleKind()
indices := newrefindices(i.isVirtual)
// build indices for each rule.
@@ -83,6 +86,9 @@ func (i *baseDocEqIndex) Build(rules []*Rule) bool {
i.defaultRule = rule
return false
}
if i.onlyGroundRefs {
i.onlyGroundRefs = rule.Head.Reference.IsGround()
}
var skip bool
for _, expr := range rule.Body {
if op := expr.OperatorTerm(); op != nil && i.skipIndexing.Contains(op) {
@@ -134,6 +140,7 @@ func (i *baseDocEqIndex) Lookup(resolver ValueResolver) (*IndexResult, error) {
result := NewIndexResult(i.kind)
result.Default = i.defaultRule
result.OnlyGroundRefs = i.onlyGroundRefs
result.Rules = make([]*Rule, 0, len(tr.ordering))
for _, pos := range tr.ordering {
@@ -246,15 +253,20 @@ func (i *refindices) Update(rule *Rule, expr *Expr) {
op := expr.Operator()
if op.Equal(Equality.Ref()) {
switch {
case op.Equal(Equality.Ref()):
i.updateEq(rule, expr)
} else if op.Equal(Equal.Ref()) && len(expr.Operands()) == 2 {
case op.Equal(Equal.Ref()) && len(expr.Operands()) == 2:
// NOTE(tsandall): if equal() is called with more than two arguments the
// output value is being captured in which case the indexer cannot
// exclude the rule if the equal() call would return false (because the
// false value must still be produced.)
i.updateEq(rule, expr)
} else if op.Equal(GlobMatch.Ref()) {
case op.Equal(GlobMatch.Ref()) && len(expr.Operands()) == 3:
// NOTE(sr): Same as with equal() above -- 4 operands means the output
// of `glob.match` is captured and the rule can thus not be excluded.
i.updateGlobMatch(rule, expr)
}
}
@@ -430,7 +442,7 @@ type trieNode struct {
next *trieNode
any *trieNode
undefined *trieNode
scalars map[Value]*trieNode
scalars *util.HashMap
array *trieNode
rules []*ruleNode
}
@@ -453,11 +465,14 @@ func (node *trieNode) String() string {
if node.array != nil {
flags = append(flags, fmt.Sprintf("array:%p", node.array))
}
if len(node.scalars) > 0 {
buf := make([]string, 0, len(node.scalars))
for k, v := range node.scalars {
buf = append(buf, fmt.Sprintf("scalar(%v):%p", k, v))
}
if node.scalars.Len() > 0 {
buf := make([]string, 0, node.scalars.Len())
node.scalars.Iter(func(k, v util.T) bool {
key := k.(Value)
val := v.(*trieNode)
buf = append(buf, fmt.Sprintf("scalar(%v):%p", key, val))
return false
})
sort.Strings(buf)
flags = append(flags, strings.Join(buf, " "))
}
@@ -493,7 +508,7 @@ type ruleNode struct {
func newTrieNodeImpl() *trieNode {
return &trieNode{
scalars: map[Value]*trieNode{},
scalars: util.NewHashMap(valueEq, valueHash),
}
}
@@ -508,9 +523,13 @@ func (node *trieNode) Do(walker trieWalker) {
if node.undefined != nil {
node.undefined.Do(next)
}
for _, child := range node.scalars {
node.scalars.Iter(func(_, v util.T) bool {
child := v.(*trieNode)
child.Do(next)
}
return false
})
if node.array != nil {
node.array.Do(next)
}
@@ -567,12 +586,12 @@ func (node *trieNode) insertValue(value Value) *trieNode {
}
return node.any
case Null, Boolean, Number, String:
child, ok := node.scalars[value]
child, ok := node.scalars.Get(value)
if !ok {
child = newTrieNodeImpl()
node.scalars[value] = child
node.scalars.Put(value, child)
}
return child
return child.(*trieNode)
case *Array:
if node.array == nil {
node.array = newTrieNodeImpl()
@@ -596,12 +615,12 @@ func (node *trieNode) insertArray(arr *Array) *trieNode {
}
return node.any.insertArray(arr.Slice(1, -1))
case Null, Boolean, Number, String:
child, ok := node.scalars[head]
child, ok := node.scalars.Get(head)
if !ok {
child = newTrieNodeImpl()
node.scalars[head] = child
node.scalars.Put(head, child)
}
return child.insertArray(arr.Slice(1, -1))
return child.(*trieNode).insertArray(arr.Slice(1, -1))
}
panic("illegal value")
@@ -662,11 +681,11 @@ func (node *trieNode) traverseValue(resolver ValueResolver, tr *trieTraversalRes
return node.array.traverseArray(resolver, tr, value)
case Null, Boolean, Number, String:
child, ok := node.scalars[value]
child, ok := node.scalars.Get(value)
if !ok {
return nil
}
return child.Traverse(resolver, tr)
return child.(*trieNode).Traverse(resolver, tr)
}
return nil
@@ -691,12 +710,11 @@ func (node *trieNode) traverseArray(resolver ValueResolver, tr *trieTraversalRes
}
}
child, ok := node.scalars[head]
child, ok := node.scalars.Get(head)
if !ok {
return nil
}
return child.traverseArray(resolver, tr, arr.Slice(1, -1))
return child.(*trieNode).traverseArray(resolver, tr, arr.Slice(1, -1))
}
func (node *trieNode) traverseUnknown(resolver ValueResolver, tr *trieTraversalResult) error {
@@ -721,13 +739,16 @@ func (node *trieNode) traverseUnknown(resolver ValueResolver, tr *trieTraversalR
return err
}
for _, child := range node.scalars {
if err := child.traverseUnknown(resolver, tr); err != nil {
return err
var iterErr error
node.scalars.Iter(func(_, v util.T) bool {
child := v.(*trieNode)
if iterErr = child.traverseUnknown(resolver, tr); iterErr != nil {
return true
}
}
return false
})
return nil
return iterErr
}
// If term `a` is one of the function's operands, we store a Ref: `args[0]`