Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java')
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CValue.java117
1 files changed, 106 insertions, 11 deletions
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 5614958f953..eca33a16f55 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
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2010 QNX Software Systems and others.
+ * Copyright (c) 2000, 2012 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,6 +10,7 @@
* Mark Mitchell, CodeSourcery - Bug 136896: View variables in binary format
* Warren Paul (Nokia) - 150860, 150864, 150862, 150863, 217493
* Ken Ryall (Nokia) - 207675
+ * Mathias Kunter - Support for octal number format (bug 370462)
*******************************************************************************/
package org.eclipse.cdt.debug.internal.core.model;
@@ -277,6 +278,19 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 2) ? stringValue.substring( stringValue.length() - 2 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = (isUnsigned()) ? Integer.toOctalString( value.shortValue() ) : Integer.toOctalString( (byte)value.byteValue() );
+ stringValue = (stringValue.length() > 3) ? stringValue.substring( stringValue.length() - 3 ) : stringValue;
+ sb.append( (stringValue.length() == 3 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
+ else if ( CVariableFormat.BINARY.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
+ String stringValue = (isUnsigned()) ? Integer.toBinaryString( value.shortValue() ) : Integer.toBinaryString( (byte)value.byteValue() );
+ sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue );
+ return sb.toString();
+ }
return null;
}
@@ -313,6 +327,13 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 2) ? stringValue.substring( stringValue.length() - 2 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = (isUnsigned()) ? Integer.toOctalString( value.shortValue() ) : Integer.toOctalString( (byte)value.byteValue() );
+ stringValue = (stringValue.length() > 3) ? stringValue.substring( stringValue.length() - 3 ) : stringValue;
+ sb.append( (stringValue.length() == 3 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
String stringValue = (isUnsigned()) ? Integer.toBinaryString( value.shortValue() ) : Integer.toBinaryString( (byte)value.byteValue() );
@@ -338,6 +359,13 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 4) ? stringValue.substring( stringValue.length() - 4 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = Integer.toOctalString( (isUnsigned()) ? value.intValue() : value.shortValue() );
+ stringValue = (stringValue.length() > 6) ? stringValue.substring( stringValue.length() - 6 ) : stringValue;
+ sb.append( (stringValue.length() == 6 && stringValue.charAt( 0 ) >= '2') ? (char)((stringValue.charAt( 0 ) - '0') % 2 + '0') + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
String stringValue = Integer.toBinaryString( (isUnsigned()) ? value.intValue() : value.shortValue() );
@@ -363,6 +391,13 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = (isUnsigned()) ? Long.toOctalString( value.longValue() ) : Integer.toOctalString( value.intValue() );
+ stringValue = (stringValue.length() > 11) ? stringValue.substring( stringValue.length() - 11 ) : stringValue;
+ sb.append( (stringValue.length() == 11 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
String stringValue = (isUnsigned()) ? Long.toBinaryString( value.longValue() ) : Integer.toBinaryString( value.intValue() );
@@ -385,7 +420,7 @@ public class CValue extends AbstractCValue {
BigInteger bigValue = new BigInteger( value.getValueString() );
return bigValue.toString();
}
- return Long.toString( value.longValue() );
+ return Integer.toString( value.intValue() );
}
else if ( CVariableFormat.HEXADECIMAL.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0x" ); //$NON-NLS-1$
@@ -394,7 +429,17 @@ public class CValue extends AbstractCValue {
sb.append( bigValue.toString( 16 ) );
}
else
- sb.append( Long.toHexString( value.longValue() ) );
+ sb.append( Integer.toHexString( value.intValue() ) );
+ return sb.toString();
+ }
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ if ( isUnsigned() ) {
+ BigInteger bigValue = new BigInteger( value.getValueString() );
+ sb.append( bigValue.toString( 8 ) );
+ }
+ else
+ sb.append( Integer.toOctalString( value.intValue() ) );
return sb.toString();
}
else if ( CVariableFormat.BINARY.equals( format ) ) {
@@ -404,7 +449,7 @@ public class CValue extends AbstractCValue {
sb.append( bigValue.toString( 2 ) );
}
else
- sb.append( Long.toBinaryString( value.longValue() ) );
+ sb.append( Integer.toBinaryString( value.intValue() ) );
return sb.toString();
}
}
@@ -438,6 +483,16 @@ public class CValue extends AbstractCValue {
sb.append( Long.toHexString( value.longValue() ) );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ if ( isUnsigned() ) {
+ BigInteger bigValue = new BigInteger( value.getValueString() );
+ sb.append( bigValue.toString( 8 ) );
+ }
+ else
+ sb.append( Long.toOctalString( value.longValue() ) );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
if ( isUnsigned() ) {
@@ -470,6 +525,13 @@ public class CValue extends AbstractCValue {
} else
sb.append(Long.toHexString(bigValue.longValue()));
return sb.toString();
+ } else if (CVariableFormat.OCTAL.equals(format)) {
+ StringBuffer sb = new StringBuffer("0"); //$NON-NLS-1$
+ if (isUnsigned()) {
+ sb.append(bigValue.toString(8));
+ } else
+ sb.append(Long.toOctalString(bigValue.longValue()));
+ return sb.toString();
} else if (CVariableFormat.BINARY.equals(format)) {
StringBuffer sb = new StringBuffer("0b"); //$NON-NLS-1$
if (isUnsigned()) {
@@ -504,6 +566,13 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = Long.toOctalString( Float.floatToIntBits(floatValue) );
+ stringValue = (stringValue.length() > 11) ? stringValue.substring( stringValue.length() - 11 ) : stringValue;
+ sb.append( (stringValue.length() == 11 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
String stringValue = Long.toBinaryString( Float.floatToIntBits(floatValue) );
@@ -533,6 +602,13 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 16) ? stringValue.substring( stringValue.length() - 16 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = Long.toOctalString( Double.doubleToLongBits(doubleValue) );
+ stringValue = (stringValue.length() > 22) ? stringValue.substring( stringValue.length() - 22 ) : stringValue;
+ sb.append( (stringValue.length() == 22 && stringValue.charAt( 0 ) >= '2') ? (char)((stringValue.charAt( 0 ) - '0') % 2 + '0') + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
String stringValue = Long.toBinaryString( Double.doubleToLongBits(doubleValue) );
@@ -554,9 +630,11 @@ public class CValue extends AbstractCValue {
CVariableFormat format = getParentVariable().getFormat();
if ( CVariableFormat.NATURAL.equals( format ) || CVariableFormat.HEXADECIMAL.equals( format ) )
return address.toHexAddressString();
- if ( CVariableFormat.DECIMAL.equals( format ) )
+ else if ( CVariableFormat.DECIMAL.equals( format ) )
return address.toString();
- if ( CVariableFormat.BINARY.equals( format ) )
+ else if ( CVariableFormat.OCTAL.equals( format ) )
+ return address.toOctalAddressString();
+ else if ( CVariableFormat.BINARY.equals( format ) )
return address.toBinaryAddressString();
return null;
}
@@ -590,6 +668,13 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 4) ? stringValue.substring( stringValue.length() - 4 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = Integer.toOctalString( (isUnsigned()) ? value.intValue() : value.shortValue() );
+ stringValue = (stringValue.length() > 6) ? stringValue.substring( stringValue.length() - 6 ) : stringValue;
+ sb.append( (stringValue.length() == 6 && stringValue.charAt( 0 ) >= '2') ? (char)((stringValue.charAt( 0 ) - '0') % 2 + '0') + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
String stringValue = Integer.toBinaryString( (isUnsigned()) ? value.intValue() : value.shortValue() );
@@ -623,9 +708,16 @@ public class CValue extends AbstractCValue {
sb.append( (stringValue.length() > 8) ? stringValue.substring( stringValue.length() - 8 ) : stringValue );
return sb.toString();
}
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer( "0" ); //$NON-NLS-1$
+ String stringValue = (isUnsigned()) ? Long.toOctalString( value.longValue() ) : Integer.toOctalString( value.intValue() );
+ stringValue = (stringValue.length() > 11) ? stringValue.substring( stringValue.length() - 11 ) : stringValue;
+ sb.append( (stringValue.length() == 11 && stringValue.charAt( 0 ) >= '4') ? (char)(stringValue.charAt( 0 ) - 4) + stringValue.substring( 1 ) : stringValue );
+ return sb.toString();
+ }
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer( "0b" ); //$NON-NLS-1$
- String stringValue = (isUnsigned()) ? Long.toBinaryString( value.longValue() ) : Integer.toHexString( value.intValue() );
+ String stringValue = (isUnsigned()) ? Long.toBinaryString( value.longValue() ) : Integer.toBinaryString( value.intValue() );
sb.append( (stringValue.length() > 32) ? stringValue.substring( stringValue.length() - 32 ) : stringValue );
return sb.toString();
}
@@ -648,14 +740,17 @@ public class CValue extends AbstractCValue {
}
else if ( CVariableFormat.HEXADECIMAL.equals( format ) ) {
StringBuffer sb = new StringBuffer("0x"); //$NON-NLS-1$
- BigInteger bigValue = value.bigIntegerValue();
- sb.append(bigValue.toString(16));
+ sb.append(value.bigIntegerValue().toString(16));
+ return sb.toString();
+ }
+ else if ( CVariableFormat.OCTAL.equals( format ) ) {
+ StringBuffer sb = new StringBuffer("0"); //$NON-NLS-1$
+ sb.append(value.bigIntegerValue().toString(8));
return sb.toString();
}
else if ( CVariableFormat.BINARY.equals( format ) ) {
StringBuffer sb = new StringBuffer("0b"); //$NON-NLS-1$
- BigInteger bigValue = value.bigIntegerValue();
- sb.append(bigValue.toString(2));
+ sb.append(value.bigIntegerValue().toString(2));
return sb.toString();
}
}

Back to the top