The idea I had was to:
- Clone the subrefs
- Remove the ops which create the callframe and set @_ to the params
passed in (except for the first one).
- Add in an op for a label at the end of the tree corresponding to
SUB_N: (where N is the sub #.
- Replace the ops for "return (...)" with ops for "@_ = (...);goto
SUB_N;" (except for the last one).
- String the converted subrefs together.
I'm figuring that the lexical pads don't need to be messed with
because the ops should be referring to them by memory address. And, I
do want the addresses to remain the same when cloning. The reason
being:
{
my $counter;
sub inc_counter { $counter++ }
}
If I chain inc_counter(), I want it to keep incrementing $counter.
Maybe it is an option to clone_subref()?
I figured that B::Generate should be able to do this very easily,
except I haven't the foggiest where to start. :-)
|