I'm confused by nci.pmc's mark() routine. It calls pobject_lives() on the ->cache.struct_val pointer. But in set_string_keyed(), that seems to be set to a pointer to a function, which is definitely not a PObj*. The ->data field, on the other hand, appears to be a PObj*. And changing mark() to mark it instead of struct_val makes the imcc tests go from failing to passing on my machine. But I don't really know what's going on here. Is the below patch correct?
Index: classes/nci.pmc =================================================================== RCS file: /cvs/public/parrot/classes/nci.pmc,v retrieving revision 1.9 diff -u -r1.9 nci.pmc --- classes/nci.pmc 21 Jan 2003 23:15:04 -0000 1.9 +++ classes/nci.pmc 23 Jan 2003 04:07:04 -0000 @@ -28,9 +28,8 @@ } void mark () { - PMC *f = SELF->cache.struct_val; - if (f) - pobject_lives(INTERP, (PObj *)f); + if (SELF->data) + pobject_lives(INTERP, (PObj *)SELF->data); } STRING* name () {