From 3dbfd8ef2a09a17a0c26ad2f8bd50c98d5fd81f8 Mon Sep 17 00:00:00 2001 From: adelphes Date: Sat, 24 Jun 2017 16:18:22 +0100 Subject: [PATCH] Improved array handling. Better multidimensional array support. --- src/jdwp.js | 4 ++-- src/variables.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jdwp.js b/src/jdwp.js index a175a5b..0413706 100644 --- a/src/jdwp.js +++ b/src/jdwp.js @@ -537,12 +537,12 @@ function _JDWP() { } m = signature.match(/^(\[+)(.+)$/); if (m) { - var elementtype = this.signaturetotype(m[2]); + var elementtype = this.signaturetotype(m[1].slice(0,-1) + m[2]); return { signature:signature, arraydims:m[1].length, elementtype: elementtype, - typename:elementtype.typename+m[1].replace(/\[/g,'[]'), + typename:elementtype.typename+'[]', } } var primitivetypes = { diff --git a/src/variables.js b/src/variables.js index 595887a..d142263 100644 --- a/src/variables.js +++ b/src/variables.js @@ -104,7 +104,7 @@ class AndroidVariables { // get the elements for the specified range return this.dbgr.getarrayvalues(varinfo.arrvar, range[0], count, {varinfo}) .then((elements, x) => { - elements.forEach(el => el.fqname = `${x.varinfo.arrvar.name}[${el.name}]`); + elements.forEach(el => el.fqname = `${x.varinfo.arrvar.fqname || x.varinfo.arrvar.name}[${el.name}]`); x.varinfo.cached = elements; return this._local_to_variable(elements); }); @@ -191,7 +191,7 @@ class AndroidVariables { varref = this._getObjectIdReference(v.type, v.value); this.variableHandles[varref] = { varref:varref, arrvar:v, range:[0,v.arraylen] }; } - objvalue = v.type.typename.replace(/]$/, v.arraylen+']'); // insert len as the final array bound + objvalue = v.type.typename.replace(/]/, v.arraylen+']'); // insert len as the first array bound break; case JTYPES.isObject(v.type): // non-null object instance - add another variable reference so the user can expand