Beispiel #1
0
        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}");
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        public override string ToString()
        {
            var storage = _taggedSymbol.Type == SymbolType.Static ? "static" : "extern";

            return($"{storage} {_taggedSymbol.AsCode(_name)}; // offset 0x{_offset:x8}");
        }