generate: Use newTemporarVar in more places

This commit is contained in:
Sasha Koshka 2025-07-17 11:28:53 -04:00
parent b50a199842
commit f646207ab1

View File

@ -428,17 +428,15 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
case TypeString, TypeBuffer:
// SBA: <data: U8>*
// LBA: <length: UN> <data: U8>*
nn, err := this.iprintf("{\n")
this.push()
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("var length uint64\n")
lengthVar := this.newTemporaryVar("length")
nn, err := this.iprintf("var %s uint64\n", lengthVar)
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("if %s.Is(tape.LBA) {\n", tagSource)
n += nn; if err != nil { return n, err }
this.push()
nn, err = this.iprintf(
"length, nn, err = decoder.ReadUintN(int(%s.CN()))\n",
tagSource)
"%s, nn, err = decoder.ReadUintN(int(%s.CN()))\n",
lengthVar, tagSource)
n += nn; if err != nil { return n, err }
nn, err = this.generateErrorCheck()
n += nn; if err != nil { return n, err }
@ -446,12 +444,14 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
nn, err = this.iprintf("} else {\n")
n += nn; if err != nil { return n, err }
this.push()
nn, err = this.iprintf("length = uint64(%s.CN())\n", tagSource)
nn, err = this.iprintf(
"%s = uint64(%s.CN())\n",
lengthVar, tagSource)
n += nn; if err != nil { return n, err }
this.pop()
nn, err = this.iprintf("}\n")
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("buffer := make([]byte, int(length))\n")
nn, err = this.iprintf("buffer := make([]byte, int(%s))\n", lengthVar)
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("nn, err = decoder.Read(buffer)\n")
n += nn; if err != nil { return n, err }
@ -464,19 +464,14 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
nn, err = this.iprintf("*%s = buffer\n", valueSource)
n += nn; if err != nil { return n, err }
}
this.pop()
nn, err = this.iprintf("}\n")
n += nn; if err != nil { return n, err }
case TypeArray:
// OTA: <length: UN> <elementTag: tape.Tag> <values>*
nn, err := this.iprintf("{\n")
this.push()
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("var length uint64\n")
lengthVar := this.newTemporaryVar("length")
nn, err := this.iprintf("var %s uint64\n", lengthVar)
n += nn; if err != nil { return n, err }
nn, err = this.iprintf(
"length, nn, err = decoder.ReadUintN(int(%s.CN()))\n",
tagSource)
"%s, nn, err = decoder.ReadUintN(int(%s.CN()))\n",
lengthVar, tagSource)
n += nn; if err != nil { return n, err }
nn, err = this.generateErrorCheck()
n += nn; if err != nil { return n, err }
@ -484,7 +479,7 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
n += nn; if err != nil { return n, err }
nn, err = this.generateType(typ)
n += nn; if err != nil { return n, err }
nn, err = this.printf(", int(length))\n")
nn, err = this.printf(", int(%s))\n", lengthVar)
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("var itemTag tape.Tag\n")
n += nn; if err != nil { return n, err }
@ -492,7 +487,7 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
n += nn; if err != nil { return n, err }
nn, err = this.generateErrorCheck()
n += nn; if err != nil { return n, err }
nn, err = this.iprintf("for index := range length {\n")
nn, err = this.iprintf("for index := range %s {\n", lengthVar)
n += nn; if err != nil { return n, err }
this.push()
nn, err = this.generateDecodeValue(
@ -503,9 +498,6 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
this.pop()
nn, err = this.iprintf("}\n")
n += nn; if err != nil { return n, err }
this.pop()
nn, err = this.iprintf("}\n")
n += nn; if err != nil { return n, err }
case TypeTable:
// KTV: <length: UN> (<key: U16> <tag: Tag> <value>)*
nn, err := this.iprintf(