Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEugene Tarassov2012-04-05 21:33:43 +0000
committerEugene Tarassov2012-04-05 21:33:43 +0000
commitdb4911829bf7aa3d03f79da958fd4311709d5d39 (patch)
treec7d37ed5d99edf162e4e466526711e0d006dc43a /plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse
parent147bedb2596adaecc690a0a7c5d0966eb384e79b (diff)
downloadorg.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')
-rw-r--r--plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/disassembly/TCFDisassemblyBackend.java31
-rw-r--r--plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/hover/TCFDebugTextHover.java49
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);
}
}

Back to the top