diff options
| author | 2025-08-10 15:05:54 +0200 | |
|---|---|---|
| committer | 2025-08-10 15:05:54 +0200 | |
| commit | 67100809b399b60e58490fa8b1c0a72be75ac820 (patch) | |
| tree | ae6df939bf9fe557a766120bee3363f89b47f961 /vendor/codeberg.org/gruf/go-kv/v2/format/abi.go | |
| parent | [feature + performance] add JSON logging format (#4355) (diff) | |
| download | gotosocial-67100809b399b60e58490fa8b1c0a72be75ac820.tar.xz | |
[chore] update dependencies (#4361)
- codeberg.org/gruf/go-kv/v2 v2.0.5 => v2.0.6
- github.com/coreos/go-oidc/v3 v3.14.1 => v3.15.0
- github.com/miekg/dns v1.1.67 => v1.1.68
- github.com/tdewolff/minify/v2 v2.23.9 => v2.23.11
- github.com/yuin/goldmark v1.7.12 => v1.7.13
- golang.org/x/crypto v0.40.0 => v0.41.0
- golang.org/x/image v0.29.0 => v0.30.0
- golang.org/x/net v0.42.0 => v0.43.0
- golang.org/x/sys v0.34.0 => v0.35.0
- golang.org/x/text v0.27.0 => v0.28.0
- modernc.org/sqlite v1.38.0 => v1.38.2
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4361
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/codeberg.org/gruf/go-kv/v2/format/abi.go')
| -rw-r--r-- | vendor/codeberg.org/gruf/go-kv/v2/format/abi.go | 244 |
1 files changed, 3 insertions, 241 deletions
diff --git a/vendor/codeberg.org/gruf/go-kv/v2/format/abi.go b/vendor/codeberg.org/gruf/go-kv/v2/format/abi.go index b68d3cb73..16b9c8cb9 100644 --- a/vendor/codeberg.org/gruf/go-kv/v2/format/abi.go +++ b/vendor/codeberg.org/gruf/go-kv/v2/format/abi.go @@ -5,88 +5,10 @@ package format import ( "reflect" "unsafe" -) -const ( - // see: go/src/internal/abi/type.go - abi_KindDirectIface uint8 = 1 << 5 - abi_KindMask uint8 = (1 << 5) - 1 + "codeberg.org/gruf/go-xunsafe" ) -// abi_Type is a copy of the memory layout of abi.Type{}. -// -// see: go/src/internal/abi/type.go -type abi_Type struct { - _ uintptr - PtrBytes uintptr - _ uint32 - _ uint8 - _ uint8 - _ uint8 - Kind_ uint8 - _ func(unsafe.Pointer, unsafe.Pointer) bool - _ *byte - _ int32 - _ int32 -} - -// abi_EmptyInterface is a copy of the memory layout of abi.EmptyInterface{}, -// which is to say also the memory layout of any method-less interface. -// -// see: go/src/internal/abi/iface.go -type abi_EmptyInterface struct { - Type *abi_Type - Data unsafe.Pointer -} - -// abi_NonEmptyInterface is a copy of the memory layout of abi.NonEmptyInterface{}, -// which is to say also the memory layout of any interface containing method(s). -// -// see: go/src/internal/abi/iface.go on 1.25+ -// see: go/src/reflect/value.go on 1.24 -type abi_NonEmptyInterface struct { - ITab uintptr - Data unsafe.Pointer -} - -// see: go/src/internal/abi/type.go Type.Kind() -func abi_Type_Kind(t reflect.Type) uint8 { - iface := (*abi_NonEmptyInterface)(unsafe.Pointer(&t)) - atype := (*abi_Type)(unsafe.Pointer(iface.Data)) - return atype.Kind_ & abi_KindMask -} - -// see: go/src/internal/abi/type.go Type.IfaceIndir() -func abi_Type_IfaceIndir(t reflect.Type) bool { - iface := (*abi_NonEmptyInterface)(unsafe.Pointer(&t)) - atype := (*abi_Type)(unsafe.Pointer(iface.Data)) - return atype.Kind_&abi_KindDirectIface == 0 -} - -// pack_iface packs a new reflect.nonEmptyInterface{} using shielded -// itab and data pointer, returning a pointer for caller casting. -func pack_iface(itab uintptr, word unsafe.Pointer) unsafe.Pointer { - return unsafe.Pointer(&abi_NonEmptyInterface{ - ITab: itab, - Data: word, - }) -} - -// get_iface_ITab generates a new value of given type, -// casts it to the generic param interface type, and -// returns the .itab portion of the reflect.nonEmptyInterface{}. -// this is useful for later calls to pack_iface for known type. -func get_iface_ITab[I any](t reflect.Type) uintptr { - s := reflect.New(t).Elem().Interface().(I) - i := (*abi_NonEmptyInterface)(unsafe.Pointer(&s)) - return i.ITab -} - -// unpack_eface returns the .Data portion of an abi.EmptyInterface{}. -func unpack_eface(a any) unsafe.Pointer { - return (*abi_EmptyInterface)(unsafe.Pointer((&a))).Data -} - // add returns the ptr addition of starting ptr and a delta. func add(ptr unsafe.Pointer, delta uintptr) unsafe.Pointer { return unsafe.Pointer(uintptr(ptr) + delta) @@ -97,167 +19,7 @@ func typeof[T any]() reflect.Type { return reflect.TypeFor[T]() } -// see: go/src/reflect/value.go -type reflect_flag uintptr - const ( - // see: go/src/reflect/value.go - reflect_flagKindWidth = 5 // there are 27 kinds - reflect_flagKindMask reflect_flag = 1<<reflect_flagKindWidth - 1 - reflect_flagStickyRO reflect_flag = 1 << 5 - reflect_flagEmbedRO reflect_flag = 1 << 6 - reflect_flagIndir reflect_flag = 1 << 7 - reflect_flagAddr reflect_flag = 1 << 8 - reflect_flagMethod reflect_flag = 1 << 9 - reflect_flagMethodShift = 10 - reflect_flagRO reflect_flag = reflect_flagStickyRO | reflect_flagEmbedRO - - // custom flag to indicate key types. - flagKeyType = 1 << 10 + // custom xunsafe.Reflect_flag to indicate key types. + flagKeyType xunsafe.Reflect_flag = 1 << 10 ) - -// reflect_iface_elem_flags returns the reflect_flag expected of an unboxed interface element of type. -// -// see: go/src/reflect/value.go unpackElem() -func reflect_iface_elem_flags(elemType reflect.Type) reflect_flag { - if elemType == nil { - return 0 - } - flags := reflect_flag(abi_Type_Kind(elemType)) - if abi_Type_IfaceIndir(elemType) { - flags |= reflect_flagIndir - } - return flags -} - -// reflect_pointer_elem_flags returns the reflect_flag expected of a dereferenced pointer element of type. -// -// see: go/src/reflect/value.go Value.Elem() -func reflect_pointer_elem_flags(ptrFlags reflect_flag, elemType reflect.Type) reflect_flag { - return ptrFlags | reflect_flagIndir | reflect_flagAddr | reflect_flag(abi_Type_Kind(elemType)) -} - -// reflect_array_elem_flags returns the reflect_flag expected of an element of type in an array. -// -// see: go/src/reflect/value.go Value.Index() -func reflect_array_elem_flags(arrayFlags reflect_flag, elemType reflect.Type) reflect_flag { - return arrayFlags&(reflect_flagIndir|reflect_flagAddr) | reflect_flag(abi_Type_Kind(elemType)) -} - -// reflect_slice_elem_flags returns the reflect_flag expected of a slice element of type. -// -// see: go/src/reflect/value.go Value.Index() -func reflect_slice_elem_flags(elemType reflect.Type) reflect_flag { - return reflect_flagAddr | reflect_flagIndir | reflect_flag(abi_Type_Kind(elemType)) -} - -// reflect_struct_field_flags returns the reflect_flag expected of a struct field of type. -// -// see: go/src/reflect/value.go Value.Field() -func reflect_struct_field_flags(structFlags reflect_flag, fieldType reflect.Type) reflect_flag { - return structFlags&(reflect_flagIndir|reflect_flagAddr) | reflect_flag(abi_Type_Kind(fieldType)) -} - -// reflect_map_key_flags returns the reflect_flag expected of a map key of type (with our own key type mask set). -// -// see: go/src/reflect/map_swiss.go MapIter.Key() -func reflect_map_key_flags(keyType reflect.Type) reflect_flag { - return flagKeyType | reflect_flag(abi_Type_Kind(keyType)) -} - -// reflect_map_elem_flags returns the reflect_flag expected of a map element of type. -// -// see: go/src/reflect/map_swiss.go MapIter.Value() -func reflect_map_elem_flags(elemType reflect.Type) reflect_flag { - return reflect_flag(abi_Type_Kind(elemType)) -} - -// reflect_Value is a copy of the memory layout of reflect.Value{}. -// -// see: go/src/reflect/value.go -type reflect_Value struct { - typ_ unsafe.Pointer - ptr unsafe.Pointer - reflect_flag -} - -func init() { - if unsafe.Sizeof(reflect_Value{}) != unsafe.Sizeof(reflect.Value{}) { - panic("reflect_Value{} not in sync with reflect.Value{}") - } -} - -// reflect_type_data returns the .word from the reflect.Type{} cast -// as the reflect.nonEmptyInterface{}, which itself will be a pointer -// to the actual abi.Type{} that this reflect.Type{} is wrapping. -func reflect_type_data(t reflect.Type) unsafe.Pointer { - return (*abi_NonEmptyInterface)(unsafe.Pointer(&t)).Data -} - -// build_reflect_value manually builds a reflect.Value{} by setting the internal field members. -func build_reflect_value(rtype reflect.Type, data unsafe.Pointer, flags reflect_flag) reflect.Value { - return *(*reflect.Value)(unsafe.Pointer(&reflect_Value{reflect_type_data(rtype), data, flags})) -} - -// maps_Iter is a copy of the memory layout of maps.Iter{}. -// -// see: go/src/internal/runtime/maps/table.go -type maps_Iter struct { - key unsafe.Pointer - elem unsafe.Pointer - _ uintptr - _ uintptr - _ uint64 - _ uint64 - _ uint64 - _ uint8 - _ int - _ uintptr - _ struct{ _ unsafe.Pointer } - _ uint64 -} - -// reflect_MapIter is a copy of the memory layout of reflect.MapIter{}. -// -// see: go/src/reflect/map_swiss.go -type reflect_MapIter struct { - m reflect.Value - hiter maps_Iter -} - -func init() { - if unsafe.Sizeof(reflect_MapIter{}) != unsafe.Sizeof(reflect.MapIter{}) { - panic("reflect_MapIter{} not in sync with reflect.MapIter{}") - } -} - -// map_iter creates a new map iterator from value, -// skipping the initial v.MapRange() type checking. -func map_iter(v reflect.Value) *reflect.MapIter { - var i reflect_MapIter - i.m = v - return (*reflect.MapIter)(unsafe.Pointer(&i)) -} - -// map_key returns ptr to current map key in iter. -func map_key(i *reflect.MapIter) unsafe.Pointer { - return (*reflect_MapIter)(unsafe.Pointer(i)).hiter.key -} - -// map_elem returns ptr to current map element in iter. -func map_elem(i *reflect.MapIter) unsafe.Pointer { - return (*reflect_MapIter)(unsafe.Pointer(i)).hiter.elem -} - -// see: go/src/internal/unsafeheader/unsafeheader.go -type unsafeheader_Slice struct { - Data unsafe.Pointer - Len int - Cap int -} - -// see: go/src/internal/unsafeheader/unsafeheader.go -type unsafeheader_String struct { - Data unsafe.Pointer - Len int -} |
