From 6017ac1fa33dbd0fad4b118e2cd6c67c957d00b8 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Mon, 21 Jul 2025 14:11:40 -0400 Subject: [PATCH] generate: Encode SI properly --- generate/generate.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/generate/generate.go b/generate/generate.go index 4ef14de..06f71b4 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -412,7 +412,9 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri // SI: (none) // LI: if typ.Bits <= 5 { - // SI stores the value in the tag, so we write nothing here + // SI stores the value in the tag + nn, err := this.iprintf("*%s = uint8(%s.CN())\n", valueSource, tagSource) + n += nn; if err != nil { return n, err } break } prefix := "ReadUint" @@ -580,7 +582,7 @@ func (this *Generator) generateTag(typ Type, source string) (n int, err error) { switch typ := typ.(type) { case TypeInt: if typ.Bits <= 5 { - nn, err := this.printf("tape.SI") + nn, err := this.printf("tape.SI.WithCN(int(%s))", source) n += nn; if err != nil { return n, err } } else { nn, err := this.printf("tape.LI.WithCN(%d)", bitsToCN(typ.Bits)) @@ -664,6 +666,11 @@ func (this *Generator) generateType(typ Type) (n int, err error) { if err := this.validateIntBitSize(typ.Bits); err != nil { return n, err } + if typ.Bits <= 5 { + nn, err := this.printf("uint8") + n += nn; if err != nil { return n, err } + break + } if typ.Signed { nn, err := this.printf("int%d", typ.Bits) n += nn; if err != nil { return n, err } @@ -729,7 +736,7 @@ func (this *Generator) generateTypeTableDefined(typ TypeTableDefined) (n int, er func (this *Generator) validateIntBitSize(size int) error { switch size { - case 8, 16, 32, 64: return nil + case 5, 8, 16, 32, 64: return nil default: return fmt.Errorf("integers of size %d are unsupported on this platform", size) } }