@@ -13,6 +13,8 @@ export class JsonCodegen extends AbstractBinaryCodegen<JsonEncoder> {
1313 const r = codegen . codegen . options . args [ 0 ] ;
1414 const expression = new JsExpression ( ( ) => r ) ;
1515 codegen . onNode ( [ ] , expression , type ) ;
16+
17+ // console.log(codegen.codegen.generate().js);
1618 return codegen . compile ( ) ;
1719 } ) ;
1820
@@ -142,26 +144,26 @@ export class JsonCodegen extends AbstractBinaryCodegen<JsonEncoder> {
142144 const ri = codegen . r ( ) ;
143145 const rLength = codegen . r ( ) ;
144146 const keys = fields . map ( ( field ) => JSON . stringify ( field . key ) ) ;
145- const rKnownFields = codegen . addConstant ( `new Set([${ keys . join ( ',' ) } ])` ) ;
146- codegen . js ( `var ${ rKeys } = Object.keys(${ r } ), ${ rLength } = ${ rKeys } .length, ${ rKey } ;` ) ;
147- codegen . js ( `for (var ${ ri } = 0; ${ ri } < ${ rLength } ; ${ ri } ++) {` ) ;
148- codegen . js ( `${ rKey } = ${ rKeys } [${ ri } ];` ) ;
149- codegen . js ( `if (${ rKnownFields } .has(${ rKey } )) continue;` ) ;
150- codegen . js ( `encoder.writeStr(${ rKey } );` ) ;
147+ const rKnownFields = codegen . addConstant ( /* js */ `new Set([${ keys . join ( ',' ) } ])` ) ;
148+ codegen . js ( /* js */ `var ${ rKeys } = Object.keys(${ r } ), ${ rLength } = ${ rKeys } .length, ${ rKey } ;` ) ;
149+ codegen . js ( /* js */ `for (var ${ ri } = 0; ${ ri } < ${ rLength } ; ${ ri } ++) {` ) ;
150+ codegen . js ( /* js */ `${ rKey } = ${ rKeys } [${ ri } ];` ) ;
151+ codegen . js ( /* js */ `if (${ rKnownFields } .has(${ rKey } )) continue;` ) ;
152+ codegen . js ( /* js */ `encoder.writeStr(${ rKey } );` ) ;
151153 this . blob ( keySeparatorBlob ) ;
152- codegen . js ( `encoder.writeAny(${ r } [${ rKey } ]);` ) ;
154+ codegen . js ( /* js */ `encoder.writeAny(${ r } [${ rKey } ]);` ) ;
153155 this . blob ( separatorBlob ) ;
154- codegen . js ( `}` ) ;
156+ codegen . js ( /* js */ `}` ) ;
155157 } ;
156158 const emitEnding = ( ) => {
157159 const rewriteLastSeparator = ( ) => {
158- for ( let i = 0 ; i < endBlob . length ; i ++ ) codegen . js ( `uint8[writer.x - ${ endBlob . length - i } ] = ${ endBlob [ i ] } ;` ) ;
160+ for ( let i = 0 ; i < endBlob . length ; i ++ ) codegen . js ( /* js */ `uint8[writer.x - ${ endBlob . length - i } ] = ${ endBlob [ i ] } ;` ) ;
159161 } ;
160162 if ( requiredFields . length ) {
161163 rewriteLastSeparator ( ) ;
162164 } else {
163165 codegen . if (
164- `uint8[writer.x - 1] === ${ separatorBlob [ separatorBlob . length - 1 ] } ` ,
166+ /* js */ `uint8[writer.x - 1] === ${ separatorBlob [ separatorBlob . length - 1 ] } ` ,
165167 ( ) => {
166168 rewriteLastSeparator ( ) ;
167169 } ,
@@ -192,30 +194,29 @@ export class JsonCodegen extends AbstractBinaryCodegen<JsonEncoder> {
192194 }
193195
194196 protected onMap ( path : SchemaPath , val : JsExpression , type : MapType ) : void {
195- const objStartBlob = this . gen ( ( encoder ) => encoder . writeStartObj ( ) ) ;
196- const objEndBlob = this . gen ( ( encoder ) => encoder . writeEndObj ( ) ) ;
197197 const separatorBlob = this . gen ( ( encoder ) => encoder . writeObjSeparator ( ) ) ;
198198 const keySeparatorBlob = this . gen ( ( encoder ) => encoder . writeObjKeySeparator ( ) ) ;
199199 const codegen = this . codegen ;
200200 const r = codegen . var ( val . use ( ) ) ;
201201 const rKeys = codegen . var ( `Object.keys(${ r } )` ) ;
202202 const rKey = codegen . var ( ) ;
203+ const ri = codegen . var ( ) ;
203204 const rLength = codegen . var ( `${ rKeys } .length` ) ;
204- this . blob ( objStartBlob ) ;
205+ this . blob ( this . gen ( ( encoder ) => encoder . writeStartObj ( ) ) ) ;
205206 codegen . if ( `${ rLength } ` , ( ) => {
206207 codegen . js ( `${ rKey } = ${ rKeys } [0];` ) ;
207208 codegen . js ( `encoder.writeStr(${ rKey } );` ) ;
208209 this . blob ( keySeparatorBlob ) ;
209210 this . onNode ( [ ...path , { r : rKey } ] , new JsExpression ( ( ) => `${ r } [${ rKey } ]` ) , type . _value ) ;
210211 } ) ;
211- codegen . js ( `for (var i = 1; i < ${ rLength } ; i ++) {` ) ;
212- codegen . js ( `${ rKey } = ${ rKeys } [i ];` ) ;
212+ codegen . js ( `for (var ${ ri } = 1; ${ ri } < ${ rLength } ; ${ ri } ++) {` ) ;
213+ codegen . js ( `${ rKey } = ${ rKeys } [${ ri } ];` ) ;
213214 this . blob ( separatorBlob ) ;
214215 codegen . js ( `encoder.writeStr(${ rKey } );` ) ;
215216 this . blob ( keySeparatorBlob ) ;
216217 this . onNode ( [ ...path , { r : rKey } ] , new JsExpression ( ( ) => `${ r } [${ rKey } ]` ) , type . _value ) ;
217218 codegen . js ( `}` ) ;
218- this . blob ( objEndBlob ) ;
219+ this . blob ( this . gen ( ( encoder ) => encoder . writeEndObj ( ) ) ) ;
219220 }
220221
221222 protected onKey ( path : SchemaPath , r : JsExpression , type : KeyType < any , any > ) : void {
0 commit comments