The else part handles arrays of value classes. Look for "negative series has a special meaning" in array.cpp for the place where such GCDesc is created.
GetHighestSeries() returning a value lower than GetLowestSeries() is used to mark this special case. The arrays of value classes needs *repeating* regions with gcrefs and without them. The regular GCDesc does not handle this case to make it simple and fast. -Jan This posting is provided "AS IS" with no warranties, and confers no rights. -----Original Message----- From: Discussion of the Rotor Shared Source CLI implementation [mailto:[EMAIL PROTECTED] On Behalf Of Jorge Sanchez Sent: Friday, January 09, 2004 3:14 AM To: [EMAIL PROTECTED] Subject: [DOTNET-ROTOR] About go_trought_object macro Hello, when looking through the macro go_through_object, i've come across with a problem i'm not able to solve. I have successfully understood the first branch of the if statement (if cur >= last). This branch (I.M.O.) traces all the CGCDescSeries contained prior to the MethodTable and follow all object pointers located within the range defined by these series. As you know a serie is defined by its starting point and its size. The problem arises when examing the else statement. I don't know what the field val_serie is used for. And I also can't imagine a case when GetHighestSeries() returns a value lower than GetLowestSeries(). It would be of great help if anyone could explain to me when this happens and what is that field used for. Thank you very much in advance Jorge Sanchez -- THE CODE -- (if statement omitted) else \ { \ SSIZE_T cnt = (SSIZE_T)map->GetNumSeries(); \ BYTE** parm = (BYTE**)((o) + cur->startoffset); \ while ((BYTE*)parm < ((o)+(size)-plug_skew)) \ { \ for (SSIZE_T __i = 0; __i > cnt; __i--) \ { \ HALF_SIZE_T skip = cur->val_serie[__i].skip; \ HALF_SIZE_T nptrs = cur->val_serie[__i].nptrs; \ BYTE** ppstop = parm + nptrs; \ do \ { \ {exp} \ parm++; \ } while (parm < ppstop); \ parm = (BYTE**)((BYTE*)parm + skip); \ } \ } \ } =================================== This list is hosted by DevelopMentor(r) http://www.develop.com NEW! ASP.NET courses you may be interested in: 2 Days of ASP.NET, 29 Sept 2003, in Redmond http://www.develop.com/courses/2daspdotnet Guerrilla ASP.NET, 13 Oct 2003, in Boston http://www.develop.com/courses/gaspdotnet View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentorŪ http://www.develop.com NEW! ASP.NET courses you may be interested in: 2 Days of ASP.NET, 29 Sept 2003, in Redmond http://www.develop.com/courses/2daspdotnet Guerrilla ASP.NET, 13 Oct 2003, in Boston http://www.develop.com/courses/gaspdotnet View archives and manage your subscription(s) at http://discuss.develop.com