diff options
author | Eugene Tarassov | 2012-04-05 21:33:43 +0000 |
---|---|---|
committer | Eugene Tarassov | 2012-04-05 21:33:43 +0000 |
commit | db4911829bf7aa3d03f79da958fd4311709d5d39 (patch) | |
tree | c7d37ed5d99edf162e4e466526711e0d006dc43a /plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse | |
parent | 147bedb2596adaecc690a0a7c5d0966eb384e79b (diff) | |
download | org.eclipse.tcf-db4911829bf7aa3d03f79da958fd4311709d5d39.tar.gz org.eclipse.tcf-db4911829bf7aa3d03f79da958fd4311709d5d39.tar.xz org.eclipse.tcf-db4911829bf7aa3d03f79da958fd4311709d5d39.zip |
TCF Debugger: a bit of code cleanup of number formatting routines in the debugger
Diffstat (limited to 'plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse')
2 files changed, 18 insertions, 62 deletions
diff --git a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/disassembly/TCFDisassemblyBackend.java b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/disassembly/TCFDisassemblyBackend.java index eda993fd3..2d696bb2c 100644 --- a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/disassembly/TCFDisassemblyBackend.java +++ b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/disassembly/TCFDisassemblyBackend.java @@ -45,6 +45,7 @@ import org.eclipse.tcf.internal.debug.ui.model.TCFModel; import org.eclipse.tcf.internal.debug.ui.model.TCFNode; import org.eclipse.tcf.internal.debug.ui.model.TCFNodeExecContext; import org.eclipse.tcf.internal.debug.ui.model.TCFNodeStackFrame; +import org.eclipse.tcf.internal.debug.ui.model.TCFNumberFormat; import org.eclipse.tcf.protocol.IChannel; import org.eclipse.tcf.protocol.IChannel.IChannelListener; import org.eclipse.tcf.protocol.IToken; @@ -815,8 +816,9 @@ public class TCFDisassemblyBackend extends AbstractDisassemblyBackend { if (error == null) { exprSvc.evaluate(context.getID(), new DoneEvaluate() { public void doneEvaluate(IToken token, Exception error, Value value) { - if (error == null) { - final BigInteger address = toBigInteger(value.getValue(), value.isBigEndian(), false); + if (error == null && value.getValue() != null) { + final BigInteger address = TCFNumberFormat.toBigInteger( + value.getValue(), value.isBigEndian(), false); fCallback.asyncExec(new Runnable() { public void run() { fCallback.gotoAddress(address); @@ -879,8 +881,9 @@ public class TCFDisassemblyBackend extends AbstractDisassemblyBackend { if (error == null) { exprSvc.evaluate(context.getID(), new DoneEvaluate() { public void doneEvaluate(IToken token, Exception error, Value value) { - if (error == null) { - final BigInteger address = toBigInteger(value.getValue(), value.isBigEndian(), false); + if (error == null && value.getValue() != null) { + BigInteger address = TCFNumberFormat.toBigInteger( + value.getValue(), value.isBigEndian(), false); done("0x" + address.toString(16)); } else { @@ -917,26 +920,6 @@ public class TCFDisassemblyBackend extends AbstractDisassemblyBackend { return TCFSourceLookupDirector.lookup(ctx.getModel().getLaunch(), ctx.getID(), file); } - private static BigInteger toBigInteger(byte[] data, boolean big_endian, boolean sign_extension) { - byte[] temp = null; - if (sign_extension) { - temp = new byte[data.length]; - } - else { - temp = new byte[data.length + 1]; - temp[0] = 0; // Extra byte to avoid sign extension by BigInteger - } - if (big_endian) { - System.arraycopy(data, 0, temp, sign_extension ? 0 : 1, data.length); - } - else { - for (int i = 0; i < data.length; i++) { - temp[temp.length - i - 1] = data[i]; - } - } - return new BigInteger(temp); - } - /* * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AbstractDisassemblyBackend#evaluateAddressExpression(java.lang.String, boolean) */ diff --git a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/hover/TCFDebugTextHover.java b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/hover/TCFDebugTextHover.java index 1d5268669..729d48dd4 100644 --- a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/hover/TCFDebugTextHover.java +++ b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/hover/TCFDebugTextHover.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.tcf.internal.cdt.ui.hover; -import java.math.BigInteger; import java.util.Map; import org.eclipse.cdt.debug.ui.editors.AbstractDebugTextHover; @@ -28,6 +27,7 @@ import org.eclipse.tcf.internal.debug.ui.model.TCFNode; import org.eclipse.tcf.internal.debug.ui.model.TCFNodeExecContext; import org.eclipse.tcf.internal.debug.ui.model.TCFNodeExpression; import org.eclipse.tcf.internal.debug.ui.model.TCFNodeStackFrame; +import org.eclipse.tcf.internal.debug.ui.model.TCFNumberFormat; import org.eclipse.tcf.protocol.IChannel; import org.eclipse.tcf.protocol.IToken; import org.eclipse.tcf.services.IExpressions; @@ -147,11 +147,7 @@ public class TCFDebugTextHover extends AbstractDebugTextHover implements ITextHo if (error == null) { exprSvc.evaluate(context.getID(), new DoneEvaluate() { public void doneEvaluate(IToken token, Exception error, Value value) { - if (error == null) { - done(getValueText(value)); - } else { - done(null); - } + done(error == null && value != null ? getValueText(value) : null); exprSvc.dispose(context.getID(), new DoneDispose() { public void doneDispose(IToken token, Exception error) { // no-op @@ -159,12 +155,14 @@ public class TCFDebugTextHover extends AbstractDebugTextHover implements ITextHo }); } }); - } else { + } + else { done(null); } } }); - } else { + } + else { done(null); } } @@ -172,40 +170,15 @@ public class TCFDebugTextHover extends AbstractDebugTextHover implements ITextHo } private static String getValueText(Value value) { - BigInteger bigInteger = toBigInteger(value.getValue(), value.isBigEndian(), true); + byte[] data = value.getValue(); + if (data == null) return "N/A"; switch(value.getTypeClass()) { case integer: - return bigInteger.toString(); + return TCFNumberFormat.toBigInteger(data, value.isBigEndian(), true).toString(); case real: - if (value.getValue().length <= 4) { - return String.valueOf(Float.intBitsToFloat(bigInteger.intValue())); - } else if (value.getValue().length <= 8) { - return String.valueOf(Double.longBitsToDouble(bigInteger.longValue())); - } else { - return "N/A"; - } + return TCFNumberFormat.toFPString(data, value.isBigEndian()); default: - return "0x"+bigInteger.toString(16); - } - } - - private static BigInteger toBigInteger(byte[] data, boolean big_endian, boolean sign_extension) { - byte[] temp = null; - if (sign_extension) { - temp = new byte[data.length]; - } - else { - temp = new byte[data.length + 1]; - temp[0] = 0; // Extra byte to avoid sign extension by BigInteger - } - if (big_endian) { - System.arraycopy(data, 0, temp, sign_extension ? 0 : 1, data.length); - } - else { - for (int i = 0; i < data.length; i++) { - temp[temp.length - i - 1] = data[i]; - } + return "0x" + TCFNumberFormat.toBigInteger(data, value.isBigEndian(), false).toString(16); } - return new BigInteger(temp); } } |