NomDL: Remove $type from struct impl

The implementation of structs is a Map and we used to reserve a key
with the name "$type" for the TypeRef. This is no longer needed since
the TypeRef is a constant per struct and needs no storage.

Fixes #450
This commit is contained in:
Erik Arvidsson
2015-10-22 10:16:51 -04:00
parent 64217a8548
commit 8c4bc79fcd
5 changed files with 2 additions and 17 deletions

View File

@@ -7,7 +7,6 @@ type {{.Name}} struct {
func New{{.Name}}() {{.Name}} {
return {{.Name}}{types.NewMap(
types.NewString("$type"), types.MakeTypeRef(__{{.PackageName}}PackageInFile_{{.FileID}}_CachedRef, {{.Ordinal}}),
{{range .Fields}}{{if (not .Optional)}}types.NewString("{{.Name}}"), {{valueZero .T}},
{{end}}{{end}}{{if .HasUnion}}types.NewString("$unionIndex"), types.UInt32(0),
types.NewString("$unionValue"), {{valueZero .UnionZeroType}},{{end}}
@@ -24,7 +23,6 @@ func New{{.Name}}() {{.Name}} {
func (def {{.Name}}Def) New() {{.Name}} {
return {{.Name}}{
types.NewMap(
types.NewString("$type"), types.MakeTypeRef(__{{.PackageName}}PackageInFile_{{.FileID}}_CachedRef, {{.Ordinal}}),
{{range .Fields}}types.NewString("{{.Name}}"), {{defToValue (print "def." (title .Name)) .T}},
{{end}}{{if .HasUnion}}types.NewString("$unionIndex"), types.UInt32(def.__unionIndex),
types.NewString("$unionValue"), def.__unionDefToValue(),

View File

@@ -343,8 +343,7 @@ func (r *jsonArrayReader) readStruct(typeDef, typeRef TypeRef, pkg *Package) Val
// We've read `[StructKind, sha1, name` at this point
desc := typeDef.Desc.(StructDesc)
m := NewMap(
NewString("$type"), typeRef)
m := NewMap()
for _, f := range desc.Fields {
if f.Optional {

View File

@@ -222,7 +222,6 @@ func TestReadStruct(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("x")).Equals(Int16(42)))
assert.True(v.Get(NewString("s")).Equals(NewString("hi")))
assert.True(v.Get(NewString("b")).Equals(Bool(true)))
@@ -251,7 +250,6 @@ func TestReadStructUnion(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("x")).Equals(Float32(42)))
assert.False(v.Has(NewString("b")))
assert.False(v.Has(NewString("s")))
@@ -281,7 +279,6 @@ func TestReadStructOptional(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("x")).Equals(Float32(42)))
assert.False(v.Has(NewString("s")))
assert.True(v.Get(NewString("b")).Equals(Bool(false)))
@@ -320,7 +317,6 @@ func TestReadStructWithList(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("b")).Equals(Bool(true)))
assert.True(v.Get(NewString("l")).Equals(NewList(Int32(0), Int32(1), Int32(2))))
assert.True(v.Get(NewString("s")).Equals(NewString("hi")))
@@ -354,7 +350,6 @@ func TestReadStructWithValue(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("b")).Equals(Bool(true)))
assert.True(v.Get(NewString("v")).Equals(UInt8(42)))
assert.True(v.Get(NewString("s")).Equals(NewString("hi")))
@@ -388,7 +383,6 @@ func TestReadValueStruct(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("x")).Equals(Int16(42)))
assert.True(v.Get(NewString("s")).Equals(NewString("hi")))
assert.True(v.Get(NewString("b")).Equals(Bool(true)))
@@ -497,7 +491,6 @@ func TestReadStructWithEnum(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
assert.True(v.Get(NewString("x")).Equals(Int16(42)))
assert.True(v.Get(NewString("e")).Equals(UInt32(1)))
assert.True(v.Get(NewString("b")).Equals(Bool(true)))
@@ -527,7 +520,6 @@ func TestReadStructWithBlob(t *testing.T) {
v := r.readTopLevelValue().(Map)
assert.True(v.Get(NewString("$type")).Equals(structTr))
blob, err := NewBlob(bytes.NewBuffer([]byte{0x00, 0x01}))
assert.NoError(err)
assert.True(v.Get(NewString("b")).Equals(blob))

View File

@@ -370,7 +370,7 @@ func TestWriteListOfValueWithStruct(t *testing.T) {
tref := MakeCompoundTypeRef("", ListKind, MakePrimitiveTypeRef(ValueKind))
st := MakeTypeRef(pkgRef, 0)
v := NewList(NewMap(NewString("$type"), st, NewString("x"), Int32(42)))
v := NewList(testMap{Map: NewMap(NewString("x"), Int32(42)), t: st})
w := newJsonArrayWriter()
w.writeTopLevelValue(testList{List: v, t: tref})

View File

@@ -148,10 +148,6 @@ func (fm Map) Chunks() (futures []Future) {
var mapTypeRef = MakeCompoundTypeRef("", MapKind, MakePrimitiveTypeRef(ValueKind), MakePrimitiveTypeRef(ValueKind))
func (fm Map) TypeRef() TypeRef {
// TODO: remove $type fields. BUG 450
if v, ok := fm.MaybeGet(NewString("$type")); ok {
return v.(TypeRef)
}
return mapTypeRef
}