Example #1
0
        public CodeFormatter VisitStructure(StructureType str)
        {
            var fmt = codeFormatter.InnerFormatter;

            fmt.Terminate();
            fmt.Indent();
            fmt.Write("{");
            fmt.Terminate();
            fmt.Indentation += fmt.TabSize;

            var structOffset = rdr.Offset;

            for (int i = 0; i < str.Fields.Count; ++i)
            {
                fmt.Indent();
                rdr.Offset = structOffset + str.Fields[i].Offset;
                str.Fields[i].DataType.Accept(this);
                fmt.Terminate(",");
            }
            rdr.Offset = structOffset + str.GetInferredSize();

            fmt.Indentation -= fmt.TabSize;
            fmt.Indent();
            fmt.Write("}");
            return(codeFormatter);
        }
Example #2
0
        public void VisitStructure(StructureType str)
        {
            var structOffset = rdr.Offset;

            for (int i = 0; i < str.Fields.Count; ++i)
            {
                rdr.Offset = structOffset + str.Fields[i].Offset;
                str.Fields[i].DataType.Accept(this);
            }
            rdr.Offset = structOffset + str.GetInferredSize();
        }
Example #3
0
 public void VisitStructure(StructureType str)
 {
     var structOffset = rdr.Offset;
     for (int i = 0; i < str.Fields.Count; ++i)
     {
         long fieldOffset = structOffset + str.Fields[i].Offset;
         WritePadBytes(fieldOffset);
         Debug.Assert(rdr.Offset == fieldOffset);
         fmt.Indent();
         str.Fields[i].DataType.Accept(this);
     }
     WritePadBytes(structOffset + str.GetInferredSize());
 }
Example #4
0
        private StructureType LargeInt()
        {
            var largeInt = new StructureType
            {
                Size   = 8,
                Fields =
                {
                    { 0x0000, PrimitiveType.Word32 },
                    { 0x0004, PrimitiveType.Word32 },
                }
            };

            Debug.Assert(largeInt.GetInferredSize() == 8);
            return(largeInt);
        }
        public Expression VisitStructure(StructureType str)
        {
            if (++depth > 20)
            {
                Debug.Print("*** recursion too deep, quitting. Determine error then remove this"); //$DEBUG
                return(expComplex);
            }
            if (enclosingPtr != null)
            {
                int strSize = str.GetInferredSize();
                if (str.Size > 0 && // We know the size of the struct, for sure.
                    (offset >= strSize && offset % strSize == 0 && index == null))
                {
                    var exp = CreateArrayAccess(str, enclosingPtr, offset / strSize, index);
                    index = null;
                    --depth;
                    return(exp);
                }
                else if (index != null && offset == 0)
                {
                    var idx = this.ScaleDownIndex(index, strSize);
                    index = null;
                    var exp = CreateArrayAccess(str, enclosingPtr, 0, idx);
                    --depth;
                    return(exp);
                }
            }
            StructureField field = str.Fields.LowerBound(this.offset);

            if (field == null)
            {
                throw new TypeInferenceException("Expected structure type {0} to have a field at offset {1} ({1:X}).", str.Name, offset);
            }

            dtComplex       = field.DataType;
            dtComplexOrig   = field.DataType.ResolveAs <DataType>();
            this.expComplex = CreateFieldAccess(str, field.DataType, expComplex, field);
            offset         -= field.Offset;
            var e = dtComplex.Accept(this);

            --depth;
            return(e);
        }
Example #6
0
 public void VisitStructure(StructureType str)
 {
     var structOffset = rdr.Offset;
     for (int i = 0; i < str.Fields.Count; ++i)
     {
         long fieldOffset = structOffset + str.Fields[i].Offset;
         WritePadBytes(fieldOffset);
         Debug.Assert(rdr.Offset == fieldOffset);
         fmt.Indent();
         str.Fields[i].DataType.Accept(this);
     }
     WritePadBytes(structOffset + str.GetInferredSize());
 }
Example #7
0
 public void VisitStructure(StructureType str)
 {
     var structOffset = rdr.Offset;
     for (int i = 0; i < str.Fields.Count; ++i)
     {
         rdr.Offset = structOffset + str.Fields[i].Offset;
         str.Fields[i].DataType.Accept(this);
     }
     rdr.Offset = structOffset + str.GetInferredSize();
 }