mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-30 10:45:18 -06:00
Merge pull request #575 from arv/register-ref
Clean up registration of Ref values
This commit is contained in:
@@ -472,9 +472,11 @@ func (m RefOfIncident) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfIncident = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(__commonPackageInFile_incident_CachedRef, 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfIncident, func(v types.Value) types.Value {
|
||||
return NewRefOfIncident(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfIncident, builderForRefOfIncident)
|
||||
}
|
||||
|
||||
func builderForRefOfIncident(r ref.Ref) types.Value {
|
||||
return NewRefOfIncident(r)
|
||||
}
|
||||
|
||||
func (r RefOfIncident) TargetValue(cs chunks.ChunkSource) Incident {
|
||||
|
||||
@@ -538,9 +538,11 @@ func (m RefOfValue) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfValue = types.MakeCompoundTypeRef(types.RefKind, types.MakePrimitiveTypeRef(types.ValueKind))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfValue, func(v types.Value) types.Value {
|
||||
return NewRefOfValue(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfValue, builderForRefOfValue)
|
||||
}
|
||||
|
||||
func builderForRefOfValue(r ref.Ref) types.Value {
|
||||
return NewRefOfValue(r)
|
||||
}
|
||||
|
||||
func (r RefOfValue) TargetValue(cs chunks.ChunkSource) types.Value {
|
||||
@@ -1123,9 +1125,11 @@ func (m RefOfSQuadTree) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfSQuadTree = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(__commonPackageInFile_quad_tree_CachedRef, 2))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfSQuadTree, func(v types.Value) types.Value {
|
||||
return NewRefOfSQuadTree(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfSQuadTree, builderForRefOfSQuadTree)
|
||||
}
|
||||
|
||||
func builderForRefOfSQuadTree(r ref.Ref) types.Value {
|
||||
return NewRefOfSQuadTree(r)
|
||||
}
|
||||
|
||||
func (r RefOfSQuadTree) TargetValue(cs chunks.ChunkSource) SQuadTree {
|
||||
|
||||
@@ -477,9 +477,11 @@ func (m RefOfUser) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfUser = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(__mainPackageInFile_types_CachedRef, 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfUser, func(v types.Value) types.Value {
|
||||
return NewRefOfUser(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfUser, builderForRefOfUser)
|
||||
}
|
||||
|
||||
func builderForRefOfUser(r ref.Ref) types.Value {
|
||||
return NewRefOfUser(r)
|
||||
}
|
||||
|
||||
func (r RefOfUser) TargetValue(cs chunks.ChunkSource) User {
|
||||
@@ -528,9 +530,11 @@ func (m RefOfSetOfRefOfRemotePhoto) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfSetOfRefOfRemotePhoto = types.MakeCompoundTypeRef(types.RefKind, types.MakeCompoundTypeRef(types.SetKind, types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(ref.Parse("sha1-00419ebbb418539af67238164b20341913efeb4d"), 0))))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfSetOfRefOfRemotePhoto, func(v types.Value) types.Value {
|
||||
return NewRefOfSetOfRefOfRemotePhoto(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfSetOfRefOfRemotePhoto, builderForRefOfSetOfRefOfRemotePhoto)
|
||||
}
|
||||
|
||||
func builderForRefOfSetOfRefOfRemotePhoto(r ref.Ref) types.Value {
|
||||
return NewRefOfSetOfRefOfRemotePhoto(r)
|
||||
}
|
||||
|
||||
func (r RefOfSetOfRefOfRemotePhoto) TargetValue(cs chunks.ChunkSource) SetOfRefOfRemotePhoto {
|
||||
@@ -727,9 +731,11 @@ func (m RefOfRemotePhoto) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfRemotePhoto = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(ref.Parse("sha1-00419ebbb418539af67238164b20341913efeb4d"), 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfRemotePhoto, func(v types.Value) types.Value {
|
||||
return NewRefOfRemotePhoto(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfRemotePhoto, builderForRefOfRemotePhoto)
|
||||
}
|
||||
|
||||
func builderForRefOfRemotePhoto(r ref.Ref) types.Value {
|
||||
return NewRefOfRemotePhoto(r)
|
||||
}
|
||||
|
||||
func (r RefOfRemotePhoto) TargetValue(cs chunks.ChunkSource) RemotePhoto {
|
||||
|
||||
@@ -640,9 +640,11 @@ func (m RefOfUser) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfUser = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(__mainPackageInFile_picasa_CachedRef, 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfUser, func(v types.Value) types.Value {
|
||||
return NewRefOfUser(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfUser, builderForRefOfUser)
|
||||
}
|
||||
|
||||
func builderForRefOfUser(r ref.Ref) types.Value {
|
||||
return NewRefOfUser(r)
|
||||
}
|
||||
|
||||
func (r RefOfUser) TargetValue(cs chunks.ChunkSource) User {
|
||||
@@ -691,9 +693,11 @@ func (m RefOfSetOfRefOfRemotePhoto) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfSetOfRefOfRemotePhoto = types.MakeCompoundTypeRef(types.RefKind, types.MakeCompoundTypeRef(types.SetKind, types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(ref.Parse("sha1-00419ebbb418539af67238164b20341913efeb4d"), 0))))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfSetOfRefOfRemotePhoto, func(v types.Value) types.Value {
|
||||
return NewRefOfSetOfRefOfRemotePhoto(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfSetOfRefOfRemotePhoto, builderForRefOfSetOfRefOfRemotePhoto)
|
||||
}
|
||||
|
||||
func builderForRefOfSetOfRefOfRemotePhoto(r ref.Ref) types.Value {
|
||||
return NewRefOfSetOfRefOfRemotePhoto(r)
|
||||
}
|
||||
|
||||
func (r RefOfSetOfRefOfRemotePhoto) TargetValue(cs chunks.ChunkSource) SetOfRefOfRemotePhoto {
|
||||
@@ -890,9 +894,11 @@ func (m RefOfRemotePhoto) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfRemotePhoto = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(ref.Parse("sha1-00419ebbb418539af67238164b20341913efeb4d"), 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfRemotePhoto, func(v types.Value) types.Value {
|
||||
return NewRefOfRemotePhoto(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfRemotePhoto, builderForRefOfRemotePhoto)
|
||||
}
|
||||
|
||||
func builderForRefOfRemotePhoto(r ref.Ref) types.Value {
|
||||
return NewRefOfRemotePhoto(r)
|
||||
}
|
||||
|
||||
func (r RefOfRemotePhoto) TargetValue(cs chunks.ChunkSource) RemotePhoto {
|
||||
|
||||
@@ -320,9 +320,11 @@ func (m RefOfRemotePhoto) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfRemotePhoto = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(ref.Parse("sha1-00419ebbb418539af67238164b20341913efeb4d"), 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfRemotePhoto, func(v types.Value) types.Value {
|
||||
return NewRefOfRemotePhoto(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfRemotePhoto, builderForRefOfRemotePhoto)
|
||||
}
|
||||
|
||||
func builderForRefOfRemotePhoto(r ref.Ref) types.Value {
|
||||
return NewRefOfRemotePhoto(r)
|
||||
}
|
||||
|
||||
func (r RefOfRemotePhoto) TargetValue(cs chunks.ChunkSource) RemotePhoto {
|
||||
|
||||
@@ -442,9 +442,11 @@ func (m RefOfCommit) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfCommit = types.MakeCompoundTypeRef(types.RefKind, types.MakeTypeRef(__datasPackageInFile_types_CachedRef, 0))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfCommit, func(v types.Value) types.Value {
|
||||
return NewRefOfCommit(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfCommit, builderForRefOfCommit)
|
||||
}
|
||||
|
||||
func builderForRefOfCommit(r ref.Ref) types.Value {
|
||||
return NewRefOfCommit(r)
|
||||
}
|
||||
|
||||
func (r RefOfCommit) TargetValue(cs chunks.ChunkSource) Commit {
|
||||
|
||||
@@ -38,9 +38,11 @@ func (m {{.Name}}) TypeRef() {{$typesPackage}}TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefFor{{.Name}} = {{toTypesTypeRef .Type .FileID .PackageName}}
|
||||
{{$typesPackage}}RegisterFromValFunction(__typeRefFor{{.Name}}, func(v {{$typesPackage}}Value) {{$typesPackage}}Value {
|
||||
return New{{.Name}}(v.({{$typesPackage}}Ref).TargetRef())
|
||||
})
|
||||
{{$typesPackage}}RegisterRef(__typeRefFor{{.Name}}, builderFor{{.Name}})
|
||||
}
|
||||
|
||||
func builderFor{{.Name}}(r ref.Ref) {{$typesPackage}}Value {
|
||||
return New{{.Name}}(r)
|
||||
}
|
||||
|
||||
func (r {{.Name}}) TargetValue(cs chunks.ChunkSource) {{userType .ElemType}} {
|
||||
|
||||
@@ -149,9 +149,11 @@ func (m RefOfListOfString) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfListOfString = types.MakeCompoundTypeRef(types.RefKind, types.MakeCompoundTypeRef(types.ListKind, types.MakePrimitiveTypeRef(types.StringKind)))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfListOfString, func(v types.Value) types.Value {
|
||||
return NewRefOfListOfString(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfListOfString, builderForRefOfListOfString)
|
||||
}
|
||||
|
||||
func builderForRefOfListOfString(r ref.Ref) types.Value {
|
||||
return NewRefOfListOfString(r)
|
||||
}
|
||||
|
||||
func (r RefOfListOfString) TargetValue(cs chunks.ChunkSource) ListOfString {
|
||||
@@ -341,9 +343,11 @@ func (m RefOfSetOfFloat32) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfSetOfFloat32 = types.MakeCompoundTypeRef(types.RefKind, types.MakeCompoundTypeRef(types.SetKind, types.MakePrimitiveTypeRef(types.Float32Kind)))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfSetOfFloat32, func(v types.Value) types.Value {
|
||||
return NewRefOfSetOfFloat32(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfSetOfFloat32, builderForRefOfSetOfFloat32)
|
||||
}
|
||||
|
||||
func builderForRefOfSetOfFloat32(r ref.Ref) types.Value {
|
||||
return NewRefOfSetOfFloat32(r)
|
||||
}
|
||||
|
||||
func (r RefOfSetOfFloat32) TargetValue(cs chunks.ChunkSource) SetOfFloat32 {
|
||||
@@ -533,9 +537,11 @@ func (m RefOfFloat32) TypeRef() types.TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfFloat32 = types.MakeCompoundTypeRef(types.RefKind, types.MakePrimitiveTypeRef(types.Float32Kind))
|
||||
types.RegisterFromValFunction(__typeRefForRefOfFloat32, func(v types.Value) types.Value {
|
||||
return NewRefOfFloat32(v.(types.Ref).TargetRef())
|
||||
})
|
||||
types.RegisterRef(__typeRefForRefOfFloat32, builderForRefOfFloat32)
|
||||
}
|
||||
|
||||
func builderForRefOfFloat32(r ref.Ref) types.Value {
|
||||
return NewRefOfFloat32(r)
|
||||
}
|
||||
|
||||
func (r RefOfFloat32) TargetValue(cs chunks.ChunkSource) float32 {
|
||||
|
||||
@@ -449,9 +449,11 @@ func (m RefOfBlob) TypeRef() TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfBlob = MakeCompoundTypeRef(RefKind, MakePrimitiveTypeRef(BlobKind))
|
||||
RegisterFromValFunction(__typeRefForRefOfBlob, func(v Value) Value {
|
||||
return NewRefOfBlob(v.(Ref).TargetRef())
|
||||
})
|
||||
RegisterRef(__typeRefForRefOfBlob, builderForRefOfBlob)
|
||||
}
|
||||
|
||||
func builderForRefOfBlob(r ref.Ref) Value {
|
||||
return NewRefOfBlob(r)
|
||||
}
|
||||
|
||||
func (r RefOfBlob) TargetValue(cs chunks.ChunkSource) Blob {
|
||||
|
||||
@@ -158,9 +158,8 @@ func (r *jsonArrayReader) readPackage(t TypeRef, pkg *Package) Value {
|
||||
|
||||
func (r *jsonArrayReader) readRefValue(t TypeRef, pkg *Package) Value {
|
||||
ref := r.readRef()
|
||||
v := NewRef(ref)
|
||||
t = fixupTypeRef(t, pkg)
|
||||
return ToNomsValueFromTypeRef(t, v)
|
||||
return refFromTypeRef(ref, t)
|
||||
}
|
||||
|
||||
func (r *jsonArrayReader) readTopLevelValue() Value {
|
||||
|
||||
@@ -109,14 +109,8 @@ func TestReadListOfValue(t *testing.T) {
|
||||
|
||||
a := parseJson(`[%d, %d, [%d, 1, %d, "hi", %d, true]]`, ListKind, ValueKind, Int32Kind, StringKind, BoolKind)
|
||||
r := newJsonArrayReader(a, cs)
|
||||
|
||||
listTr := MakeCompoundTypeRef(ListKind, MakePrimitiveTypeRef(ValueKind))
|
||||
RegisterFromValFunction(listTr, func(v Value) Value {
|
||||
return v
|
||||
})
|
||||
|
||||
l := r.readTopLevelValue()
|
||||
assert.EqualValues(NewList(Int32(1), NewString("hi"), Bool(true)), l)
|
||||
assert.True(NewList(Int32(1), NewString("hi"), Bool(true)).Equals(l))
|
||||
}
|
||||
|
||||
func TestReadValueListOfInt8(t *testing.T) {
|
||||
@@ -390,15 +384,8 @@ func TestReadRef(t *testing.T) {
|
||||
cs := chunks.NewMemoryStore()
|
||||
|
||||
r := ref.Parse("sha1-a9993e364706816aba3e25717850c26c9cd0d89d")
|
||||
|
||||
a := parseJson(`[%d, %d, "%s"]`, RefKind, UInt32Kind, r.String())
|
||||
reader := newJsonArrayReader(a, cs)
|
||||
|
||||
refTr := MakeCompoundTypeRef(RefKind, MakePrimitiveTypeRef(UInt32Kind))
|
||||
RegisterFromValFunction(refTr, func(v Value) Value {
|
||||
return v
|
||||
})
|
||||
|
||||
v := reader.readTopLevelValue()
|
||||
assert.True(NewRef(r).Equals(v))
|
||||
}
|
||||
@@ -408,15 +395,8 @@ func TestReadValueRef(t *testing.T) {
|
||||
cs := chunks.NewMemoryStore()
|
||||
|
||||
r := ref.Parse("sha1-a9993e364706816aba3e25717850c26c9cd0d89d")
|
||||
|
||||
a := parseJson(`[%d, %d, %d, "%s"]`, ValueKind, RefKind, UInt32Kind, r.String())
|
||||
reader := newJsonArrayReader(a, cs)
|
||||
|
||||
refTypeRef := MakeCompoundTypeRef(RefKind, MakePrimitiveTypeRef(UInt32Kind))
|
||||
RegisterFromValFunction(refTypeRef, func(v Value) Value {
|
||||
return v
|
||||
})
|
||||
|
||||
v := reader.readTopLevelValue()
|
||||
assert.True(NewRef(r).Equals(v))
|
||||
}
|
||||
@@ -446,13 +426,7 @@ func TestReadStructWithEnum(t *testing.T) {
|
||||
|
||||
a := parseJson(`[%d, "%s", 0, 42, 1, true]`, UnresolvedKind, pkgRef.String())
|
||||
r := newJsonArrayReader(a, cs)
|
||||
|
||||
structTr := MakeTypeRef(pkgRef, 0)
|
||||
RegisterFromValFunction(structTr, func(v Value) Value {
|
||||
return v
|
||||
})
|
||||
enumTr := MakeTypeRef(pkgRef, 1)
|
||||
|
||||
v := r.readTopLevelValue().(Struct)
|
||||
|
||||
assert.True(v.Get("x").Equals(Int16(42)))
|
||||
|
||||
@@ -104,7 +104,7 @@ func (w *jsonArrayWriter) writeValue(v Value, tr TypeRef, pkg *Package) {
|
||||
}
|
||||
w.write(w3.toArray())
|
||||
case RefKind:
|
||||
w.writeRef(getRefFromRefKind(v))
|
||||
w.writeRef(v.(RefBase).TargetRef())
|
||||
case SetKind:
|
||||
w2 := newJsonArrayWriter(w.cs)
|
||||
elemType := tr.Desc.(CompoundDesc).ElemTypes[0]
|
||||
@@ -131,15 +131,6 @@ func (w *jsonArrayWriter) writeValue(v Value, tr TypeRef, pkg *Package) {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: This is ugly. BUG 452
|
||||
type refImplementation interface {
|
||||
TargetRef() ref.Ref
|
||||
}
|
||||
|
||||
func getRefFromRefKind(v Value) ref.Ref {
|
||||
return v.(refImplementation).TargetRef()
|
||||
}
|
||||
|
||||
func (w *jsonArrayWriter) writeTypeRefAsValue(v TypeRef) {
|
||||
k := v.Kind()
|
||||
w.write(k)
|
||||
|
||||
@@ -20,12 +20,6 @@ type MapFunc func(v Value, index uint64) interface{}
|
||||
|
||||
var listTypeRef = MakeCompoundTypeRef(ListKind, MakePrimitiveTypeRef(ValueKind))
|
||||
|
||||
func init() {
|
||||
RegisterFromValFunction(listTypeRef, func(v Value) Value {
|
||||
return v.(List)
|
||||
})
|
||||
}
|
||||
|
||||
func NewList(v ...Value) List {
|
||||
// Copy because Noms values are supposed to be immutable and Go allows v to be reused (thus mutable).
|
||||
values := make([]Value, len(v))
|
||||
|
||||
@@ -142,12 +142,6 @@ func (m Map) elemTypes() []TypeRef {
|
||||
return m.t.Desc.(CompoundDesc).ElemTypes
|
||||
}
|
||||
|
||||
func init() {
|
||||
RegisterFromValFunction(mapTypeRef, func(v Value) Value {
|
||||
return v.(Map)
|
||||
})
|
||||
}
|
||||
|
||||
type mapEntry struct {
|
||||
key Value
|
||||
value Value
|
||||
|
||||
@@ -8,13 +8,12 @@ import (
|
||||
|
||||
type enumBuilderFunc func(v uint32) Value
|
||||
type enumReaderFunc func(v Value) uint32
|
||||
type refBuilderFunc func(target ref.Ref) Value
|
||||
type structBuilderFunc func() chan Value
|
||||
type structReaderFunc func(v Value) chan Value
|
||||
type valueBuilderFunc func(v Value) Value
|
||||
type valueReaderFunc func(v Value) Value
|
||||
|
||||
type toNomsValueFunc func(v Value) Value
|
||||
|
||||
type enumFuncs struct {
|
||||
builder enumBuilderFunc
|
||||
reader enumReaderFunc
|
||||
@@ -31,11 +30,12 @@ type valueFuncs struct {
|
||||
}
|
||||
|
||||
var (
|
||||
packages map[ref.Ref]*Package = map[ref.Ref]*Package{}
|
||||
toNomsValueMap map[ref.Ref]toNomsValueFunc = map[ref.Ref]toNomsValueFunc{}
|
||||
enumFuncMap map[ref.Ref]enumFuncs = map[ref.Ref]enumFuncs{}
|
||||
structFuncMap map[ref.Ref]structFuncs = map[ref.Ref]structFuncs{}
|
||||
valueFuncMap map[ref.Ref]valueFuncs = map[ref.Ref]valueFuncs{}
|
||||
packages map[ref.Ref]*Package = map[ref.Ref]*Package{}
|
||||
|
||||
enumFuncMap map[ref.Ref]enumFuncs = map[ref.Ref]enumFuncs{}
|
||||
refFuncMap map[ref.Ref]refBuilderFunc = map[ref.Ref]refBuilderFunc{}
|
||||
structFuncMap map[ref.Ref]structFuncs = map[ref.Ref]structFuncs{}
|
||||
valueFuncMap map[ref.Ref]valueFuncs = map[ref.Ref]valueFuncs{}
|
||||
)
|
||||
|
||||
// LookupPackage looks for a Package by ref.Ref in the global cache of Noms type packages.
|
||||
@@ -57,17 +57,6 @@ func readPackage(r ref.Ref, cs chunks.ChunkSource) *Package {
|
||||
return &p
|
||||
}
|
||||
|
||||
func RegisterFromValFunction(t TypeRef, f toNomsValueFunc) {
|
||||
toNomsValueMap[t.Ref()] = f
|
||||
}
|
||||
|
||||
func ToNomsValueFromTypeRef(t TypeRef, v Value) Value {
|
||||
if f, ok := toNomsValueMap[t.Ref()]; ok {
|
||||
return f(v)
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func RegisterStruct(t TypeRef, bf structBuilderFunc, rf structReaderFunc) {
|
||||
structFuncMap[t.Ref()] = structFuncs{bf, rf}
|
||||
}
|
||||
@@ -121,3 +110,14 @@ func internalValueFromTypeRef(v Value, t TypeRef) Value {
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
func RegisterRef(t TypeRef, bf refBuilderFunc) {
|
||||
refFuncMap[t.Ref()] = bf
|
||||
}
|
||||
|
||||
func refFromTypeRef(target ref.Ref, t TypeRef) Value {
|
||||
if f, ok := refFuncMap[t.Ref()]; ok {
|
||||
return f(target)
|
||||
}
|
||||
return NewRef(target)
|
||||
}
|
||||
|
||||
@@ -188,9 +188,11 @@ func (m RefOfPackage) TypeRef() TypeRef {
|
||||
|
||||
func init() {
|
||||
__typeRefForRefOfPackage = MakeCompoundTypeRef(RefKind, MakePrimitiveTypeRef(PackageKind))
|
||||
RegisterFromValFunction(__typeRefForRefOfPackage, func(v Value) Value {
|
||||
return NewRefOfPackage(v.(Ref).TargetRef())
|
||||
})
|
||||
RegisterRef(__typeRefForRefOfPackage, builderForRefOfPackage)
|
||||
}
|
||||
|
||||
func builderForRefOfPackage(r ref.Ref) Value {
|
||||
return NewRefOfPackage(r)
|
||||
}
|
||||
|
||||
func (r RefOfPackage) TargetValue(cs chunks.ChunkSource) Package {
|
||||
|
||||
10
types/ref.go
10
types/ref.go
@@ -11,6 +11,10 @@ type Ref struct {
|
||||
ref *ref.Ref
|
||||
}
|
||||
|
||||
type RefBase interface {
|
||||
TargetRef() ref.Ref
|
||||
}
|
||||
|
||||
func NewRef(target ref.Ref) Ref {
|
||||
return newRef(target, refTypeRef)
|
||||
}
|
||||
@@ -41,12 +45,6 @@ func (r Ref) TypeRef() TypeRef {
|
||||
return r.t
|
||||
}
|
||||
|
||||
func init() {
|
||||
RegisterFromValFunction(refTypeRef, func(v Value) Value {
|
||||
return v.(Ref)
|
||||
})
|
||||
}
|
||||
|
||||
func (r Ref) TargetValue(cs chunks.ChunkSource) Value {
|
||||
return ReadValue(r.target, cs)
|
||||
}
|
||||
|
||||
@@ -22,12 +22,6 @@ type setFilterCallback func(v Value) (keep bool)
|
||||
|
||||
var setTypeRef = MakeCompoundTypeRef(SetKind, MakePrimitiveTypeRef(ValueKind))
|
||||
|
||||
func init() {
|
||||
RegisterFromValFunction(setTypeRef, func(v Value) Value {
|
||||
return v.(Set)
|
||||
})
|
||||
}
|
||||
|
||||
func NewSet(v ...Value) Set {
|
||||
return newSetFromData(buildSetData(setData{}, v), setTypeRef)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user