Version 6 (modified by cotto, 6 years ago)



The PMC Union is being deprecated, which means that any instances of PMC_int_val, etc need to disappear. This is a big job with several gotchas.

What Needs to Happen

Note: An alternate migration plan is needed. Watch this space for updates.

Allison  explained in depth how to convert code.


Because the PMC union struct is part of a PMC's internals, its use is affected by PMC inheritance. The following image shows the dependencies between all *core* PMCs. This does not include PMCs from HLLs. Because of these dependencies, all PMCs in a given dependency tree will have to be updated simultaneously. This only means that all instances of e.g. PMC_struct_val will have to be updated, not all instances of all PMC_x_val.


*Array PMCs need to have their mark VTABLE methods updated to actually mark the elements inside them. src/gc/mark_sweep.c:Parrot_gc_trace_pmc_data() attempts to do this by mucking around with PMC_data_typed(). Once the mark VTABLE methods are updated to do The Right Thing, Parrot_gc_trace_pmc_data() can be deprecated along with the PObj_data_is_PMC_array_FLAG. All arrays should instead be marked with PObj_custom_mark_FLAG to call the proper mark VTABLE methods.

* src/gc/mark_sweep.c also uses PMC_struct_val in two places. This needs to be investigated and the data stored elsewhere.