diff --git a/generate/generate.go b/generate/generate.go index 2d26796..4ef14de 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -272,8 +272,8 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri n += nn; if err != nil { return n, err } this.push() nn, err = this.iprintf( - "nn, err = encoder.WriteUintN(uint64(%s.CN()), len(%s))\n", - tagSource, valueSource) + "nn, err = encoder.WriteUintN(uint64(len(%s)), %s.CN())\n", + valueSource, tagSource) n += nn; if err != nil { return n, err } nn, err = this.generateErrorCheck() n += nn; if err != nil { return n, err } @@ -288,8 +288,8 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri case TypeArray: // OTA: * nn, err := this.iprintf( - "nn, err = encoder.WriteUintN(uint64(%s.CN()), len(%s))\n", - tagSource, valueSource) + "nn, err = encoder.WriteUintN(uint64(len(%s)), %s.CN())\n", + valueSource, tagSource) n += nn; if err != nil { return n, err } nn, err = this.generateErrorCheck() n += nn; if err != nil { return n, err } @@ -325,6 +325,10 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri n += nn; if err != nil { return n, err } nn, err = this.iprintf("if itemTag.Is(tape.SBA) { itemTag += 1 << 5 }\n") n += nn; if err != nil { return n, err } + nn, err = this.iprintf("nn, err = encoder.WriteTag(itemTag)\n") + n += nn; if err != nil { return n, err } + n += nn; if err != nil { return n, err } + nn, err = this.generateErrorCheck() nn, err = this.iprintf("for _, item := range %s {\n", valueSource) n += nn; if err != nil { return n, err } this.push()