@@ -1931,22 +1931,22 @@ export class MapType<T extends Type> extends AbstractType<schema.MapSchema<Schem
19311931 }
19321932
19331933 public codegenJsonTextEncoder ( ctx : JsonTextEncoderCodegenContext , value : JsExpression ) : void {
1934- throw new Error ( 'TODO ') ;
1935- // ctx.writeText('[' );
1936- // const codegen = ctx.codegen;
1937- // const r = codegen.getRegister(); // array
1938- // const rl = codegen.getRegister (); // array.length
1939- // const rll = codegen.getRegister (); // last
1940- // const ri = codegen.getRegister(); // index
1941- // ctx.js(/* js */ `var ${r} = ${value.use()}, ${rl} = ${r}.length, ${rll} = ${rl} - 1, ${ri} = 0 ;`);
1942- // ctx.js(/* js */ `for(; ${ri} < ${rll}; ${ri}++) ` + '{' );
1943- // this.type.codegenJsonTextEncoder(ctx, new JsExpression(() => `${r}[${ri}]`) );
1944- // ctx.js(/* js */ `s += ','; `);
1945- // ctx.js(` } `);
1946- // ctx.js(`if (${rl }) { `);
1947- // this.type.codegenJsonTextEncoder(ctx, new JsExpression(() => `${r}[${rll }]`));
1948- // ctx.js(` }`);
1949- // ctx.writeText('] ');
1934+ ctx . writeText ( '{ ') ;
1935+ const r = ctx . codegen . var ( value . use ( ) ) ;
1936+ const rKeys = ctx . codegen . var ( `Object.keys( ${ r } )` ) ;
1937+ const rLength = ctx . codegen . var ( ` ${ rKeys } .length` ) ;
1938+ const rKey = ctx . codegen . r ( ) ;
1939+ const rValue = ctx . codegen . r ( ) ;
1940+ ctx . codegen . if ( ` ${ rLength } ` , ( ) => {
1941+ ctx . js ( `s += asString( ${ rKeys } [i]) + ':' ;`) ;
1942+ this . type . codegenJsonTextEncoder ( ctx , new JsExpression ( ( ) => ` ${ r } [ ${ rKey } ]` ) ) ;
1943+ } ) ;
1944+ ctx . js ( `for (var ${ rKey } , ${ rValue } , i = 1; i < ${ rLength } ; i++) { `) ;
1945+ ctx . js ( `${ rKey } = ${ rKeys } [i]; ` ) ;
1946+ ctx . js ( `s += ',' + asString (${ rKey } ) + ':'; ` ) ;
1947+ this . type . codegenJsonTextEncoder ( ctx , new JsExpression ( ( ) => `${ r } [${ rKey } ]` ) ) ;
1948+ ctx . js ( `}` ) ;
1949+ ctx . writeText ( '} ' ) ;
19501950 }
19511951
19521952 private codegenBinaryEncoder ( ctx : BinaryEncoderCodegenContext < BinaryJsonEncoder > , value : JsExpression ) : void {
0 commit comments