In this case I assume the function can either be Perl5 or Parrot?
Sounds like a custom PMC to me. Given the PMC that
could stash function pointers and correctly dispatch gets/sets
you have the option of writing a PNI method for setting the stashed
routine from C or we have to add a call to the extension API to stash a 
raw pointer.

-Melvin





Arthur Bergman <[EMAIL PROTECTED]>
10/27/2003 10:35 AM

 
        To:     Melvin Smith <[EMAIL PROTECTED]>
        cc:     [EMAIL PROTECTED], [EMAIL PROTECTED]
        Subject:        Re: Storing external data in PMCs




On Monday, October 27, 2003, at 03:26  pm, Melvin Smith wrote:

>
> At 02:56 PM 10/27/2003 +0000, Arthur Bergman wrote:
>> So I am currently trying to do a Perl5LVALUE pmc, a stumbling block 
>> is however that I need to pass the PMC the thing that it is 
>> lvalueling, I was planning to use the pmc data field for storing this 
>> but I cannot access it as a extender without violating the API and 
>> guessing at layouts which is kind of bad (Dan says so ;)
>
> I don't know Perl5 internals enough to know exactly what Perl5LVALUE
> does. Do you want a way to pass a value to the PMC and let the PMC 
> type morph
> itself based on the data representation?
>
> -Melvin
>
>


An lvalue holds usually a function, and when set is called that 
function is called. So no morthing required at all!

For example:

perl -le '$foo = hi; $bar = \substr($foo,1); print "$bar-$foo"; $$bar = 
"b"; print "$bar-$foo"';
LVALUE(0x513ec)-hi
LVALUE(0x513ec)-hb

so the reference points to a lvalue which has a reference to $bar and a 
special function on the set to actually execute the substr.

The reason I am starting with this is that it is so obscure that it is 
hardly used anywhere and is limited to a few small areas in the core 
making it a good testing ground.

Arthur



Reply via email to