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 () {

Reply via email to