diff --git a/core/slice/slice.odin b/core/slice/slice.odin index 992efb3f1..426829a22 100644 --- a/core/slice/slice.odin +++ b/core/slice/slice.odin @@ -306,21 +306,17 @@ filter :: proc(s: $S/[]$U, f: proc(U) -> bool, allocator := context.allocator) - scanner :: proc (s: $S/[]$U, initializer: $V, f: proc(V, U)->V, allocator := context.allocator) -> []V { if len(s) == 0 { return {} } - p := as_ptr(s) res := make([]V, len(s), allocator) - + p := as_ptr(s) q := as_ptr(res) - l := len(res) + r := initializer - r := initializer - - for l > 0 { - r = f(r, p^) - q^ = r - p = intrinsics.ptr_offset(p, 1) - q = intrinsics.ptr_offset(q, 1) - l -= 1 + for l := len(s); l > 0; l -= 1 { + r = f(r, p[0]) + q[0] = r + p = p[1:] + q = q[1:] } return res