1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-29 03:45:35 +02:00

Remove unneeded method

This commit is contained in:
Alain Magloire 2003-08-06 19:52:27 +00:00
parent 110459666f
commit 1bc4e43764
8 changed files with 227 additions and 130 deletions

View file

@ -1,3 +1,22 @@
2003-08-06 Alain Magloire
First framework to deal with breaking the arrays in ranges.
* src/org/eclipse/cdt/debug/mi/core/cdi/model/Argument.java:
Remove unused getArgumentObject().
* src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java:
Remove unuse getRegisterObject().
* src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java:
Move methods to VariableObject to comply with the interface.
* src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java:
Implement new methods of ICDIVariableObject.java
Save the castin information.
* src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ArrayValue.java:
New method getVariables(int, int).
* src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java:
New method encodeVariable(), to get the encode specific string
for gdb casting of arrays.
2003-07-28 Mikhail Khodjaiants 2003-07-28 Mikhail Khodjaiants
Minimize the number of the "evaluate expression" requests when changing the value of the floating point types. Minimize the number of the "evaluate expression" requests when changing the value of the floating point types.

View file

@ -79,8 +79,6 @@ public class RegisterManager extends SessionObject implements ICDIRegisterManage
RegisterObject regObj = null; RegisterObject regObj = null;
if (regObject instanceof RegisterObject) { if (regObject instanceof RegisterObject) {
regObj = (RegisterObject)regObject; regObj = (RegisterObject)regObject;
} else if (regObject instanceof Register) {
regObj = ((Register)regObject).getRegisterObject();
} }
if (regObj != null) { if (regObj != null) {
Register reg = getRegister(regObject); Register reg = getRegister(regObject);
@ -160,7 +158,7 @@ public class RegisterManager extends SessionObject implements ICDIRegisterManage
public Register getRegister(int regno) { public Register getRegister(int regno) {
Register[] regs = getRegisters(); Register[] regs = getRegisters();
for (int i = 0; i < regs.length; i++) { for (int i = 0; i < regs.length; i++) {
if (regs[i].getVariableObject().getPosition() == regno) { if (regs[i].getPosition() == regno) {
return regs[i]; return regs[i];
} }
} }

View file

@ -92,13 +92,17 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
int depth = v.getStackDepth(); int depth = v.getStackDepth();
Variable[] vars = getVariables(); Variable[] vars = getVariables();
for (int i = 0; i < vars.length; i++) { for (int i = 0; i < vars.length; i++) {
if (vars[i].getName().equals(name)) { if (vars[i].getName().equals(name) &&
vars[i].casting_index == v.casting_index &&
vars[i].casting_length == v.casting_length &&
((vars[i].casting_type == null && v.casting_type == null) ||
(vars[i].casting_type != null && v.casting_type != null && vars[i].casting_type.equals(v.casting_type)))) {
ICDIStackFrame frame = vars[i].getStackFrame(); ICDIStackFrame frame = vars[i].getStackFrame();
if (stack == null && frame == null) { if (stack == null && frame == null) {
return vars[i]; return vars[i];
} else if (frame != null && stack != null && frame.equals(stack)) { } else if (frame != null && stack != null && frame.equals(stack)) {
if (vars[i].getVariableObject().getPosition() == position) { if (vars[i].getPosition() == position) {
if (vars[i].getVariableObject().getStackDepth() == depth) { if (vars[i].getStackDepth() == depth) {
return vars[i]; return vars[i];
} }
} }
@ -133,23 +137,23 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
} }
} }
public String createStringEncoding(VariableObject varObj) { public static String encodeVariable(VariableObject varObj) {
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
if (varObj.length > 0) { if (varObj.casting_length > 0 || varObj.casting_index > 0) {
buffer.append("*("); buffer.append("*(");
buffer.append('('); buffer.append('(');
if (varObj.type != null && varObj.type.length() > 0) { if (varObj.casting_type != null && varObj.casting_type.length() > 0) {
buffer.append('(').append(varObj.type).append(')'); buffer.append('(').append(varObj.casting_type).append(')');
} }
buffer.append(varObj.getName()); buffer.append(varObj.getName());
buffer.append(')'); buffer.append(')');
if (varObj.index != 0) { if (varObj.casting_index != 0) {
buffer.append('+').append(varObj.index); buffer.append('+').append(varObj.casting_index);
} }
buffer.append(')'); buffer.append(')');
buffer.append('@').append(varObj.length - varObj.index); buffer.append('@').append(varObj.casting_length - varObj.casting_index);
} else if (varObj.type != null && varObj.type.length() > 0) { } else if (varObj.casting_type != null && varObj.casting_type.length() > 0) {
buffer.append('(').append(varObj.type).append(')'); buffer.append('(').append(varObj.casting_type).append(')');
buffer.append('(').append(varObj.getName()).append(')'); buffer.append('(').append(varObj.getName()).append(')');
} else { } else {
buffer.append(varObj.getName()); buffer.append(varObj.getName());
@ -195,8 +199,6 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
ArgumentObject argObj = null; ArgumentObject argObj = null;
if (a instanceof ArgumentObject) { if (a instanceof ArgumentObject) {
argObj = (ArgumentObject)a; argObj = (ArgumentObject)a;
} else if (a instanceof Argument) {
argObj = ((Argument)a).getArgumentObject();
} }
if (argObj != null) { if (argObj != null) {
Variable variable = findVariable(argObj); Variable variable = findVariable(argObj);
@ -205,7 +207,7 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
argument = (Argument)variable; argument = (Argument)variable;
} }
if (argument == null) { if (argument == null) {
String name = argObj.getName(); String name = encodeVariable(argObj);
ICDIStackFrame stack = argObj.getStackFrame(); ICDIStackFrame stack = argObj.getStackFrame();
Session session = (Session)getSession(); Session session = (Session)getSession();
ICDIThread currentThread = null; ICDIThread currentThread = null;
@ -344,15 +346,10 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
VariableObject obj = null; VariableObject obj = null;
if (object instanceof VariableObject) { if (object instanceof VariableObject) {
obj = (VariableObject)object; obj = (VariableObject)object;
} else if (object instanceof Variable) {
obj = ((Variable)object).getVariableObject();
} }
if (obj != null) { if (obj != null) {
StringBuffer buffer = new StringBuffer(); // Check if the type is valid.
buffer.append("*(");
buffer.append('(');
if (type != null && type.length() > 0) { if (type != null && type.length() > 0) {
// Check if the type is valid.
try { try {
MISession mi = ((Session)getSession()).getMISession(); MISession mi = ((Session)getSession()).getMISession();
CommandFactory factory = mi.getCommandFactory(); CommandFactory factory = mi.getCommandFactory();
@ -365,20 +362,32 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
} catch (MIException e) { } catch (MIException e) {
throw new MI2CDIException(e); throw new MI2CDIException(e);
} }
buffer.append('(').append(type).append(')');
} }
// Should we provide a getRegisterObjectAsArray ?
StringBuffer buffer = new StringBuffer();
if (obj instanceof ICDIRegisterObject) { if (obj instanceof ICDIRegisterObject) {
buffer.append("$" + obj.getName()); buffer.append("$" + obj.getName());
} else { } else {
buffer.append(obj.getName()); buffer.append(obj.getName());
} }
buffer.append(')'); VariableObject vo = new VariableObject(obj, buffer.toString());
if (start != 0) {
buffer.append('+').append(start); // Carry the the old casting type over
buffer.setLength(0);
if (obj.casting_type != null && obj.casting_type.length() > 0) {
buffer.append("(").append(obj.casting_type).append(")");
} }
buffer.append(')'); if (type != null && type.length() > 0) {
buffer.append('@').append(length - start); buffer.append(type);
return new VariableObject(obj, buffer.toString()); }
vo.casting_type = buffer.toString();
// Carry any other info to the new VariableObject
vo.casting_index = obj.casting_index + start;
vo.casting_length = obj.casting_length + length;
return vo;
} }
throw new CDIException("Unknown variable object"); throw new CDIException("Unknown variable object");
} }
@ -390,8 +399,6 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
VariableObject obj = null; VariableObject obj = null;
if (object instanceof VariableObject) { if (object instanceof VariableObject) {
obj = (VariableObject)object; obj = (VariableObject)object;
} else if (object instanceof Variable) {
obj = ((Variable)object).getVariableObject();
} }
if (obj != null) { if (obj != null) {
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
@ -481,13 +488,10 @@ public class VariableManager extends SessionObject implements ICDIVariableManage
if (v instanceof VariableObject) { if (v instanceof VariableObject) {
varObj = (VariableObject)v; varObj = (VariableObject)v;
} }
if (v instanceof Variable) {
varObj = ((Variable)v).getVariableObject();
}
if (varObj != null) { if (varObj != null) {
Variable variable = findVariable(varObj); Variable variable = findVariable(varObj);
if (variable == null) { if (variable == null) {
String name = varObj.getName(); String name = encodeVariable(varObj);
Session session = (Session)getSession(); Session session = (Session)getSession();
ICDIStackFrame stack = varObj.getStackFrame(); ICDIStackFrame stack = varObj.getStackFrame();
ICDIThread currentThread = null; ICDIThread currentThread = null;

View file

@ -15,7 +15,4 @@ public class Argument extends Variable implements ICDIArgument {
super(obj, var); super(obj, var);
} }
public ArgumentObject getArgumentObject() {
return (ArgumentObject)super.getVariableObject();
}
} }

View file

@ -25,13 +25,6 @@ public class Register extends Variable implements ICDIRegister {
super(obj, var); super(obj, var);
} }
public RegisterObject getRegisterObject() {
return (RegisterObject)super.getVariableObject();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.mi.core.cdi.model.Variable#getChildren()
*/
public ICDIVariable[] getChildren() throws CDIException { public ICDIVariable[] getChildren() throws CDIException {
Session session = (Session)(getTarget().getSession()); Session session = (Session)(getTarget().getSession());
MISession mi = session.getMISession(); MISession mi = session.getMISession();
@ -49,7 +42,7 @@ public class Register extends Variable implements ICDIRegister {
children = new Register[vars.length]; children = new Register[vars.length];
for (int i = 0; i < vars.length; i++) { for (int i = 0; i < vars.length; i++) {
RegisterObject regObj = new RegisterObject(getTarget(), RegisterObject regObj = new RegisterObject(getTarget(),
vars[i].getExp(), getVariableObject().getPosition()); vars[i].getExp(), getPosition());
children[i] = mgr.createRegister(regObj, vars[i]); children[i] = mgr.createRegister(regObj, vars[i]);
} }
} catch (MIException e) { } catch (MIException e) {

View file

@ -9,8 +9,6 @@ import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager; import org.eclipse.cdt.debug.core.cdi.ICDIExpressionManager;
import org.eclipse.cdt.debug.core.cdi.ICDIRegisterManager; import org.eclipse.cdt.debug.core.cdi.ICDIRegisterManager;
import org.eclipse.cdt.debug.core.cdi.ICDIVariableManager; import org.eclipse.cdt.debug.core.cdi.ICDIVariableManager;
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.cdi.model.ICDIValue; import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayType; import org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayType;
@ -34,7 +32,6 @@ import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.cdi.Format; import org.eclipse.cdt.debug.mi.core.cdi.Format;
import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException; import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
import org.eclipse.cdt.debug.mi.core.cdi.Session; import org.eclipse.cdt.debug.mi.core.cdi.Session;
import org.eclipse.cdt.debug.mi.core.cdi.SourceManager;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.ArrayValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.ArrayValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.BoolValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.BoolValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.CharValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.CharValue;
@ -42,7 +39,6 @@ import org.eclipse.cdt.debug.mi.core.cdi.model.type.DoubleValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.EnumValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.EnumValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.FloatValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.FloatValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.FunctionValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.FunctionValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.IncompleteType;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.IntValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.IntValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.LongLongValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.LongLongValue;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.LongValue; import org.eclipse.cdt.debug.mi.core.cdi.model.type.LongValue;
@ -65,16 +61,17 @@ import org.eclipse.cdt.debug.mi.core.output.MIVarShowAttributesInfo;
/** /**
*/ */
public class Variable extends CObject implements ICDIVariable { public class Variable extends VariableObject implements ICDIVariable {
MIVar miVar; MIVar miVar;
Value value; Value value;
VariableObject varObj; VariableObject varObj;
ICDIVariable[] children = new ICDIVariable[0]; ICDIVariable[] children = new ICDIVariable[0];
Type type; Type type;
String editable = null;
public Variable(VariableObject obj, MIVar v) { public Variable(VariableObject obj, MIVar v) {
super(obj.getTarget()); super(obj, obj.getName());
miVar = v; miVar = v;
varObj = obj; varObj = obj;
} }
@ -83,10 +80,6 @@ public class Variable extends CObject implements ICDIVariable {
return miVar; return miVar;
} }
public VariableObject getVariableObject() {
return varObj;
}
public Variable getChild(String name) { public Variable getChild(String name) {
for (int i = 0; i < children.length; i++) { for (int i = 0; i < children.length; i++) {
Variable variable = (Variable)children[i]; Variable variable = (Variable)children[i];
@ -108,6 +101,10 @@ public class Variable extends CObject implements ICDIVariable {
return getChildren(-1); return getChildren(-1);
} }
/**
* This can be a potentially long operation for GDB.
* allow the override of the timeout.
*/
public ICDIVariable[] getChildren(int timeout) throws CDIException { public ICDIVariable[] getChildren(int timeout) throws CDIException {
Session session = (Session)(getTarget().getSession()); Session session = (Session)(getTarget().getSession());
MISession mi = session.getMISession(); MISession mi = session.getMISession();
@ -129,8 +126,7 @@ public class Variable extends CObject implements ICDIVariable {
for (int i = 0; i < vars.length; i++) { for (int i = 0; i < vars.length; i++) {
VariableObject varObj = new VariableObject(getTarget(), VariableObject varObj = new VariableObject(getTarget(),
vars[i].getExp(), getStackFrame(), vars[i].getExp(), getStackFrame(),
getVariableObject().getPosition(), getPosition(),getStackDepth());
getVariableObject().getStackDepth());
children[i] = new Variable(varObj, vars[i]); children[i] = new Variable(varObj, vars[i]);
} }
} catch (MIException e) { } catch (MIException e) {
@ -144,16 +140,13 @@ public class Variable extends CObject implements ICDIVariable {
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getName() * We overload the VariableObject since the gdb-varobject already knows
*/ * the type and its probably more accurate.
public String getName() { *
return varObj.getName(); * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#getTypeName()
}
/**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getTypeName()
*/ */
public String getTypeName() throws CDIException { public String getTypeName() throws CDIException {
// We overload here not to use the whatis command.
return miVar.getType(); return miVar.getType();
} }
@ -260,19 +253,22 @@ public class Variable extends CObject implements ICDIVariable {
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable() * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#isEditable()
*/ */
public boolean isEditable() throws CDIException { public boolean isEditable() throws CDIException {
MISession mi = ((Session)(getTarget().getSession())).getMISession(); if (editable == null) {
CommandFactory factory = mi.getCommandFactory(); MISession mi = ((Session)(getTarget().getSession())).getMISession();
MIVarShowAttributes var = factory.createMIVarShowAttributes(miVar.getVarName()); CommandFactory factory = mi.getCommandFactory();
try { MIVarShowAttributes var = factory.createMIVarShowAttributes(miVar.getVarName());
mi.postCommand(var); try {
MIVarShowAttributesInfo info = var.getMIVarShowAttributesInfo(); mi.postCommand(var);
if (info == null) { MIVarShowAttributesInfo info = var.getMIVarShowAttributesInfo();
throw new CDIException("No answer"); if (info == null) {
throw new CDIException("No answer");
}
editable = String.valueOf(info.isEditable());
} catch (MIException e) {
throw new MI2CDIException(e);
} }
return info.isEditable();
} catch (MIException e) {
throw new MI2CDIException(e);
} }
return (editable == null) ? false : Boolean.getBoolean(editable);
} }
/** /**
@ -305,37 +301,4 @@ public class Variable extends CObject implements ICDIVariable {
return super.equals(var); return super.equals(var);
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getStackFrame()
*/
public ICDIStackFrame getStackFrame() throws CDIException {
return varObj.getStackFrame();
}
/**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getType()
*/
public ICDIType getType() throws CDIException {
if (type == null) {
ICDITarget target = getTarget();
Session session = (Session)(target.getSession());
SourceManager sourceMgr = (SourceManager)session.getSourceManager();
String typename = getTypeName();
try {
type = sourceMgr.getType(target, typename);
} catch (CDIException e) {
// Try with ptype.
try {
String ptype = sourceMgr.getDetailTypeName(typename);
type = sourceMgr.getType(target, ptype);
} catch (CDIException ex) {
}
}
if (type == null) {
type = new IncompleteType(target, typename);
}
}
return type;
}
} }

View file

@ -5,18 +5,36 @@
*/ */
package org.eclipse.cdt.debug.mi.core.cdi.model; package org.eclipse.cdt.debug.mi.core.cdi.model;
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame; import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject;
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MISession;
import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
import org.eclipse.cdt.debug.mi.core.cdi.Session;
import org.eclipse.cdt.debug.mi.core.cdi.SourceManager;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.IncompleteType;
import org.eclipse.cdt.debug.mi.core.cdi.model.type.Type;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataEvaluateExpression;
import org.eclipse.cdt.debug.mi.core.command.MIWhatis;
import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo;
import org.eclipse.cdt.debug.mi.core.output.MIWhatisInfo;
/** /**
*/ */
public class VariableObject extends CObject implements ICDIVariableObject { public class VariableObject extends CObject implements ICDIVariableObject {
// Casting info. // Casting info.
public String type; public String casting_type;
public int index; public int casting_index;
public int length; public int casting_length;
Type type = null;
String typename = null;
String sizeof = null;
String name; String name;
int position; int position;
@ -24,28 +42,22 @@ public class VariableObject extends CObject implements ICDIVariableObject {
int stackdepth; int stackdepth;
public VariableObject(VariableObject obj, String n) { public VariableObject(VariableObject obj, String n) {
this(obj.getTarget(), n, obj.getStackFrame(), super(obj.getTarget());
obj.getPosition(), obj.getStackDepth()); name = n;
try {
frame = obj.getStackFrame();
} catch (CDIException e) {
}
position = obj.getPosition();
stackdepth = obj.getStackDepth();
} }
public VariableObject(ICDITarget target, String n, ICDIStackFrame stack, public VariableObject(ICDITarget target, String n, ICDIStackFrame stack, int pos, int depth) {
int pos, int depth) {
super(target); super(target);
name = n; name = n;
frame = stack; frame = stack;
position = pos; position = pos;
stackdepth = depth; stackdepth = depth;
type = new String();
index = 0;
length = 0;
}
public ICDITarget getTarget() {
return target;
}
public ICDIStackFrame getStackFrame() {
return frame;
} }
public int getPosition() { public int getPosition() {
@ -63,4 +75,94 @@ public class VariableObject extends CObject implements ICDIVariableObject {
return name; return name;
} }
/**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#getType()
*/
public ICDIType getType() throws CDIException {
if (type == null) {
ICDITarget target = getTarget();
Session session = (Session) (target.getSession());
SourceManager sourceMgr = (SourceManager) session.getSourceManager();
String typename = getTypeName();
try {
type = sourceMgr.getType(target, typename);
} catch (CDIException e) {
// Try with ptype.
try {
String ptype = sourceMgr.getDetailTypeName(typename);
type = sourceMgr.getType(target, ptype);
} catch (CDIException ex) {
}
}
if (type == null) {
type = new IncompleteType(target, typename);
}
}
return type;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#sizeof()
*/
public int sizeof() throws CDIException {
if (sizeof == null) {
ICDITarget target = getTarget();
Session session = (Session) (target.getSession());
MISession mi = session.getMISession();
CommandFactory factory = mi.getCommandFactory();
String exp = "sizeof(" + getTypeName() + ")";
MIDataEvaluateExpression evaluate = factory.createMIDataEvaluateExpression("sizeof(" + getName());
try {
mi.postCommand(evaluate);
MIDataEvaluateExpressionInfo info = evaluate.getMIDataEvaluateExpressionInfo();
if (info == null) {
throw new CDIException("Target is not responding");
}
sizeof = info.getExpression();
} catch (MIException e) {
throw new MI2CDIException(e);
}
}
if (sizeof != null) {
try {
return Integer.parseInt(sizeof);
} catch (NumberFormatException e) {
throw new CDIException(e.getMessage());
}
}
return 0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#getStackFrame()
*/
public ICDIStackFrame getStackFrame() throws CDIException {
return frame;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject#getTypeName()
*/
public String getTypeName() throws CDIException {
if (typename == null) {
try {
ICDITarget target = getTarget();
Session session = (Session) (target.getSession());
MISession mi = session.getMISession();
CommandFactory factory = mi.getCommandFactory();
MIWhatis whatis = factory.createMIWhatis(getName());
mi.postCommand(whatis);
MIWhatisInfo info = whatis.getMIWhatisInfo();
if (info == null) {
throw new CDIException("No answer");
}
typename = info.getType();
} catch (MIException e) {
throw new MI2CDIException(e);
}
}
return typename;
}
} }

View file

@ -7,8 +7,12 @@
package org.eclipse.cdt.debug.mi.core.cdi.model.type; package org.eclipse.cdt.debug.mi.core.cdi.model.type;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDIVariableManager;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable;
import org.eclipse.cdt.debug.core.cdi.model.ICDIVariableObject;
import org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayValue; import org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayValue;
import org.eclipse.cdt.debug.mi.core.cdi.Session;
import org.eclipse.cdt.debug.mi.core.cdi.model.Variable; import org.eclipse.cdt.debug.mi.core.cdi.model.Variable;
/** /**
@ -38,4 +42,21 @@ public class ArrayValue extends DerivedValue implements ICDIArrayValue {
return variable.getChildren(timeout); return variable.getChildren(timeout);
} }
/**
*
* an Array of range[index, index + length - 1]
*/
public ICDIVariable[] getVariables(int index, int length) throws CDIException {
int children = getChildrenNumber();
//if (index >= children || index + length >= children) {
// throw new CDIException("Index out of bound");
//}
//String subarray = "*(" + variable.getName() + "+" + index + ")@" + length;
ICDITarget target = getTarget();
Session session = (Session) (target.getSession());
ICDIVariableManager mgr = session.getVariableManager();
ICDIVariableObject vo = mgr.getVariableObjectAsArray(variable, null, index, length);
return mgr.createVariable(vo).getValue().getVariables();
}
} }