Esempio n. 1
0
 public bool Equals(CompoundMember other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     return(string.Equals(_name, other._name) &&
            MemberType.Equals(other.MemberType) &&
            TypedValue.Equals(other.TypedValue));
 }
Esempio n. 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);
        }