@@ -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