diff --git a/generate/generate.go b/generate/generate.go index 728e7c5..e2a8f89 100644 --- a/generate/generate.go +++ b/generate/generate.go @@ -181,7 +181,7 @@ func (this *Generator) generateMessage(method uint16, message Message) (n int, e n += nn; if err != nil { return n, err } nn, err = this.println() n += nn; if err != nil { return n, err } - nn, err = this.iprintf("nn, err := encoder.WriteUint8()\n") + nn, err = this.iprintf("nn, err := encoder.WriteUint8(uint8(tag))\n") n += nn; if err != nil { return n, err } nn, err = this.generateErrorCheck() n += nn; if err != nil { return n, err } @@ -238,7 +238,7 @@ 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(%s.CN(), uint64(len(%s)))\n", + "nn, err = encoder.WriteUintN(%s.CN(), len(%s))\n", tagSource, valueSource) n += nn; if err != nil { return n, err } nn, err = this.generateErrorCheck() @@ -254,7 +254,7 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri case TypeArray: // OTA: * nn, err := this.iprintf( - "nn, err = encoder.WriteUintN(%s.CN(), uint64(len(%s)))\n", + "nn, err = encoder.WriteUintN(uint64(%s.CN()), len(%s))\n", tagSource, valueSource) n += nn; if err != nil { return n, err } nn, err = this.generateErrorCheck() @@ -268,9 +268,14 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri n += nn; if err != nil { return n, err } nn, err = this.println() n += nn; if err != nil { return n, err } + // TODO: we don't have to do this for loop for some + // types such as integers because the CN will be the + // same nn, err = this.iprintf("for _, item := range %s {\n", valueSource) n += nn; if err != nil { return n, err } this.push() + nn, err = this.iprintf("_ = item\n") + n += nn; if err != nil { return n, err } nn, err = this.iprintf("tag := ") n += nn; if err != nil { return n, err } nn, err = this.generateTag(typ.Element, "item") @@ -279,7 +284,7 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri n += nn; if err != nil { return n, err } nn, err = this.iprintf("if tag.Is(tape.SBA) { continue }\n") n += nn; if err != nil { return n, err } - nn, err = this.iprintf("if tag.CN() > itemTag.CN() { largest = tag }\n") + nn, err = this.iprintf("if tag.CN() > itemTag.CN() { itemTag = tag }\n") n += nn; if err != nil { return n, err } this.pop() nn, err = this.iprintf("}\n") @@ -386,13 +391,13 @@ func (this *Generator) generateTag(typ Type, source string) (n int, err error) { nn, err := this.printf("tape.FP.WithCN(%d)", bitsToCN(typ.Bits)) n += nn; if err != nil { return n, err } case TypeString: - nn, err := this.generateTag(TypeBuffer { }, source) + nn, err := this.printf("tape.StringTag(%s)", source) n += nn; if err != nil { return n, err } case TypeBuffer: nn, err := this.printf("tape.BufferTag(%s)", source) n += nn; if err != nil { return n, err } case TypeArray: - nn, err := this.printf("arrayTag(tape.OTA.WithCN(tape.IntBytes(uint64(len(%s)))))", source) + nn, err := this.printf("tape.OTA.WithCN(tape.IntBytes(uint64(len(%s))))", source) n += nn; if err != nil { return n, err } case TypeTable: nn, err := this.printf("tape.KTV.WithCN(tape.IntBytes(uint64(len(%s))))", source) @@ -418,29 +423,29 @@ func (this *Generator) generateTN(typ Type) (n int, err error) { switch typ := typ.(type) { case TypeInt: if typ.Bits <= 5 { - nn, err := this.printf("tape.TagSI") + nn, err := this.printf("tape.SI") n += nn; if err != nil { return n, err } } else { - nn, err := this.printf("tape.TagLI") + nn, err := this.printf("tape.LI") n += nn; if err != nil { return n, err } } case TypeFloat: - nn, err := this.printf("tape.TagFP",) + nn, err := this.printf("tape.FP",) n += nn; if err != nil { return n, err } case TypeString: nn, err := this.generateTN(TypeBuffer { }) n += nn; if err != nil { return n, err } case TypeBuffer: - nn, err := this.printf("tape.TagLBA") + nn, err := this.printf("tape.LBA") n += nn; if err != nil { return n, err } case TypeArray: - nn, err := this.printf("tape.TagOTA") + nn, err := this.printf("tape.OTA") n += nn; if err != nil { return n, err } case TypeTable: - nn, err := this.printf("tape.TagKTV") + nn, err := this.printf("tape.KTV") n += nn; if err != nil { return n, err } case TypeTableDefined: - nn, err := this.printf("tape.TagKTV") + nn, err := this.printf("tape.KTV") n += nn; if err != nil { return n, err } case TypeNamed: resolved, err := this.resolveTypeName(typ.Name)