Skip to content
Open
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
19 changes: 11 additions & 8 deletions builtins.go
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ func rawMember(i *interpreter, arrv, value value) (bool, error) {
if err != nil {
return false, err
}
equal, err := rawEquals(i, cachedThunkValue, value)
equal, err := rawEquals(i, cachedThunkValue, value, i.stack.limit)
if err != nil {
return false, err
}
Expand Down Expand Up @@ -824,7 +824,10 @@ func primitiveEquals(i *interpreter, x, y value) (value, error) {
}
}

func rawEquals(i *interpreter, x, y value) (bool, error) {
func rawEquals(i *interpreter, x, y value, depth int) (bool, error) {
if depth <= 0 {
return false, i.Error("max equality depth exceeded, possible infinite recursion")
}
if x.getType() != y.getType() {
return false, nil
}
Expand Down Expand Up @@ -866,7 +869,7 @@ func rawEquals(i *interpreter, x, y value) (bool, error) {
if err != nil {
return false, err
}
eq, err := rawEquals(i, leftElem, rightElem)
eq, err := rawEquals(i, leftElem, rightElem, depth-1)
if err != nil {
return false, err
}
Expand Down Expand Up @@ -902,7 +905,7 @@ func rawEquals(i *interpreter, x, y value) (bool, error) {
if err != nil {
return false, err
}
eq, err := rawEquals(i, leftField, rightField)
eq, err := rawEquals(i, leftField, rightField, depth-1)
if err != nil {
return false, err
}
Expand All @@ -918,15 +921,15 @@ func rawEquals(i *interpreter, x, y value) (bool, error) {
}

func builtinEquals(i *interpreter, x, y value) (value, error) {
eq, err := rawEquals(i, x, y)
eq, err := rawEquals(i, x, y, i.stack.limit)
if err != nil {
return nil, err
}
return makeValueBoolean(eq), nil
}

func builtinNotEquals(i *interpreter, x, y value) (value, error) {
eq, err := rawEquals(i, x, y)
eq, err := rawEquals(i, x, y, i.stack.limit)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -2489,7 +2492,7 @@ func builtinContains(i *interpreter, arrv value, ev value) (value, error) {
if err != nil {
return nil, err
}
eq, err := rawEquals(i, val, ev)
eq, err := rawEquals(i, val, ev, i.stack.limit)
if err != nil {
return nil, err
}
Expand All @@ -2510,7 +2513,7 @@ func builtinRemove(i *interpreter, arrv value, ev value) (value, error) {
if err != nil {
return nil, err
}
eq, err := rawEquals(i, val, ev)
eq, err := rawEquals(i, val, ev, i.stack.limit)
if err != nil {
return nil, err
}
Expand Down