message-size-increase #3
@ -146,7 +146,7 @@ func (this *Generator) generateTypedef(name string, typ Type) (n int, err error)
|
|||||||
this.push()
|
this.push()
|
||||||
nn, err = this.iprintf("var nn int\n")
|
nn, err = this.iprintf("var nn int\n")
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
nn, err = this.generateDecodeValue(typ, "this", "tag")
|
nn, err = this.generateDecodeValue(typ, "this", "tag", "return n, nil")
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
nn, err = this.iprintf("return n, nil\n")
|
nn, err = this.iprintf("return n, nil\n")
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
@ -217,7 +217,20 @@ func (this *Generator) generateMessage(method uint16, message Message) (n int, e
|
|||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
nn, err = this.generateErrorCheck()
|
nn, err = this.generateErrorCheck()
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
nn, err = this.generateDecodeValue(message.Type, "this", "tag")
|
abort := "return n, nil"
|
||||||
|
nn, err = this.iprintf("if !tag.Is(")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.generateTN(message.Type)
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.printf(") {\n")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
this.push()
|
||||||
|
nn, err = this.iprintf("%s\n", abort)
|
||||||
|
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.generateDecodeValue(message.Type, "this", "tag", abort)
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
nn, err = this.iprintf("return n, nil\n")
|
nn, err = this.iprintf("return n, nil\n")
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
@ -406,7 +419,7 @@ func (this *Generator) generateEncodeValue(typ Type, valueSource, tagSource stri
|
|||||||
// - n int
|
// - n int
|
||||||
// - err error
|
// - err error
|
||||||
// - nn int
|
// - nn int
|
||||||
func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource string) (n int, err error) {
|
func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource, abort string) (n int, err error) {
|
||||||
switch typ := typ.(type) {
|
switch typ := typ.(type) {
|
||||||
case TypeInt:
|
case TypeInt:
|
||||||
// SI: (none)
|
// SI: (none)
|
||||||
@ -493,13 +506,25 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
|
|||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
nn, err = this.generateErrorCheck()
|
nn, err = this.generateErrorCheck()
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.iprintf("if !itemTag.Is(")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.generateTN(typ.Element)
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.iprintf(") {\n")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
this.push()
|
||||||
|
nn, err = this.iprintf("%s\n", abort)
|
||||||
|
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("for index := range %s {\n", lengthVar)
|
nn, err = this.iprintf("for index := range %s {\n", lengthVar)
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
this.push()
|
this.push()
|
||||||
nn, err = this.generateDecodeValue(
|
nn, err = this.generateDecodeValue(
|
||||||
typ.Element,
|
typ.Element,
|
||||||
fmt.Sprintf("(&(*%s)[index])", valueSource),
|
fmt.Sprintf("(&(*%s)[index])", valueSource),
|
||||||
"itemTag")
|
"itemTag", abort)
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
this.pop()
|
this.pop()
|
||||||
nn, err = this.iprintf("}\n")
|
nn, err = this.iprintf("}\n")
|
||||||
@ -546,11 +571,33 @@ func (this *Generator) generateDecodeValue(typ Type, valueSource, tagSource stri
|
|||||||
field := typ.Fields[key]
|
field := typ.Fields[key]
|
||||||
nn, err = this.iprintf("case 0x%04X:\n", key)
|
nn, err = this.iprintf("case 0x%04X:\n", key)
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
|
this.push()
|
||||||
|
labelVar := this.newTemporaryVar("label")
|
||||||
|
fieldAbort := fmt.Sprintf("goto %s", labelVar)
|
||||||
|
nn, err = this.iprintf("if !itemTag.Is(")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.generateTN(field.Type)
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
nn, err = this.printf(") {\n")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
|
this.push()
|
||||||
|
nn, err = this.iprintf("%s\n", fieldAbort)
|
||||||
|
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("{\n")
|
||||||
|
n += nn; if err != nil { return n, err }
|
||||||
this.push()
|
this.push()
|
||||||
nn, err = this.generateDecodeValue(
|
nn, err = this.generateDecodeValue(
|
||||||
field.Type,
|
field.Type,
|
||||||
fmt.Sprintf("(&%s.%s)", valueSource, field.Name),
|
fmt.Sprintf("(&%s.%s)", valueSource, field.Name),
|
||||||
"itemTag")
|
"itemTag", fieldAbort)
|
||||||
|
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("%s:;\n", labelVar)
|
||||||
n += nn; if err != nil { return n, err }
|
n += nn; if err != nil { return n, err }
|
||||||
this.pop()
|
this.pop()
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user