Skip to content

Commit b38da5c

Browse files
committed
simplify logic and move test
1 parent f4806fa commit b38da5c

File tree

3 files changed

+21
-33
lines changed

3 files changed

+21
-33
lines changed

expr_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2765,3 +2765,20 @@ func TestMemoryBudget(t *testing.T) {
27652765
})
27662766
}
27672767
}
2768+
2769+
func TestIssue802(t *testing.T) {
2770+
prog, err := expr.Compile(`arr[1:2][0]`)
2771+
if err != nil {
2772+
t.Fatalf("error compiling program: %v", err)
2773+
}
2774+
val, err := expr.Run(prog, map[string]any{
2775+
"arr": [5]int{0, 1, 2, 3, 4},
2776+
})
2777+
if err != nil {
2778+
t.Fatalf("error running program: %v", err)
2779+
}
2780+
valInt, ok := val.(int)
2781+
if !ok || valInt != 1 {
2782+
t.Fatalf("invalid result, expected 1, got %v", val)
2783+
}
2784+
}

vm/runtime/regression_test.go

Lines changed: 0 additions & 24 deletions
This file was deleted.

vm/runtime/runtime.go

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -164,17 +164,12 @@ func Slice(array, from, to any) any {
164164
if a > b {
165165
a = b
166166
}
167-
var value reflect.Value
168167
if v.Kind() == reflect.Array && !v.CanAddr() {
169-
totalElems := b - a
170-
value = reflect.MakeSlice(reflectTypeSliceOfAny, 0, totalElems)
171-
for i := 0; i < totalElems; i++ {
172-
elem := v.Index(a + i)
173-
value = reflect.Append(value, elem)
174-
}
175-
} else {
176-
value = v.Slice(a, b)
168+
newValue := reflect.New(v.Type()).Elem()
169+
newValue.Set(v)
170+
v = newValue
177171
}
172+
value := v.Slice(a, b)
178173
if value.IsValid() {
179174
return value.Interface()
180175
}

0 commit comments

Comments
 (0)