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); }
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(); }
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()); }
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); }
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()); }
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(); }