From 8a73502f11d453edf4199a1ba94d39f526eb9ab2 Mon Sep 17 00:00:00 2001 From: Caleb Champlin Date: Sun, 30 Mar 2025 21:36:12 -0600 Subject: [PATCH] reflect: Add SliceOf, ArrayOf, StructOf, MapOf, FuncOf --- src/reflect/type.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/reflect/type.go b/src/reflect/type.go index a162aa797..7c74aa8e1 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -499,3 +499,33 @@ type StructTag = reflectlite.StructTag func TypeFor[T any]() Type { return toType(reflectlite.TypeFor[T]()) } + +func SliceOf(t Type) Type { + return toType(reflectlite.SliceOf(toRawType(t))) +} + +func ArrayOf(n int, t Type) Type { + return toType(reflectlite.ArrayOf(n, toRawType(t))) +} + +func StructOf([]StructField) Type { + return toType(reflectlite.StructOf([]reflectlite.StructField{})) +} + +func MapOf(key, value Type) Type { + return toType(reflectlite.MapOf(toRawType(key), toRawType(value))) +} + +func FuncOf(in, out []Type, variadic bool) Type { + rawIn := make([]reflectlite.Type, len(in)) + for i, t := range in { + rawIn[i] = toRawType(t) + } + + rawOut := make([]reflectlite.Type, len(out)) + for i, t := range out { + rawOut[i] = toRawType(t) + } + + return toType(reflectlite.FuncOf(rawIn, rawOut, variadic)) +}