Skip to content

Commit 94a5cd9

Browse files
committed
array.reverse() should operate on a copy
1 parent df53037 commit 94a5cd9

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

evaluator/functions.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,13 +1935,16 @@ func reverseFn(tok token.Token, env *object.Environment, args ...object.Object)
19351935

19361936
if spec == 0 {
19371937
// array
1938-
array := args[0].(*object.Array)
1938+
elements := args[0].(*object.Array).Elements
1939+
length := len(elements)
1940+
newElements := make([]object.Object, length, length)
1941+
copy(newElements, elements)
19391942

1940-
for i, j := 0, len(array.Elements)-1; i < j; i, j = i+1, j-1 {
1941-
array.Elements[i], array.Elements[j] = array.Elements[j], array.Elements[i]
1943+
for i, j := 0, len(newElements)-1; i < j; i, j = i+1, j-1 {
1944+
newElements[i], newElements[j] = newElements[j], newElements[i]
19421945
}
19431946

1944-
return array
1947+
return &object.Array{Elements: newElements}
19451948
} else {
19461949
// string
19471950
str := []rune(args[0].(*object.String).Value)

0 commit comments

Comments
 (0)