Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 16 additions & 26 deletions internal/exec/runtime/invoke_calc.go
Original file line number Diff line number Diff line change
Expand Up @@ -1608,14 +1608,8 @@ func isStateSymbol(sym *symbols.Symbol) bool {
// unwrappedDeclMembers is ast.DeclMembers extended to named owned constraints,
// with the Membership wrappers the parser produces unwrapped.
func unwrappedDeclMembers(decl ast.Node) []ast.Node {
if oc, ok := ast.OwnedConstraintOf(decl); ok {
return oc.Body
}
switch m := decl.(type) {
case *ast.AssumeMember:
return m.Body
case *ast.RequireMember:
return m.Body
if body, ok := constraintMemberBody(decl); ok {
return body
}
members := ast.DeclMembers(decl)
if members == nil {
Expand All @@ -1629,28 +1623,24 @@ func unwrappedDeclMembers(decl ast.Node) []ast.Node {
return out
}

// constraintMemberBody returns the nested members of an assume or require member
// in either of its forms, and false for every other declaration.
func constraintMemberBody(decl ast.Node) ([]ast.Node, bool) {
switch m := decl.(type) {
case *ast.AssumeMember:
return m.Body, true
case *ast.RequireMember:
return m.Body, true
}
return nil, false
}

// eachUnwrappedDeclMember yields what unwrappedDeclMembers lists without building the list,
// for the readers that stop at the first member of interest.
func eachUnwrappedDeclMember(decl ast.Node) iter.Seq[ast.Node] {
return func(yield func(ast.Node) bool) {
if oc, ok := ast.OwnedConstraintOf(decl); ok {
for _, member := range oc.Body {
if !yield(member) {
return
}
}
return
}
switch m := decl.(type) {
case *ast.AssumeMember:
for _, member := range m.Body {
if !yield(member) {
return
}
}
return
case *ast.RequireMember:
for _, member := range m.Body {
if body, ok := constraintMemberBody(decl); ok {
for _, member := range body {
if !yield(member) {
return
}
Expand Down
4 changes: 2 additions & 2 deletions internal/frontend/grpc/validate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ func TestValidateAndVerifyLabelASubsettingObjectByItsDeclaration(t *testing.T) {
}
want := []string{"small", "smalls[1]", "smalls[2]"}
for _, kind := range []string{"constraint", "satisfy"} {
if got := strings.Join(paths[kind], " "); got != strings.Join(want, " ") {
if strings.Join(paths[kind], " ") != strings.Join(want, " ") {
t.Errorf("ValidateInstance %s paths = %q, want %q", kind, paths[kind], want)
}
}
Expand All @@ -338,7 +338,7 @@ func TestValidateAndVerifyLabelASubsettingObjectByItsDeclaration(t *testing.T) {
for _, v := range satisfied.Verdicts {
swept = append(swept, v.InstancePath)
}
if got := strings.Join(swept, " "); got != strings.Join(want, " ") {
if strings.Join(swept, " ") != strings.Join(want, " ") {
t.Errorf("VerifySatisfaction paths = %q, want %q", swept, want)
}
}
Loading