public string DumpType(TargetType type) { StringBuilder sb = new StringBuilder(); sb.Append(type.Name); sb.Append(":"); sb.Append(type.HasFixedSize); sb.Append(":"); sb.Append(type.Size); sb.Append(":"); sb.Append(type.Kind); sb.Append(" "); switch (type.Kind) { case TargetObjectKind.Fundamental: sb.Append(((TargetFundamentalType)type).FundamentalKind); break; case TargetObjectKind.Pointer: { TargetPointerType ptype = (TargetPointerType)type; sb.Append(ptype.IsTypesafe); sb.Append(":"); sb.Append(ptype.HasStaticType); if (ptype.HasStaticType) { sb.Append(":"); sb.Append(ptype.StaticType.Name); } break; } case TargetObjectKind.Array: sb.Append(((TargetArrayType)type).ElementType.Name); break; #if FIXME case TargetObjectKind.Alias: { TargetTypeAlias alias = (TargetTypeAlias)type; sb.Append(alias.TargetName); if (alias.TargetType != null) { sb.Append(":"); sb.Append(alias.TargetType.Name); } break; } #endif } return(sb.ToString()); }
protected string FormatType(Thread target, string prefix, TargetType type, Hashtable hash) { string retval; if (hash == null) { hash = new Hashtable(); } if (hash.Contains(type)) { return(type.Name); } else { hash.Add(type, true); } switch (type.Kind) { case TargetObjectKind.Array: { TargetArrayType atype = (TargetArrayType)type; retval = atype.Name; break; } case TargetObjectKind.Enum: { StringBuilder sb = new StringBuilder(); TargetEnumType etype = type as TargetEnumType; sb.Append("enum "); if (etype.Name != null) { sb.Append(etype.Name); } sb.Append("\n" + prefix + "{\n"); foreach (TargetEnumInfo field in etype.Members) { sb.Append(FormatEnumMember(target, prefix, field, false, hash)); if (field != etype.Members[etype.Members.Length - 1]) { sb.Append(","); } sb.Append("\n"); } sb.Append(prefix + "}"); retval = sb.ToString(); break; } case TargetObjectKind.Class: case TargetObjectKind.Struct: { StringBuilder sb = new StringBuilder(); TargetClassType ctype = (TargetClassType)type; if (type.Kind == TargetObjectKind.Struct) { sb.Append("struct "); } else { sb.Append("class "); } if (ctype.Name != null) { sb.Append(ctype.Name); sb.Append(" "); } if (ctype.HasParent) { TargetClassType parent = ctype.GetParentType(target); sb.Append(": "); sb.Append(parent.Name); } sb.Append("\n" + prefix + "{\n"); sb.Append(FormatStruct(prefix, ctype, hash)); sb.Append(prefix + "}"); retval = sb.ToString(); break; } case TargetObjectKind.Alias: { TargetTypeAlias alias = (TargetTypeAlias)type; string name; if (alias.TargetType != null) { name = FormatType(target, prefix, alias.TargetType, hash); } else { name = "<unknown type>"; } retval = String.Format("typedef {0} = {1}", alias.Name, name); break; } case TargetObjectKind.GenericInstance: { TargetGenericInstanceType gtype = (TargetGenericInstanceType)type; StringBuilder sb = new StringBuilder(); if (gtype.ContainerType.Kind == TargetObjectKind.Struct) { sb.Append("struct "); } else { sb.Append("class "); } sb.Append(String.Format("{0} = ", gtype.Name)); TargetClassType parent = gtype.ContainerType.GetParentType(target); sb.Append(String.Format("{0}", gtype.ContainerType.Name)); if (parent != null) { sb.Append(String.Format(" : {0}", parent.Name)); } sb.Append("\n" + prefix + "{\n"); sb.Append(FormatStruct(prefix, gtype.ContainerType, hash)); sb.Append(prefix + "}"); retval = sb.ToString(); break; } default: retval = type.Name; break; } hash.Remove(type); return(retval); }