Hello, Andy Wingo <wi...@pobox.com> writes:
> - GC_REGISTER_DISPLACEMENT (2*sizeof(scm_t_bits)); /* for the self data > pointer */ > - GC_REGISTER_DISPLACEMENT (2*sizeof(scm_t_bits) > - + scm_tc3_struct); /* for the vtable data > pointer */ > + /* The first word of a struct is equal to `SCM_STRUCT_DATA (vtable) + > + scm_tc3_struct', and `SCM_STRUCT_DATA (vtable)' is 2 words after > VTABLE by > + default. */ > + GC_REGISTER_DISPLACEMENT (2 * sizeof (scm_t_bits) + scm_tc3_struct); > > I'm pretty sure the first case is still needed, for instance > reallocation. It is, as the comment indicates, "for the self data > pointer" -- the second word of the object, which normally points to the > third word of the object, but for reallocated instances points to the > third word of *another* object. As an excuse, the comment was a bit too terse for me to understand, but I get your point now. However, it’s still unclear to me how an ‘s’ field can point to something else than “self”. > See my article on redefining classes for more info. By ‘self’ here, did you mean what’s known as ‘data’ on the diagrams at <http://wingolog.org/archives/2009/11/09/class-redefinition-in-guile>? Thanks! Ludo’. PS: It would be really cool if this blog post were part of the “Data Representation” node of the manual. :-)