diff --git a/cli/targets/static.js b/cli/targets/static.js index 07dba6ed2..243d021ea 100644 --- a/cli/targets/static.js +++ b/cli/targets/static.js @@ -159,9 +159,11 @@ var shortVars = { "m": "message", "t": "tag", "l": "length", + "il": "innerLength", "c": "end", "c2": "end2", "k": "key", "ks": "keys", "ks2": "keys2", + "v": "value", "e": "error", "f": "impl", "o": "options", diff --git a/src/decoder.js b/src/decoder.js index 6dde6f82e..1ce85262a 100644 --- a/src/decoder.js +++ b/src/decoder.js @@ -19,7 +19,7 @@ function decoder(mtype) { var gen = util.codegen(["r", "l"], mtype.name + "$decode") ("if(!(r instanceof Reader))") ("r=Reader.create(r)") - ("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function(field) { return field.map; }).length ? ",k" : "")) + ("var c=l===undefined?r.len:r.pos+l,m=new this.ctor" + (mtype.fieldsArray.filter(function (field) { return field.map; }).length ? ",il,k,v" : "")) ("while(r.pos>>3){") + ("case 1:") + ("k=r.%s()", field.keyType) + ("break") + ("case 2:"); + if (types.basic[type] === undefined) gen + ("v=types[%i].decode(r,r.uint32())", i); + else gen + ("v=r.%s()", type); + gen + ("break") + ("}") + ("}"); + if (types.long[field.keyType] !== undefined) gen + ("%s[typeof k===\"object\"?util.longToHash(k):k]=v", ref); + else gen + ("%s[k]=v", ref); // Repeated fields } else if (field.repeated) { gen