mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-04 19:17:47 +00:00
Set internal linkage and keeping default visibility for anonymous functions
This commit is contained in:
Vendored
+53
@@ -0,0 +1,53 @@
|
||||
package value
|
||||
|
||||
type (
|
||||
Value[T any] interface {
|
||||
Get(Callback[T], Callback[T])
|
||||
}
|
||||
|
||||
Callback[T any] func(T)
|
||||
|
||||
Transform[S any, D any] func(S) D
|
||||
)
|
||||
|
||||
func New[T any](v T) Value[T] {
|
||||
return &value[T]{
|
||||
v: v,
|
||||
}
|
||||
}
|
||||
|
||||
type value[T any] struct {
|
||||
v T
|
||||
}
|
||||
|
||||
func (v *value[T]) Get(fn1, fn2 Callback[T]) {
|
||||
// For example purposes.
|
||||
// Normally would be asynchronous callback.
|
||||
fn1(v.v)
|
||||
fn2(v.v)
|
||||
}
|
||||
|
||||
func Map[S, D any](v Value[S], tx Transform[S, D]) Value[D] {
|
||||
return &mapper[S, D]{
|
||||
v: v,
|
||||
tx: tx,
|
||||
}
|
||||
}
|
||||
|
||||
type mapper[S, D any] struct {
|
||||
v Value[S]
|
||||
tx Transform[S, D]
|
||||
}
|
||||
|
||||
func (m *mapper[S, D]) Get(fn1, fn2 Callback[D]) {
|
||||
// two callbacks are passed to generate more than
|
||||
// one anonymous function symbol name.
|
||||
m.v.Get(func(v S) {
|
||||
// anonymous function inside of anonymous function.
|
||||
func() {
|
||||
fn1(m.tx(v))
|
||||
}()
|
||||
}, func(v S) {
|
||||
fn2(m.tx(v))
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user