Skip to content

Commit 5e0655a

Browse files
committed
Implement user-defined Box loaders.
1 parent 7e1d34f commit 5e0655a

File tree

6 files changed

+589
-15
lines changed

6 files changed

+589
-15
lines changed

Visual_Studio_2017/GraphicalDebugging/ExpressionLoader.cs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -849,21 +849,35 @@ public Loader Create(Loaders loaders, Debugger debugger, string name, string typ
849849
return null;
850850

851851
string m_min_corner = name + ".m_min_corner";
852+
string m_max_corner = name + ".m_max_corner";
853+
852854
string pointType = tparams[0];
853855
PointLoader pointLoader = loaders.FindByType(ExpressionLoader.Kind.Point,
854856
m_min_corner,
855857
pointType) as PointLoader;
856858
if (pointLoader == null)
857859
return null;
858860

859-
return new BGBox(pointLoader, pointType);
861+
int sizeOf = ExpressionParser.GetTypeSizeof(debugger, type);
862+
if (ExpressionParser.IsInvalidSize(sizeOf))
863+
return null;
864+
865+
long minDiff = ExpressionParser.GetAddressDifference(debugger, name, m_min_corner);
866+
long maxDiff = ExpressionParser.GetAddressDifference(debugger, name, m_max_corner);
867+
if (ExpressionParser.IsInvalidOffset(sizeOf, minDiff, maxDiff))
868+
return null;
869+
870+
return new BGBox(pointLoader, pointType, sizeOf, minDiff, maxDiff);
860871
}
861872
}
862873

863-
private BGBox(PointLoader pointLoader, string pointType)
874+
private BGBox(PointLoader pointLoader, string pointType, int sizeOf, long minDiff, long maxDiff)
864875
{
865876
this.pointLoader = pointLoader;
866877
this.pointType = pointType;
878+
this.sizeOf = sizeOf;
879+
this.minDiff = minDiff;
880+
this.maxDiff = maxDiff;
867881
}
868882

869883
public override void Load(Loaders loaders, MemoryReader mreader, Debugger debugger,
@@ -898,26 +912,18 @@ public override MemoryReader.Converter<double> GetMemoryConverter(MemoryReader m
898912
string m_min_corner = name + ".m_min_corner";
899913
string m_max_corner = name + ".m_max_corner";
900914

901-
// TODO: All of the values here could be calculated once in Create
902-
903915
MemoryReader.Converter<double> pointConverter = pointLoader.GetMemoryConverter(mreader, debugger, m_min_corner, pointType);
904916

905-
int size = (new ExpressionParser(debugger)).GetValueSizeof(name);
906-
if (ExpressionParser.IsInvalidSize(size))
907-
return null;
908-
909-
long minDiff = ExpressionParser.GetAddressDifference(debugger, name, m_min_corner);
910-
long maxDiff = ExpressionParser.GetAddressDifference(debugger, name, m_max_corner);
911-
if (ExpressionParser.IsInvalidOffset(size, minDiff, maxDiff))
912-
return null;
913-
914-
return new MemoryReader.StructConverter<double>(size,
917+
return new MemoryReader.StructConverter<double>(sizeOf,
915918
new MemoryReader.Member<double>(pointConverter, (int)minDiff),
916919
new MemoryReader.Member<double>(pointConverter, (int)maxDiff));
917920
}
918921

919922
PointLoader pointLoader;
920923
string pointType;
924+
long minDiff;
925+
long maxDiff;
926+
int sizeOf;
921927
}
922928

923929
class BGSegment : SegmentLoader

0 commit comments

Comments
 (0)