55 */
66var converter = exports ;
77
8- var Enum = require ( "./enum" ) ,
9- util = require ( "./util" ) ;
8+ var Enum = require ( "./enum" ) ,
9+ types = require ( "./types" ) ,
10+ util = require ( "./util" ) ;
1011
1112/**
1213 * Generates a partial value fromObject conveter.
@@ -162,23 +163,26 @@ converter.fromObject = function fromObject(mtype) {
162163 * @param {Codegen } gen Codegen instance
163164 * @param {Field } field Reflected field
164165 * @param {number } fieldIndex Field index
165- * @param {string } prop Property reference
166+ * @param {string } dstProp Destination property reference
167+ * @param {string } [srcProp] Source property reference
166168 * @returns {Codegen } Codegen instance
167169 * @ignore
168170 */
169- function genValuePartial_toObject ( gen , field , fieldIndex , prop ) {
171+ function genValuePartial_toObject ( gen , field , fieldIndex , dstProp , srcProp ) {
170172 /* eslint-disable no-unexpected-multiline, block-scoped-var, no-redeclare */
173+ if ( ! srcProp )
174+ srcProp = dstProp ;
171175 if ( field . resolvedType ) {
172176 if ( field . resolvedType instanceof Enum ) gen
173- ( "d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s" , prop , fieldIndex , prop , prop , fieldIndex , prop , prop ) ;
177+ ( "d%s=o.enums===String?(types[%i].values[m%s]===undefined?m%s:types[%i].values[m%s]):m%s" , dstProp , fieldIndex , srcProp , srcProp , fieldIndex , srcProp , srcProp ) ;
174178 else gen
175- ( "d%s=types[%i].toObject(m%s,o)" , prop , fieldIndex , prop ) ;
179+ ( "d%s=types[%i].toObject(m%s,o)" , dstProp , fieldIndex , srcProp ) ;
176180 } else {
177181 var isUnsigned = false ;
178182 switch ( field . type ) {
179183 case "double" :
180184 case "float" : gen
181- ( "d%s=o.json&&!isFinite(m%s)?String(m%s):m%s" , prop , prop , prop , prop ) ;
185+ ( "d%s=o.json&&!isFinite(m%s)?String(m%s):m%s" , dstProp , srcProp , srcProp , srcProp ) ;
182186 break ;
183187 case "uint64" :
184188 isUnsigned = true ;
@@ -187,16 +191,16 @@ function genValuePartial_toObject(gen, field, fieldIndex, prop) {
187191 case "sint64" :
188192 case "fixed64" :
189193 case "sfixed64" : gen
190- ( "if(typeof m%s===\"number\")" , prop )
191- ( "d%s=o.longs===String?String(m%s):m%s" , prop , prop , prop )
194+ ( "if(typeof m%s===\"number\")" , srcProp )
195+ ( "d%s=o.longs===String?String(m%s):m%s" , dstProp , srcProp , srcProp )
192196 ( "else" ) // Long-like
193- ( "d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s" , prop , prop , prop , prop , isUnsigned ? "true" : "" , prop ) ;
197+ ( "d%s=o.longs===String?util.Long.prototype.toString.call(m%s):o.longs===Number?new util.LongBits(m%s.low>>>0,m%s.high>>>0).toNumber(%s):m%s" , dstProp , srcProp , srcProp , srcProp , isUnsigned ? "true" : "" , srcProp ) ;
194198 break ;
195199 case "bytes" : gen
196- ( "d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s" , prop , prop , prop , prop , prop ) ;
200+ ( "d%s=o.bytes===String?util.base64.encode(m%s,0,m%s.length):o.bytes===Array?Array.prototype.slice.call(m%s):m%s" , dstProp , srcProp , srcProp , srcProp , srcProp ) ;
197201 break ;
198202 default : gen
199- ( "d%s=m%s" , prop , prop ) ;
203+ ( "d%s=m%s" , dstProp , srcProp ) ;
200204 break ;
201205 }
202206 }
@@ -281,12 +285,17 @@ converter.toObject = function toObject(mtype) {
281285 ( "var ks2" ) ;
282286 } gen
283287 ( "if(m%s&&(ks2=Object.keys(m%s)).length){" , prop , prop )
284- ( "d%s={}" , prop )
288+ ( "d%s={}" , prop ) ;
289+ var longKey = types . long [ field . keyType ] !== undefined ,
290+ srcProp = prop + "[ks2[j]]" ;
291+ gen
285292 ( "for(var j=0;j<ks2.length;++j){" ) ;
293+ if ( longKey ) gen
294+ ( "var k2=util.longFromKey(ks2[j],%j).toString()" , field . keyType === "uint64" || field . keyType === "fixed64" ) ;
286295 gen
287296 ( "if(ks2[j]===\"__proto__\")" )
288297 ( "util.makeProp(d%s,ks2[j])" , prop ) ;
289- genValuePartial_toObject ( gen , field , /* sorted */ index , prop + "[ks2[j]]" )
298+ genValuePartial_toObject ( gen , field , /* sorted */ index , longKey ? prop + "[k2]" : srcProp , srcProp )
290299 ( "}" ) ;
291300 } else if ( field . repeated ) { gen
292301 ( "if(m%s&&m%s.length){" , prop , prop )
0 commit comments