From 0f626b2e939660573295a7015458bd83293c182e Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Sun, 20 Jul 2025 23:19:21 -0400 Subject: [PATCH] generate: Fix array encoding not writing length or item tag properly --- generate/generate.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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()