public override string ToString() { switch (MemberType.Type) { case SymbolType.Bitfield: return(MemberType.AsCode(_name) + $" : {MemberType.Size}; // offset={TypedValue.Value / 8}.{TypedValue.Value % 8}"); case SymbolType.StructMember: case SymbolType.UnionMember: return(MemberType.AsCode(_name) + $"; // size={MemberType.Size}, offset={TypedValue.Value}"); default: throw new Exception($"Unexpected {nameof(SymbolType)} {MemberType.Type}"); } }
private void AddTypedef(string name, TaggedSymbol taggedSymbol) { if (name.IsFake()) { throw new Exception($"Found fake typedef name {name}"); } if (taggedSymbol.IsFake && ComplexTypes.ContainsKey(taggedSymbol.Tag)) { // found a typedef for a fake symbol, e.g. typedef struct .123fake {} FOO ComplexTypes[taggedSymbol.Tag].Typedefs.Add(name, taggedSymbol); } if (_typedefs.TryGetValue(name, out var already)) { if (taggedSymbol.Equals(already)) { return; } var writer = new IndentedTextWriter(Console.Out); writer.WriteLine($"WARNING: Non-uniform definitions of typedef {name}"); writer.WriteLine("This is the definition already present:"); writer.Indent++; writer.WriteLine(already.ToString()); writer.WriteLine(already.AsCode(name)); ComplexTypes[already.Tag].Dump(writer, false); writer.Indent--; writer.WriteLine("This is the new definition:"); writer.Indent++; writer.WriteLine(taggedSymbol.ToString()); writer.WriteLine(taggedSymbol.AsCode(name)); ComplexTypes[taggedSymbol.Tag].Dump(writer, false); writer.Indent--; throw new Exception($"Non-uniform definition of typedef {name}"); } _typedefs.Add(name, taggedSymbol); }
public override string ToString() { var storage = _taggedSymbol.Type == SymbolType.Static ? "static" : "extern"; return($"{storage} {_taggedSymbol.AsCode(_name)}; // offset 0x{_offset:x8}"); }