mirror of
https://github.com/burrowers/garble.git
synced 2026-04-22 15:47:04 +08:00
b55fa77e31
The marshaler interface and some of the other types were unnecessary. The remaining test still fails without the fix, because the crux of the issue is the separate package with the Result generic type having Data as a type parameter and field.
121 lines
2.2 KiB
Plaintext
121 lines
2.2 KiB
Plaintext
exec garble build
|
|
! binsubstr main$exe ${WORK} 'garble_main.go' 'GenericFunc' 'GenericVector' 'PredeclaredSignedInteger' 'StringableSignedInteger' 'CombineEmbeds' 'GenericParam'
|
|
-- go.mod --
|
|
module test/main
|
|
|
|
go 1.23
|
|
-- garble_main.go --
|
|
package main
|
|
|
|
import "test/main/lib"
|
|
|
|
func main() {
|
|
GenericFunc[int, int](1, 2)
|
|
var _ GenericVector[int]
|
|
|
|
g1 := GenericGraph[string]{Content: "Foo"}
|
|
g1.Edges = make([]GenericGraph[string], 1)
|
|
|
|
g2 := GenericGraph[*[]byte]{Content: new([]byte)}
|
|
g2.Edges = make([]GenericGraph[*[]byte], 1)
|
|
|
|
var ga genericAlias
|
|
ga.list = nil
|
|
var gan genericAliasNamed
|
|
gan.list = nil
|
|
|
|
e := lib.Entry[string, int]{Key: "foo", Data: 123}
|
|
r := lib.Load[string, int](e)
|
|
_ = r.Data
|
|
}
|
|
|
|
func GenericFunc[GenericParamA, B any](x GenericParamA, y B) {}
|
|
|
|
type GenericVector[GenericParamT any] []GenericParamT
|
|
|
|
type GenericGraph[T any] struct {
|
|
Content T
|
|
Edges []GenericGraph[T]
|
|
}
|
|
|
|
type PredeclaredSignedInteger interface {
|
|
int | int8 | int16 | int32 | int64
|
|
}
|
|
|
|
type StringableSignedInteger interface {
|
|
~int | ~int8 | ~int16 | ~int32 | ~int64
|
|
|
|
String() string
|
|
}
|
|
|
|
type CombineEmbeds interface {
|
|
string | int
|
|
|
|
interface{ EmbeddedMethod() }
|
|
RegularMethod()
|
|
}
|
|
|
|
type Slice[T any] []T
|
|
|
|
func sliceOfPointer() Slice[*any] {
|
|
return []*any{}
|
|
}
|
|
|
|
type Map[K, V comparable] map[K]V
|
|
|
|
var _ = Map[string, struct{}]{}
|
|
|
|
type Result[T any] interface {
|
|
AsResult() Result[T]
|
|
Redirect(struct { ret T })
|
|
}
|
|
|
|
type AsyncResult[oldT, newT any] struct {}
|
|
|
|
func (w *AsyncResult[oldT, newT]) AsResult() Result[newT] {
|
|
return w
|
|
}
|
|
|
|
func (w *AsyncResult[oldT, newT]) Redirect(struct {ret newT}) {}
|
|
|
|
type genericAlias = generic[int]
|
|
type generic[T any] struct {
|
|
list *T
|
|
}
|
|
|
|
type genericAliasNamed genericAlias
|
|
|
|
func byKeys[T any](m map[string]T) []struct {
|
|
K string
|
|
V T
|
|
} {
|
|
vs := make([]struct {
|
|
K string
|
|
V T
|
|
}, 0, len(m))
|
|
for k, v := range m {
|
|
vs = append(vs, struct {
|
|
K string
|
|
V T
|
|
}{k, v})
|
|
}
|
|
return vs
|
|
}
|
|
|
|
var _ = byKeys(map[string]int{"one": 1})
|
|
-- lib/lib.go --
|
|
package lib
|
|
|
|
type Result[Data any] struct {
|
|
Data Data
|
|
}
|
|
|
|
type Entry[Key ~string, Data any] struct {
|
|
Key Key
|
|
Data Data
|
|
}
|
|
|
|
func Load[Key ~string, Data any](e Entry[Key, Data]) Result[Data] {
|
|
return Result[Data]{Data: e.Data}
|
|
}
|