generate: Fix more semantic issues in generated code
This commit is contained in:
parent
9ff317d443
commit
a210f6112c
@ -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: <length: UN> <elementTag: tape.Tag> <values>*
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user