mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-13 03:05:39 +02:00
[304588] Pointers could point to a complex structure and therefore we cannot trust they're number children hint.
This commit is contained in:
parent
98c77050c7
commit
f9f808080d
1 changed files with 10 additions and 5 deletions
|
@ -282,12 +282,17 @@ public class MIVariableManager implements ICommandControl {
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
*/
|
*/
|
||||||
public boolean isNumChildrenHintTrustworthy() {
|
public boolean isNumChildrenHintTrustworthy() {
|
||||||
// For complex structures which are not arrays, we cannot trust the hint.
|
// We cannot trust the hint about the number of children when we are
|
||||||
|
// dealing with a complex structure that could have the
|
||||||
|
// 'protected/public/private' children types.
|
||||||
|
// Note that a pointer could have such children, if it points to
|
||||||
|
// a complex structure.
|
||||||
|
//
|
||||||
// This is only valid for C++, so we should even check for it using
|
// This is only valid for C++, so we should even check for it using
|
||||||
// -var-info-expression. Do we have to use -var-info-expression for each
|
// -var-info-expression. Do we have to use -var-info-expression for each
|
||||||
// variable object, or can we do it one time ony for the whole program?
|
// variable object, or can we do it one time only for the whole program?
|
||||||
// Right now, we always assume we could be using C++
|
// Right now, we always assume we could be using C++
|
||||||
return (!isComplex() || isArray());
|
return (getNumChildrenHint() == 0 || isArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getValue(String format) { return valueMap.get(format); }
|
public String getValue(String format) { return valueMap.get(format); }
|
||||||
|
@ -298,8 +303,8 @@ public class MIVariableManager implements ICommandControl {
|
||||||
public boolean isArray() { return (getGDBType() == null) ? false : getGDBType().getType() == GDBType.ARRAY; }
|
public boolean isArray() { return (getGDBType() == null) ? false : getGDBType().getType() == GDBType.ARRAY; }
|
||||||
public boolean isPointer() { return (getGDBType() == null) ? false : getGDBType().getType() == GDBType.POINTER; }
|
public boolean isPointer() { return (getGDBType() == null) ? false : getGDBType().getType() == GDBType.POINTER; }
|
||||||
public boolean isMethod() { return (getGDBType() == null) ? false : getGDBType().getType() == GDBType.FUNCTION; }
|
public boolean isMethod() { return (getGDBType() == null) ? false : getGDBType().getType() == GDBType.FUNCTION; }
|
||||||
// A complex variable is one with children. However, it must not be a pointer since a pointer has one child
|
// A complex variable is one with children. However, it must not be a pointer since a pointer
|
||||||
// according to GDB, but is still a 'simple' variable.
|
// does have children, but is still a 'simple' variable, as it can be modifed.
|
||||||
// Note that the numChildrenHint can be trusted when asking if the number of children is 0 or not
|
// Note that the numChildrenHint can be trusted when asking if the number of children is 0 or not
|
||||||
public boolean isComplex() { return (getGDBType() == null) ? false : getGDBType().getType() != GDBType.POINTER && getNumChildrenHint() > 0; }
|
public boolean isComplex() { return (getGDBType() == null) ? false : getGDBType().getType() != GDBType.POINTER && getNumChildrenHint() > 0; }
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue