Преглед изворни кода

codecgen: handle encodenil if slice/map value is nil

Ugorji Nwoke пре 6 година
родитељ
комит
d138090090
1 измењених фајлова са 2 додато и 0 уклоњено
  1. 2 0
      codec/gen.go

+ 2 - 0
codec/gen.go

@@ -1176,6 +1176,7 @@ func (x *genRunner) encStruct(varname string, rtid uintptr, t reflect.Type) {
 }
 }
 
 
 func (x *genRunner) encListFallback(varname string, t reflect.Type) {
 func (x *genRunner) encListFallback(varname string, t reflect.Type) {
+	x.linef("if %s == nil { r.EncodeNil(); return }", varname)
 	elemBytes := t.Elem().Kind() == reflect.Uint8
 	elemBytes := t.Elem().Kind() == reflect.Uint8
 	if t.AssignableTo(uint8SliceTyp) {
 	if t.AssignableTo(uint8SliceTyp) {
 		x.linef("r.EncodeStringBytesRaw([]byte(%s))", varname)
 		x.linef("r.EncodeStringBytesRaw([]byte(%s))", varname)
@@ -1222,6 +1223,7 @@ func (x *genRunner) encListFallback(varname string, t reflect.Type) {
 }
 }
 
 
 func (x *genRunner) encMapFallback(varname string, t reflect.Type) {
 func (x *genRunner) encMapFallback(varname string, t reflect.Type) {
+	x.linef("if %s == nil { r.EncodeNil(); return }", varname)
 	// TODO: expand this to handle canonical.
 	// TODO: expand this to handle canonical.
 	i := x.varsfx()
 	i := x.varsfx()
 	x.line("z.EncWriteMapStart(len(" + varname + "))")
 	x.line("z.EncWriteMapStart(len(" + varname + "))")