@@ -19,15 +19,6 @@ type decodeGen struct {
1919
2020func (d * decodeGen ) Method () Method { return Decode }
2121
22- func (d * decodeGen ) needsField () {
23- if d .hasField {
24- return
25- }
26- d .p .declare ("field" , "[]byte" )
27- d .p .blankAssign ("field" )
28- d .hasField = true
29- }
30-
3122func (d * decodeGen ) Execute (p Elem ) error {
3223 p = d .applyAll (p )
3324 if p == nil {
@@ -63,7 +54,7 @@ func (d *decodeGen) gStruct(s *Struct) {
6354 return
6455}
6556
66- func (d * decodeGen ) assignAndCheck (name string , typ string ) {
57+ func (d * decodeGen ) assignAndCheck (name , typ string ) {
6758 if ! d .p .ok () {
6859 return
6960 }
@@ -87,12 +78,21 @@ func (d *decodeGen) structAsTuple(s *Struct) {
8778}
8879
8980func (d * decodeGen ) structAsMap (s * Struct ) {
90- d .needsField ()
81+
82+ if ! d .hasField {
83+ d .p .declare ("field" , "[]byte" )
84+ d .hasField = true
85+ }
86+
87+ // Declare the variable that will contain the map length.
9188 sz := randIdent ()
9289 d .p .declare (sz , u32 )
90+
91+ // Assign to the sz variable the length of the map.
9392 d .assignAndCheck (sz , mapHeader )
9493
95- d .p .printf ("\n for %s > 0 {\n %s--" , sz , sz )
94+ d .p .printf ("\n for %s > 0 {" , sz )
95+ d .p .printf ("\n %s--" , sz )
9696 d .assignAndCheck ("field" , mapKey )
9797 d .p .print ("\n switch string(field) {" )
9898 for i := range s .Fields {
@@ -104,8 +104,10 @@ func (d *decodeGen) structAsMap(s *Struct) {
104104 }
105105 d .p .print ("\n default:\n err = dc.Skip()" )
106106 d .p .print (errCheck )
107- d .p .closeBlock () // close switch
107+
108+ d .p .closeBlock () // close switch block
108109 d .p .closeBlock () // close for loop
110+
109111}
110112
111113func (d * decodeGen ) gBase (b * BaseElem ) {
0 commit comments