1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

2004-08-14 Alain Magloire

Fix for 71992.
	* src/org/eclipse/cdt/debug/mi/core/GDBTypeParser.java
This commit is contained in:
Alain Magloire 2004-08-15 01:55:01 +00:00
parent ad9112a59b
commit 8c89e95337
2 changed files with 69 additions and 27 deletions

View file

@ -1,3 +1,8 @@
2004-08-14 Alain Magloire
Fix for 71992.
* src/org/eclipse/cdt/debug/mi/core/GDBTypeParser.java
2004-08-05 Alain Magloire
Tentative Fix for PR 69991

View file

@ -95,6 +95,42 @@ public class GDBTypeParser {
return getGDBType();
}
public static String unParse (GDBType gdbType) {
StringBuffer sb = new StringBuffer();
// Fetch the datatype.
while (gdbType != null) {
GDBDerivedType derived = null;
int type = gdbType.getType();
if (gdbType instanceof GDBDerivedType) {
derived = (GDBDerivedType)gdbType;
gdbType = derived.getChild();
if (type == GDBType.FUNCTION) {
sb.append("()");
} else if (type == GDBType.ARRAY) {
sb.append('[').append(derived.getDimension()).append(']');
} else if (type == GDBType.POINTER) {
int childType = (gdbType != null) ? gdbType.getType() : GDBType.GENERIC;
if (childType == GDBType.POINTER || childType == GDBType.REFERENCE) {
sb.append('*');
} else if (childType == GDBType.GENERIC) {
sb.insert(0, '*');
} else {
sb.insert(0, "(*").append(")");
}
} else if (type == GDBType.REFERENCE) {
sb.insert(0, "(&").append(")");
}
} else {
sb.insert(0, ' ');
sb.insert(0, gdbType.nameType);
gdbType = null;
}
}
return sb.toString();
}
public class GDBType {
public final static int GENERIC = 0;
public final static int POINTER = 1;
@ -113,13 +149,13 @@ public class GDBTypeParser {
this("", t); //$NON-NLS-1$
}
GDBType(String n, int t) {
public GDBType(String n, int t) {
nameType = n;
type = t;
}
public String toString() {
return nameType;
return unParse(this);
}
public String verbose() {
@ -130,6 +166,9 @@ public class GDBTypeParser {
return type;
}
public String getTypeName() {
return nameType;
}
}
public class GDBDerivedType extends GDBType {
@ -162,31 +201,6 @@ public class GDBTypeParser {
return child != null;
}
public String toString() {
StringBuffer sb = new StringBuffer();
String childTypeName = (hasChild() ? child.toString() : ""); //$NON-NLS-1$
sb.append(childTypeName);
switch (getType()) {
case FUNCTION :
sb.append("()"); //$NON-NLS-1$
//sb.append(" function returning " + (hasChild() ? child.toString() : ""));
break;
case ARRAY :
sb.append("[" + dimension + "]"); //$NON-NLS-1$ //$NON-NLS-2$
//sb.append(" array[" + dimension + "]" + " of " + (hasChild() ? child.toString() : ""));
break;
case REFERENCE :
sb.append("&"); //$NON-NLS-1$
//sb.append(" reference to " + (hasChild() ? child.toString() : ""));
break;
case POINTER :
sb.append("*"); //$NON-NLS-1$
//sb.append(" pointer to " + (hasChild() ? child.toString() : ""));
break;
}
return sb.toString();
}
public String verbose() {
StringBuffer sb = new StringBuffer();
switch (getType()) {
@ -398,53 +412,76 @@ public class GDBTypeParser {
System.out.println("struct link { int i; int j; struct link * next;} *"); //$NON-NLS-1$
parser.parse("struct link { int i; int j; struct link * next} *"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("char **argv"); //$NON-NLS-1$
parser.parse("char **argv"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("int (*daytab)[13]"); //$NON-NLS-1$
parser.parse("int (*daytab)[13]"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("int *daytab[13]"); //$NON-NLS-1$
parser.parse("int *daytab[13]"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("void *comp()"); //$NON-NLS-1$
parser.parse("void *comp()"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("void (*comp)()"); //$NON-NLS-1$
parser.parse("void (*comp)()"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("int (*func[15])()"); //$NON-NLS-1$
parser.parse("int (*func[15])()"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("char (*(*x())[])()"); //$NON-NLS-1$
parser.parse("char (*(*x())[])()"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("char (*(*x[3])())[5]"); //$NON-NLS-1$
parser.parse("char (*(*x[3])())[5]"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("char *[5]"); //$NON-NLS-1$
parser.parse("char *[5]"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
//System.out.println(parser.getGDBType().toString());
System.out.println(parser.getGDBType().verbose());
System.out.println();
System.out.println("int [2][3]"); //$NON-NLS-1$
parser.parse("int [2][3]"); //$NON-NLS-1$
System.out.println(GDBTypeParser.unParse(parser.getGDBType()));
System.out.println(parser.getGDBType().verbose());
System.out.println();
}
}