calling_conventions branch

Whiteknight on 2008-11-14T22:20:32

I've got "update my use.perl journal" set up as a reoccuring task in hiveminder, so hopefully I'll post here a little bit more regularly. I <3 Hiveminder.

Anyway, I've been working sporadically on the calling_conventions branch of Parrot. The goal of the branch is to unify some of the various calling-convention functions in use by Parrot, such as Parrot_PCCINVOKE and Parrot_pcc_invoke_sub_from_sig_object. With a little bit of help and guidance from Allison++ it's getting close to a point where I will have finished one of the major tasks on the list and will be merging back into trunk. We're not nearly done with all the tasks that need to be performed here, but it's a start and I don't want this branch to be too long-lived.

The one hangup right now is a GC-related error in marking a CPointer PMC. This is very similar to a problem that chromatic++ fixed a while back, but isn't quite the same. The problem is where a CPointer contains a pointer to a pointer in a higher call frame. When that call frame becomes invalidated, the pointer to the pointer in that frame becomes invalid too. What Allison suggests we need, and I think I agree with now, is that we need to be more aggressive in marking CPointers as being "dead" as soon as we're done using them: That way we aren't keeping around pointers to pointers any longer then we need to (and we aren't GC-ing a CPointer when it shouldn't be counted as alive anymore).

I'm going to try a few things tonight to get this issue resolved. As soon as I do and all tests pass, I'm going to merge it into trunk for everybody to enjoy.