diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java
index 14442ecf7b1..0b0ab78b489 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java
@@ -22,10 +22,10 @@ public class MessagesForVariablesVM extends NLS {
public static String VariableColumnPresentation_name;
public static String VariableColumnPresentation_type;
public static String VariableColumnPresentation_value;
- public static String VariableColumnPresentation_address;
+ public static String VariableColumnPresentation_location;
- public static String VariableVMNode_Address_column__Error__text_format;
- public static String VariableVMNode_Address_column__text_format;
+ public static String VariableVMNode_Location_column__Error__text_format;
+ public static String VariableVMNode_Location_column__text_format;
public static String VariableVMNode_Description_column__text_format;
public static String VariableVMNode_Expression_column__text_format;
public static String VariableVMNode_Name_column__text_format;
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java
index fb208f38f86..30ad94afcc3 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java
@@ -42,7 +42,7 @@ public class VariableColumnPresentation implements IColumnPresentation {
} else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(id)) {
return MessagesForVariablesVM.VariableColumnPresentation_value;
} else if (IDebugVMConstants.COLUMN_ID__ADDRESS.equals(id)) {
- return MessagesForVariablesVM.VariableColumnPresentation_address;
+ return MessagesForVariablesVM.VariableColumnPresentation_location;
}
return null;
}
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java
index 2ee2f2ef28e..dd7964f64a8 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/VariableVMNode.java
@@ -17,7 +17,6 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.RejectedExecutionException;
-import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.debug.internal.ui.CDebugImages;
import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
@@ -36,6 +35,7 @@ import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionChangedDMEvent;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMAddress;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMData;
+import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMLocation;
import org.eclipse.cdt.dsf.debug.service.IMemory.IMemoryChangedEvent;
import org.eclipse.cdt.dsf.debug.service.IRunControl.ISuspendedDMEvent;
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
@@ -132,7 +132,7 @@ public class VariableVMNode extends AbstractExpressionVMNode
*
* @since 2.0
*/
- private IElementLabelProvider fLabelProvider;
+ private final IElementLabelProvider fLabelProvider;
public class VariableExpressionVMC extends DMVMContext implements IFormattedValueVMContext {
@@ -375,9 +375,9 @@ public class VariableVMNode extends AbstractExpressionVMNode
IDebugVMConstants.COLUMN_ID__ADDRESS,
new LabelColumnInfo(new LabelAttribute[] {
new LabelText(
- MessagesForVariablesVM.VariableVMNode_Address_column__text_format,
+ MessagesForVariablesVM.VariableVMNode_Location_column__text_format,
new String[] { PROP_VARIABLE_ADDRESS }),
- new LabelText(MessagesForVariablesVM.VariableVMNode_Address_column__Error__text_format, new String[] {}),
+ new LabelText(MessagesForVariablesVM.VariableVMNode_Location_column__Error__text_format, new String[] {}),
new LabelBackground(
DebugUITools.getPreferenceColor(IDebugUIConstants.PREF_CHANGED_VALUE_BACKGROUND).getRGB())
{
@@ -706,9 +706,10 @@ public class VariableVMNode extends AbstractExpressionVMNode
@ConfinedToDsfExecutor("getSession().getExecutor()")
protected void fillAddressDataProperties(IPropertiesUpdate update, IExpressionDMAddress address)
{
- IExpressionDMAddress expression = address;
- IAddress expAddress = expression.getAddress();
- update.setProperty(PROP_VARIABLE_ADDRESS, "0x" + expAddress.toString(16)); //$NON-NLS-1$
+ if (address instanceof IExpressionDMLocation)
+ update.setProperty(PROP_VARIABLE_ADDRESS, ((IExpressionDMLocation)address).getLocation());
+ else
+ update.setProperty(PROP_VARIABLE_ADDRESS, "0x" + address.getAddress().toString(16)); //$NON-NLS-1$
}
public CellEditor getCellEditor(IPresentationContext context, String columnId, Object element, Composite parent) {
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties
index c957a6e9dec..ae1f44cfe5b 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/variable/messages.properties
@@ -7,16 +7,17 @@
#
# Contributors:
# Wind River Systems - initial API and implementation
-# Wind River Systems - added Address
+# Wind River Systems - added Location
+# Wind River Systems - changed Location to Location
###############################################################################
VariableColumnPresentation_name=Name
VariableColumnPresentation_type=Type
VariableColumnPresentation_value=Value
-VariableColumnPresentation_address=Address
+VariableColumnPresentation_location=Location
-VariableVMNode_Address_column__Error__text_format=
-VariableVMNode_Address_column__text_format={0}
+VariableVMNode_Location_column__Error__text_format=
+VariableVMNode_Location_column__text_format={0}
VariableVMNode_Description_column__text_format=
VariableVMNode_Expression_column__text_format={0}
VariableVMNode_Name_column__text_format={0}
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java
index 293cc20f2f6..3ccb9a640e7 100644
--- a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/debug/service/IExpressions.java
@@ -11,6 +11,7 @@
*******************************************************************************/
package org.eclipse.cdt.dsf.debug.service;
+import java.math.BigInteger;
import java.util.Map;
import org.eclipse.cdt.core.IAddress;
@@ -41,14 +42,61 @@ public interface IExpressions extends IFormattedValues {
*/
String getExpression();
}
-
+
+
/**
* The address and size of an expression.
*/
public interface IExpressionDMAddress {
+
+ /**
+ * Returns the address of the expression.
+ */
IAddress getAddress();
+
+ /**
+ * Returns the size of the address.
+ */
int getSize();
}
+
+ /**
+ * A representation of an expression location that does not correspond to
+ * an address.
+ *
+ * @since 2.1
+ */
+ public interface IExpressionDMLocation extends IExpressionDMAddress {
+
+ /**
+ * A constant that can be returned by {@link IExpressionDMAddress#getAddress()}
+ * to represent an invalid address. Implementations of
+ * IExpressionDMLocation
can return this constant if no
+ * valid address can be returned for a given expression location.
+ */
+ public static final IAddress INVALID_ADDRESS = new IAddress() {
+ public IAddress add(BigInteger offset) { return this; }
+ public IAddress add(long offset) { return this; }
+ public BigInteger getMaxOffset() { return BigInteger.ZERO; }
+ public BigInteger distanceTo(IAddress other) { return BigInteger.ZERO; }
+ public BigInteger getValue() { return BigInteger.ZERO; }
+ public boolean isZero() { return false; }
+ public boolean isMax() { return false; }
+ public String toString(int radix) { return "INVALID"; }
+ public String toHexAddressString() { return toString(); }
+ public String toBinaryAddressString() { return toString(); }
+ public int getCharsNum() { return 0; }
+ public int getSize() { return 0; }
+ public int compareTo(Object o) { return 0; }
+ };
+
+ /**
+ * Returns a string representation of the expression location.
+ */
+ public String getLocation();
+ }
+
+
/**
* This is the model data interface that corresponds to IExpressionDMContext.
@@ -140,7 +188,9 @@ public interface IExpressions extends IFormattedValues {
/**
* Retrieves the address and size of an expression given by the expression context(dmc).
* Non-lvalues do not have an addresses (e.g., "x + 5"). When the expression
-- * has no address, the data request monitor will contain null.
+- * has no address, the request monitor will have an error with code
+ * IDsfStatusConstants.REQUEST_FAILED
and the data request
+ * monitor will contain null.
*
* @param dmc
* The ExpressionDMC for the expression