1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-13 11:15:38 +02:00

[302348] [dis] Expression support in DSF Disassembly view is too limited

This commit is contained in:
Anton Leherbauer 2010-02-18 11:44:02 +00:00
parent 29acaaa99c
commit 730d211888

View file

@ -39,6 +39,7 @@ import org.eclipse.cdt.dsf.debug.service.IRunControl;
import org.eclipse.cdt.dsf.debug.service.ISourceLookup; import org.eclipse.cdt.dsf.debug.service.ISourceLookup;
import org.eclipse.cdt.dsf.debug.service.IStack; import org.eclipse.cdt.dsf.debug.service.IStack;
import org.eclipse.cdt.dsf.debug.service.IDisassembly.IDisassemblyDMContext; import org.eclipse.cdt.dsf.debug.service.IDisassembly.IDisassemblyDMContext;
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.IExpressionDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData; import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData;
@ -822,7 +823,23 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
if (expressions == null) { if (expressions == null) {
return; return;
} }
IExpressionDMContext exprDmc= expressions.createExpression(fTargetContext, '&'+symbol); final IExpressionDMContext exprDmc= expressions.createExpression(fTargetContext, symbol);
// first, try to get l-value address
expressions.getExpressionAddressData(exprDmc, new DataRequestMonitor<IExpressionDMAddress>(executor, null) {
@Override
protected void handleSuccess() {
IExpressionDMAddress data = getData();
final IAddress address = data.getAddress();
if (address != null) {
fCallback.asyncExec(new Runnable() {
public void run() {
fCallback.gotoAddress(address.getValue());
}});
}
}
@Override
protected void handleError() {
// not an l-value, evaluate expression
final FormattedValueDMContext valueDmc= expressions.getFormattedValueContext(exprDmc, IFormattedValues.HEX_FORMAT); final FormattedValueDMContext valueDmc= expressions.getFormattedValueContext(exprDmc, IFormattedValues.HEX_FORMAT);
expressions.getFormattedExpressionValue(valueDmc, new DataRequestMonitor<FormattedValueDMData>(executor, null) { expressions.getFormattedExpressionValue(valueDmc, new DataRequestMonitor<FormattedValueDMData>(executor, null) {
@Override @Override
@ -845,6 +862,8 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
}}); }});
} }
}); });
}
});
}}); }});
} }