Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] MI implementation of types

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.131
diff -u -r1.131 ChangeLog
--- ChangeLog	23 May 2003 05:14:07 -0000	1.131
+++ ChangeLog	23 May 2003 15:48:39 -0000
@@ -1,3 +1,10 @@
+2003-05-24 Alain Magloire
+
+	Continuing the implementation of types.
+	ICDIType is ICDIObject.
+	* src/org/eclispe/cdt/mi/core/cdi/model/type/Type.java:
+	Extends CObject
+
 2003-05-23 Alain Magloire
 
 	Draft implementation of org.eclipse.cdt.debug.core.cdi.model.type/*
Index: src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java,v
retrieving revision 1.22
diff -u -r1.22 SourceManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java	23 May 2003 05:13:53 -0000	1.22
+++ src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java	23 May 2003 15:48:40 -0000
@@ -11,6 +11,7 @@
 import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction;
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.mi.core.MIException;
 import org.eclipse.cdt.debug.mi.core.MISession;
 import org.eclipse.cdt.debug.mi.core.cdi.model.Instruction;
@@ -217,53 +218,53 @@
 	}
 
 
-	public Type getType(String name) throws CDIException {
+	public Type getType(ICDITarget target, String name) throws CDIException {
 		String typename = name.trim();
 
 		// Check the derived types and agregate types
 		if (typename.endsWith("]")) {
-			return new ArrayType(typename);
-		} else if (typename.indexOf("*") != -1) {
-			return new PointerType(typename);
-		} else if (typename.indexOf("&") != -1) {
-			return new ReferenceType(typename);
+			return new ArrayType(target, typename);
+		} else if (typename.endsWith("*")) {
+			return new PointerType(target, typename);
+		} else if (typename.endsWith("&")) {
+			return new ReferenceType(target, typename);
 		} else if (typename.endsWith(")")) {
-			return new FunctionType(typename);
+			return new FunctionType(target, typename);
 		} else if (typename.startsWith("enum ")) {
-			return new EnumType(typename);
+			return new EnumType(target, typename);
 		} else if (typename.startsWith("union ")) {
-			return new StructType(typename);
+			return new StructType(target, typename);
 		} else if (typename.startsWith("struct ")) {
-			return new StructType(typename);
+			return new StructType(target, typename);
 		} else if (typename.startsWith("class ")) {
-			return new StructType(typename);
+			return new StructType(target, typename);
 		}
 
 		// Check the primitives.
 		if (typename.equals("char")) {
-			return new CharType(typename);
+			return new CharType(target, typename);
 		} else if (typename.equals("wchar_t")) {
-			return new WCharType(typename);
+			return new WCharType(target, typename);
 		} else if (typename.equals("short")) {
-			return new ShortType(typename);
+			return new ShortType(target, typename);
 		} else if (typename.equals("int")) {
-			return new IntType(typename);
+			return new IntType(target, typename);
 		} else if (typename.equals("long")) {
-			return new LongType(typename);
+			return new LongType(target, typename);
 		} else if (typename.equals("unsigned")) {
-			return new IntType(typename, true);
+			return new IntType(target, typename, true);
 		} else if (typename.equals("signed")) {
-			return new IntType(typename);
+			return new IntType(target, typename);
 		} else if (typename.equals("bool")) {
-			return new BoolType(typename);
+			return new BoolType(target, typename);
 		} else if (typename.equals("_Bool")) {
-			return new BoolType(typename);
+			return new BoolType(target, typename);
 		} else if (typename.equals("float")) {
-			return new FloatType(typename);
+			return new FloatType(target, typename);
 		} else if (typename.equals("double")) {
-			return new DoubleType(typename);
+			return new DoubleType(target, typename);
 		} else if (typename.equals("void")) {
-			return new VoidType(typename);
+			return new VoidType(target, typename);
 		}
 
 		StringTokenizer st = new StringTokenizer(typename);
@@ -289,19 +290,19 @@
 			boolean isImaginery = (first.equals("_Imaginary") || second.equals("_Imaginary"));
 
 			if (isChar && (isSigned || isUnsigned)) {
-				return new CharType(typename, isUnsigned);
+				return new CharType(target, typename, isUnsigned);
 			} else if (isShort && (isSigned || isUnsigned)) {
-				return new ShortType(typename, isUnsigned);
+				return new ShortType(target, typename, isUnsigned);
 			} else if (isInt && (isSigned || isUnsigned)) {
-				return new IntType(typename, isUnsigned);
+				return new IntType(target, typename, isUnsigned);
 			} else if (isLong && (isInt || isSigned || isUnsigned)) {
-				return new LongType(typename, isUnsigned);
+				return new LongType(target, typename, isUnsigned);
 			} else if (isLongLong) {
-				return new LongLongType(typename);
+				return new LongLongType(target, typename);
 			} else if (isDouble && (isLong || isComplex || isImaginery)) {
-				return new DoubleType(typename, isComplex, isImaginery, isLong);
+				return new DoubleType(target, typename, isComplex, isImaginery, isLong);
 			} else if (isFloat && (isComplex || isImaginery)) {
-				return new FloatType(typename, isComplex, isImaginery);
+				return new FloatType(target, typename, isComplex, isImaginery);
 			}
 		} else if (count == 3) {
 			// ISOC allows permutation. replace short by: long or short
@@ -329,13 +330,13 @@
 
 
 			if (isShort && isInt && (isSigned || unSigned)) {
-				return new ShortType(typename, unSigned);
+				return new ShortType(target, typename, unSigned);
 			} else if (isLong && isInt && (isSigned || unSigned)) {
-				return new LongType(typename, unSigned);
+				return new LongType(target, typename, unSigned);
 			} else if (isLongLong && (isSigned || unSigned)) {
-				return new LongLongType(typename, unSigned);
+				return new LongLongType(target, typename, unSigned);
 			} else if (isDouble && isLong && (isComplex || isImaginery)) {
-				return new DoubleType(typename, isComplex, isImaginery, isLong);
+				return new DoubleType(target, typename, isComplex, isImaginery, isLong);
 			}
 		} else if (count == 4) {
 			// ISOC allows permutation:
@@ -355,7 +356,7 @@
 				|| (third.equals("long") && fourth.equals("long"));
 
 			if (isLongLong && isInt && (isSigned || unSigned)) {
-				return new LongLongType(typename, unSigned);
+				return new LongLongType(target, typename, unSigned);
 			}
 		}
 		throw new CDIException("Unknown type");
Index: src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java,v
retrieving revision 1.32
diff -u -r1.32 VariableManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java	5 Apr 2003 02:37:48 -0000	1.32
+++ src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java	23 May 2003 15:48:40 -0000
@@ -115,6 +115,48 @@
 	}
 
 	/**
+	 * Check the type
+	 */
+	public void checkType(String type) throws CDIException {
+		try {
+				MISession mi = ((Session)getSession()).getMISession();
+				CommandFactory factory = mi.getCommandFactory();
+				MIPType ptype = factory.createMIPType(type);
+				mi.postCommand(ptype);
+				MIPTypeInfo info = ptype.getMIPtypeInfo();
+				if (info == null) {
+						throw new CDIException("No answer");
+				}
+		} catch (MIException e) {
+				throw new MI2CDIException(e);
+		}
+	}
+
+	public String createStringEncoding(VariableObject varObj) {
+		StringBuffer buffer = new StringBuffer();
+		if (varObj.length > 0) {
+			buffer.append("*(");
+			buffer.append('(');
+			if (varObj.type != null && varObj.type.length() > 0) {
+				buffer.append('(').append(varObj.type).append(')');
+			}
+			buffer.append(varObj.getName());
+			buffer.append(')');
+			if (varObj.index != 0) {
+					buffer.append('+').append(varObj.index);
+			}
+			buffer.append(')');
+			buffer.append('@').append(varObj.length - varObj.index);
+		} else if (varObj.type != null && varObj.type.length() > 0) {
+			buffer.append('(').append(varObj.type).append(')');
+			buffer.append('(').append(varObj.getName()).append(')');
+		} else {
+			buffer.append(varObj.getName());
+		}
+		return buffer.toString();
+	}
+
+	/**
 	 * Tell gdb to remove the underlying var-object also.
 	 */
 	void removeMIVar(MIVar miVar) throws CDIException {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java,v
retrieving revision 1.9
diff -u -r1.9 Variable.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java	23 May 2003 05:13:32 -0000	1.9
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Variable.java	23 May 2003 15:48:40 -0000
@@ -169,9 +169,11 @@
 				//value = new FunctionValue(this);
 				value = new Value(this);
 			} else if (t instanceof ICDIPointerType) {
+				((ICDIPointerType)t).getComponentType();
 				//value = new PointerValue(this);
 				value = new Value(this);
 			} else if (t instanceof ICDIArrayType) {
+				((ICDIArrayType)t).getComponentType();
 				//value = new ArrayValue(this);
 				value = new Value(this);
 			} else if (t instanceof ICDIStructType) {
@@ -287,9 +289,9 @@
 			SourceManager sourceMgr = (SourceManager)session.getSourceManager();
 			String typename = getTypeName();
 			try {
-				type = sourceMgr.getType(typename);
+				type = sourceMgr.getType(getTarget(), typename);
 			} catch (CDIException e) {
-				type = new IncompleteType(typename);
+				type = new IncompleteType(getTarget(), typename);
 //				// Try after ptype.
 //				String ptype = sourceMgr.getDetailTypeName(typename);
 //				try {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java,v
retrieving revision 1.3
diff -u -r1.3 VariableObject.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java	7 Feb 2003 03:49:19 -0000	1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/VariableObject.java	23 May 2003 15:48:40 -0000
@@ -13,6 +13,11 @@
  */
 public class VariableObject extends CObject implements ICDIVariableObject {
 
+	// Casting info.
+	public String type;
+	public int index;
+	public int length;
+
 	String name;
 	int position;
 	ICDIStackFrame frame;
@@ -30,6 +35,9 @@
 		frame = stack;
 		position = pos;
 		stackdepth = depth;
+		type = new String();
+		index = 0;
+		length = 0;
 	}
 
 	public ICDITarget getTarget() {
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/AggregateType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/AggregateType.java,v
retrieving revision 1.1
diff -u -r1.1 AggregateType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/AggregateType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/AggregateType.java	23 May 2003 15:48:40 -0000
@@ -5,13 +5,14 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIAggregateType;
 
 /**
  */
 public abstract class AggregateType extends Type implements ICDIAggregateType {
 
-	public AggregateType(String typename) {
-		super(typename);
+	public AggregateType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ArrayType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ArrayType.java,v
retrieving revision 1.1
diff -u -r1.1 ArrayType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ArrayType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ArrayType.java	23 May 2003 15:48:40 -0000
@@ -5,32 +5,66 @@
 
 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.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayType;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
+import org.eclipse.cdt.debug.mi.core.cdi.Session;
+import org.eclipse.cdt.debug.mi.core.cdi.SourceManager;
 
 /**
  */
 public class ArrayType extends DerivedType implements ICDIArrayType {
 
+	int dimension;
+
 	/**
 	 * @param typename
 	 */
-	public ArrayType(String typename) {
-		super(typename);
+	public ArrayType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.debug.core.cdi.model.ICDIArrayType#getComponentType()
 	 */
 	public ICDIType getComponentType() {
-		return null;
+		if (derivedType == null) {
+			String orig = getTypeName();
+			String name = orig;
+			int lbracket = orig.lastIndexOf('[');
+			int rbracket = orig.lastIndexOf(']');
+			if (lbracket != -1 && rbracket != -1 && (rbracket > lbracket)) {
+				String dim = name.substring(lbracket + 1, rbracket).trim();
+				try {
+					dimension = Integer.parseInt(dim);
+					name = orig.substring(0, lbracket).trim();
+					Session session = (Session)(getTarget().getSession());
+					SourceManager sourceMgr = (SourceManager)session.getSourceManager();
+					derivedType = sourceMgr.getType(getTarget(), name);
+				} catch (CDIException e) {
+//					// Try after ptype.
+//					String ptype = sourceMgr.getDetailTypeName(type);
+//					try {
+//						type = sourceMgr.getType(ptype);
+//					} catch (CDIException ex) {
+//						type = new IncompleteType(typename);
+//					}
+				} catch (NumberFormatException e) {
+				}
+			}
+			if (derivedType == null) {
+				derivedType = new IncompleteType(getTarget(), name);
+			}
+		}
+		return derivedType;
 	}
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.debug.core.cdi.model.type.ICDIArrayType#getDimension()
 	 */
 	public int getDimension() {
-		return 0;
+		return dimension;
 	}
 
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/BoolType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/BoolType.java,v
retrieving revision 1.1
diff -u -r1.1 BoolType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/BoolType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/BoolType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIBoolType;
 
 /**
@@ -14,12 +15,12 @@
 	/**
 	 * @param typename
 	 */
-	public BoolType(String typename) {
-		this(typename, false);
+	public BoolType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public BoolType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public BoolType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/CharType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/CharType.java,v
retrieving revision 1.1
diff -u -r1.1 CharType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/CharType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/CharType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDICharType;
 
 /**
@@ -14,11 +15,11 @@
 	/**
 	 * @param typename
 	 */
-	public CharType(String typename) {
-		this(typename, false);
+	public CharType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public CharType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public CharType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DerivedType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DerivedType.java,v
retrieving revision 1.1
diff -u -r1.1 DerivedType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DerivedType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DerivedType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIDerivedType;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
 
@@ -12,15 +13,10 @@
  */
 public abstract class DerivedType extends Type implements ICDIDerivedType {
 
-	public DerivedType(String typename) {
-		super(typename);
-	}
+	ICDIType derivedType;
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.debug.core.cdi.model.type.ICDIDerivedType#getComponentType()
-	 */
-	public ICDIType getComponentType() {
-		return null;
+	public DerivedType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
 
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DoubleType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DoubleType.java,v
retrieving revision 1.1
diff -u -r1.1 DoubleType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DoubleType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/DoubleType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIDoubleType;
 
 /**
@@ -14,11 +15,11 @@
 	/**
 	 * @param typename
 	 */
-	public DoubleType(String typename) {
-		this(typename, false, false, false);
+	public DoubleType(ICDITarget target, String typename) {
+		this(target, typename, false, false, false);
 	}
 
-	public DoubleType(String typename, boolean isComplex, boolean isImg, boolean isLong) {
-		super(typename, isComplex, isImg, isLong);
+	public DoubleType(ICDITarget target, String typename, boolean isComplex, boolean isImg, boolean isLong) {
+		super(target, typename, isComplex, isImg, isLong);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/EnumType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/EnumType.java,v
retrieving revision 1.1
diff -u -r1.1 EnumType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/EnumType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/EnumType.java	23 May 2003 15:48:40 -0000
@@ -6,6 +6,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIEnumType;
 
 /**
@@ -15,11 +16,11 @@
 	/**
 	 * @param typename
 	 */
-	public EnumType(String typename) {
-		this(typename, false);
+	public EnumType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public EnumType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public EnumType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatType.java,v
retrieving revision 1.1
diff -u -r1.1 FloatType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIFloatType;
 
 /**
@@ -14,11 +15,11 @@
 	/**
 	 * @param typename
 	 */
-	public FloatType(String typename) {
-		this(typename, false, false);
+	public FloatType(ICDITarget target, String typename) {
+		this(target, typename, false, false);
 	}
 
-	public FloatType(String typename, boolean isComplex, boolean isImg) {
-		super(typename, isComplex, isImg, false);
+	public FloatType(ICDITarget target, String typename, boolean isComplex, boolean isImg) {
+		super(target, typename, isComplex, isImg, false);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatingPointType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatingPointType.java,v
retrieving revision 1.1
diff -u -r1.1 FloatingPointType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatingPointType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FloatingPointType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIFloatingPointType;
 
 /**
@@ -15,8 +16,8 @@
 	boolean imaginary;
 	boolean islong;
 
-	public FloatingPointType(String typename, boolean comp, boolean img, boolean l) {
-		super(typename);
+	public FloatingPointType(ICDITarget target, String typename, boolean comp, boolean img, boolean l) {
+		super(target, typename);
 		complex = comp;
 		imaginary = img;
 		islong = l;
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FunctionType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FunctionType.java,v
retrieving revision 1.1
diff -u -r1.1 FunctionType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FunctionType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/FunctionType.java	23 May 2003 15:48:40 -0000
@@ -5,13 +5,51 @@
 
 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.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIFunctionType;
+import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
+import org.eclipse.cdt.debug.mi.core.cdi.Session;
+import org.eclipse.cdt.debug.mi.core.cdi.SourceManager;
 
 /**
  */
 public class FunctionType extends DerivedType implements ICDIFunctionType {
 
-	public FunctionType(String typename) {
-		super(typename);
+	public FunctionType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.debug.core.cdi.model.type.ICDIDerivedType#getComponentType()
+	 */
+	public ICDIType getComponentType() {
+		if (derivedType != null) {
+			String orig = getTypeName();
+			String name = orig;
+			int lparen = orig.lastIndexOf('(');
+			int rparen = orig.lastIndexOf(')');
+			if (lparen != -1 && rparen != -1 && (rparen > lparen)) {
+				String dim = name.substring(lparen + 1, rparen).trim();
+				try {
+					name = orig.substring(0, lparen).trim();
+					Session session = (Session)(getTarget().getSession());
+					SourceManager sourceMgr = (SourceManager)session.getSourceManager();
+					derivedType = sourceMgr.getType(getTarget(), name);
+				} catch (CDIException e) {
+//					// Try after ptype.
+//					String ptype = sourceMgr.getDetailTypeName(type);
+//					try {
+//						type = sourceMgr.getType(ptype);
+//					} catch (CDIException ex) {
+//						type = new IncompleteType(typename);
+//					}
+				}
+			}
+			if (derivedType == null) {
+				derivedType = new IncompleteType(getTarget(), name);
+			}
+		}
+		return derivedType; 
+	}
+
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IncompleteType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IncompleteType.java,v
retrieving revision 1.1
diff -u -r1.1 IncompleteType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IncompleteType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IncompleteType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,8 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
+
 
 /**
  */
@@ -13,8 +15,8 @@
 	/**
 	 * @param name
 	 */
-	public IncompleteType(String name) {
-		super(name);
+	public IncompleteType(ICDITarget target, String name) {
+		super(target, name);
 	}
 
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntType.java,v
retrieving revision 1.1
diff -u -r1.1 IntType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIIntType;
 
 /**
@@ -14,12 +15,12 @@
 	/**
 	 * @param typename
 	 */
-	public IntType(String typename) {
-		this(typename, false);
+	public IntType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public IntType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public IntType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntegralType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntegralType.java,v
retrieving revision 1.1
diff -u -r1.1 IntegralType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntegralType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/IntegralType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIIntegralType;
 
 /**
@@ -13,8 +14,8 @@
 
 	boolean unSigned;
 
-	public IntegralType(String typename, boolean usigned) {
-		super(typename);
+	public IntegralType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename);
 		unSigned = usigned;
 	}
 	
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongLongType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongLongType.java,v
retrieving revision 1.1
diff -u -r1.1 LongLongType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongLongType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongLongType.java	23 May 2003 15:48:40 -0000
@@ -6,6 +6,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDILongLongType;
 
 /**
@@ -15,11 +16,11 @@
 	/**
 	 * @param typename
 	 */
-	public LongLongType(String typename) {
-		this(typename, false);
+	public LongLongType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public LongLongType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public LongLongType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongType.java,v
retrieving revision 1.1
diff -u -r1.1 LongType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/LongType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDILongType;
 
 /**
@@ -14,11 +15,11 @@
 	/**
 	 * @param typename
 	 */
-	public LongType(String typename) {
-		this(typename, false);
+	public LongType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public LongType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public LongType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/PointerType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/PointerType.java,v
retrieving revision 1.1
diff -u -r1.1 PointerType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/PointerType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/PointerType.java	23 May 2003 15:48:40 -0000
@@ -5,13 +5,52 @@
 
 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.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIPointerType;
+import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
+import org.eclipse.cdt.debug.mi.core.cdi.Session;
+import org.eclipse.cdt.debug.mi.core.cdi.SourceManager;
 
 /**
  */
 public class PointerType extends DerivedType implements ICDIPointerType {
 
-	public PointerType(String typename) {
-		super(typename);
+	public PointerType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
+
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.debug.core.cdi.model.type.ICDIDerivedType#getComponentType()
+	 */
+	public ICDIType getComponentType() {
+		if (derivedType == null) {
+			String orig = getTypeName();
+			String name = orig;
+			int star = orig.lastIndexOf('*');
+			// remove last '*'
+			if (star != -1) { 
+				name = orig.substring(0, star).trim();
+				Session session = (Session)(getTarget().getSession());
+				SourceManager sourceMgr = (SourceManager)session.getSourceManager();
+				try {
+					derivedType = sourceMgr.getType(getTarget(), name);
+				} catch (CDIException e) {
+//					// Try after ptype.
+//					String ptype = sourceMgr.getDetailTypeName(type);
+//					try {
+//						type = sourceMgr.getType(ptype);
+//					} catch (CDIException ex) {
+//						type = new IncompleteType(typename);
+//					}
+				}
+			}
+			if (derivedType == null) {
+				derivedType = new IncompleteType(getTarget(), name);
+			}
+		}
+		return derivedType;
+	}
+
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ReferenceType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ReferenceType.java,v
retrieving revision 1.1
diff -u -r1.1 ReferenceType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ReferenceType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ReferenceType.java	23 May 2003 15:48:40 -0000
@@ -5,7 +5,12 @@
 
 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.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIReferenceType;
+import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
+import org.eclipse.cdt.debug.mi.core.cdi.Session;
+import org.eclipse.cdt.debug.mi.core.cdi.SourceManager;
 
 /**
  */
@@ -14,8 +19,40 @@
 	/**
 	 * @param name
 	 */
-	public ReferenceType(String name) {
-		super(name);
+	public ReferenceType(ICDITarget target, String name) {
+		super(target, name);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.debug.core.cdi.model.type.ICDIDerivedType#getComponentType()
+	 */
+	public ICDIType getComponentType() {
+		if (derivedType == null) {
+			String orig = getTypeName();
+			String name = orig;
+			int amp = orig.lastIndexOf('&');
+			// remove last '*'
+			if (amp != -1) { 
+				name = orig.substring(0, amp).trim();
+				Session session = (Session)(getTarget().getSession());
+				SourceManager sourceMgr = (SourceManager)session.getSourceManager();
+				try {
+					derivedType = sourceMgr.getType(getTarget(), name);
+				} catch (CDIException e) {
+//					// Try after ptype.
+//					String ptype = sourceMgr.getDetailTypeName(type);
+//					try {
+//						type = sourceMgr.getType(ptype);
+//					} catch (CDIException ex) {
+//						type = new IncompleteType(typename);
+//					}
+				}
+			}
+			if (derivedType == null) {
+				derivedType = new IncompleteType(getTarget(), name);
+			}
+		}
+		return derivedType;
 	}
 
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ShortType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ShortType.java,v
retrieving revision 1.1
diff -u -r1.1 ShortType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ShortType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/ShortType.java	23 May 2003 15:48:40 -0000
@@ -5,6 +5,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIShortType;
 
 /**
@@ -14,11 +15,11 @@
 	/**
 	 * @param typename
 	 */
-	public ShortType(String typename) {
-		this(typename, false);
+	public ShortType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public ShortType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public ShortType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/StructType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/StructType.java,v
retrieving revision 1.1
diff -u -r1.1 StructType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/StructType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/StructType.java	23 May 2003 15:48:40 -0000
@@ -6,6 +6,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIStructType;
 
 /**
@@ -15,8 +16,8 @@
 	/**
 	 * @param typename
 	 */
-	public StructType(String typename) {
-		super(typename);
+	public StructType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
 
 
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/Type.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/Type.java,v
retrieving revision 1.1
diff -u -r1.1 Type.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/Type.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/Type.java	23 May 2003 15:48:40 -0000
@@ -6,16 +6,19 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIType;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
 
 /**
  */
-public abstract class Type implements ICDIType {
+public abstract class Type extends CObject implements ICDIType {
 
 	String typename;
 	String detailName;
 
-	public Type(String name) {
+	public Type(ICDITarget target, String name) {
+		super(target);
 		typename = name;
 	}
 
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/VoidType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/VoidType.java,v
retrieving revision 1.1
diff -u -r1.1 VoidType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/VoidType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/VoidType.java	23 May 2003 15:48:40 -0000
@@ -5,13 +5,14 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIVoidType;
 
 /**
  */
 public class VoidType extends Type implements ICDIVoidType {
 
-	public VoidType(String typename) {
-		super(typename);
+	public VoidType(ICDITarget target, String typename) {
+		super(target, typename);
 	}
 }
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/type/WCharType.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/type/WCharType.java,v
retrieving revision 1.1
diff -u -r1.1 WCharType.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/type/WCharType.java	23 May 2003 05:13:17 -0000	1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/type/WCharType.java	23 May 2003 15:48:40 -0000
@@ -7,6 +7,7 @@
 
 package org.eclipse.cdt.debug.mi.core.cdi.model.type;
 
+import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
 import org.eclipse.cdt.debug.core.cdi.model.type.ICDIWCharType;
 
 /**
@@ -16,11 +17,11 @@
 	/**
 	 * @param typename
 	 */
-	public WCharType(String typename) {
-		this(typename, false);
+	public WCharType(ICDITarget target, String typename) {
+		this(target, typename, false);
 	}
 
-	public WCharType(String typename, boolean usigned) {
-		super(typename, usigned);
+	public WCharType(ICDITarget target, String typename, boolean usigned) {
+		super(target, typename, usigned);
 	}
 }



Back to the top