diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java index 9bf6347f591..18a6ed8fe22 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java @@ -239,7 +239,7 @@ public class CValue extends AbstractCValue { else if ( cdiValue instanceof ICDIWCharValue ) return getWCharValueString( (ICDIWCharValue)cdiValue ); else - return cdiValue.getValueString(); + return getGenericValueString(cdiValue.getValueString()); } return null; } @@ -423,6 +423,36 @@ public class CValue extends AbstractCValue { return null; } + private String getGenericValueString(String svalue) throws CDIException { + try { + BigInteger bigValue = new BigInteger(svalue); + CVariableFormat format = getParentVariable().getFormat(); + if (CVariableFormat.NATURAL.equals(format)) { + format = CVariableFormat.DECIMAL; + } + if (CVariableFormat.DECIMAL.equals(format)) { + return svalue; + } else if (CVariableFormat.HEXADECIMAL.equals(format)) { + StringBuffer sb = new StringBuffer("0x"); //$NON-NLS-1$ + if (isUnsigned()) { + sb.append(bigValue.toString(16)); + } else + sb.append(Long.toHexString(bigValue.longValue())); + return sb.toString(); + } else if (CVariableFormat.BINARY.equals(format)) { + StringBuffer sb = new StringBuffer("0b"); //$NON-NLS-1$ + if (isUnsigned()) { + sb.append(bigValue.toString(2)); + } else + sb.append(Long.toBinaryString(bigValue.longValue())); + return sb.toString(); + } + } catch (NumberFormatException e) { + } + return svalue; + } + + private String getFloatValueString( ICDIFloatValue value ) throws CDIException { float floatValue = value.floatValue(); if ( Float.isNaN(floatValue) ) diff --git a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java index 4442a472209..d61fbd04dab 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/cdi/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java @@ -388,12 +388,15 @@ public class SourceManager extends Manager { boolean isImaginery = (first.equals("_Imaginary") || second.equals("_Imaginary") || third.equals("_Imaginary")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + if (isSigned == false && unSigned==false) { + isSigned = true; // otherwise long long int would not work + } if (isShort && isInt && (isSigned || unSigned)) { return new ShortType(target, typename, unSigned); - } else if (isLong && isInt && (isSigned || unSigned)) { - return new LongType(target, typename, unSigned); } else if (isLongLong && (isSigned || unSigned)) { return new LongLongType(target, typename, unSigned); + } else if (isLong && isInt && (isSigned || unSigned)) { + return new LongType(target, typename, unSigned); } else if (isDouble && isLong && (isComplex || isImaginery)) { return new DoubleType(target, typename, isComplex, isImaginery, isLong); }