From b8a185c1120679c14f149dd1c2c73962dc1bbe46 Mon Sep 17 00:00:00 2001 From: visualfc Date: Thu, 14 Nov 2024 09:55:56 +0800 Subject: [PATCH] internal/lib/reflect: Value.Slice Value.Slice3 --- internal/lib/reflect/value.go | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/internal/lib/reflect/value.go b/internal/lib/reflect/value.go index b626b2b2..5132d7c3 100644 --- a/internal/lib/reflect/value.go +++ b/internal/lib/reflect/value.go @@ -1347,7 +1347,6 @@ func (v Value) SetString(x string) { // It panics if v's Kind is not Array, Slice or String, or if v is an unaddressable array, // or if the indexes are out of bounds. func (v Value) Slice(i, j int) Value { - /* TODO(xsw): var ( cap int typ *sliceType @@ -1368,18 +1367,18 @@ func (v Value) Slice(i, j int) Value { case Slice: typ = (*sliceType)(unsafe.Pointer(v.typ())) - s := (*unsafeheader.Slice)(v.ptr) + s := (*unsafeheaderSlice)(v.ptr) base = s.Data cap = s.Cap case String: - s := (*unsafeheader.String)(v.ptr) + s := (*unsafeheaderString)(v.ptr) if i < 0 || j < i || j > s.Len { panic("reflect.Value.Slice: string slice index out of bounds") } - var t unsafeheader.String + var t unsafeheaderString if i < s.Len { - t = unsafeheader.String{Data: arrayAt(s.Data, i, 1, "i < s.Len"), Len: j - i} + t = unsafeheaderString{Data: arrayAt(s.Data, i, 1, "i < s.Len"), Len: j - i} } return Value{v.typ(), unsafe.Pointer(&t), v.flag} } @@ -1392,7 +1391,7 @@ func (v Value) Slice(i, j int) Value { var x []unsafe.Pointer // Reinterpret as *unsafeheader.Slice to edit. - s := (*unsafeheader.Slice)(unsafe.Pointer(&x)) + s := (*unsafeheaderSlice)(unsafe.Pointer(&x)) s.Len = j - i s.Cap = cap - i if cap-i > 0 { @@ -1404,15 +1403,12 @@ func (v Value) Slice(i, j int) Value { fl := v.flag.ro() | flagIndir | flag(Slice) return Value{typ.Common(), unsafe.Pointer(&x), fl} - */ - panic("todo: reflect.Value.Slice") } // Slice3 is the 3-index form of the slice operation: it returns v[i:j:k]. // It panics if v's Kind is not Array or Slice, or if v is an unaddressable array, // or if the indexes are out of bounds. func (v Value) Slice3(i, j, k int) Value { - /* TODO(xsw): var ( cap int typ *sliceType @@ -1433,7 +1429,7 @@ func (v Value) Slice3(i, j, k int) Value { case Slice: typ = (*sliceType)(unsafe.Pointer(v.typ())) - s := (*unsafeheader.Slice)(v.ptr) + s := (*unsafeheaderSlice)(v.ptr) base = s.Data cap = s.Cap } @@ -1447,7 +1443,7 @@ func (v Value) Slice3(i, j, k int) Value { var x []unsafe.Pointer // Reinterpret as *unsafeheader.Slice to edit. - s := (*unsafeheader.Slice)(unsafe.Pointer(&x)) + s := (*unsafeheaderSlice)(unsafe.Pointer(&x)) s.Len = j - i s.Cap = k - i if k-i > 0 { @@ -1459,8 +1455,6 @@ func (v Value) Slice3(i, j, k int) Value { fl := v.flag.ro() | flagIndir | flag(Slice) return Value{typ.Common(), unsafe.Pointer(&x), fl} - */ - panic("todo: reflect.Value.Slice3") } // String returns the string v's underlying value, as a string.