c - How do I turn the Perl stack into an AV? -



c - How do I turn the Perl stack into an AV? -

note: question perl internals, c code itself.

i want pass contents of perl stack (ie. sp) array perl function.

is there existing way re-create stack av? if not, how 1 accomplish it? array can read-only. how 1 turn av reference?

found crib looking in pp_anonlist in pp.c

dvar; dsp; dmark; const i32 items = sp - mark; sv * const args = mutable_sv(av_make(items, mark+1)); spagain; mxpushs(newrv_noinc(args));

it took me great number of tries before settled on this:

#define numargs (sp - (pl_stack_base + topmark)) av * perl_get_args(pthx) { dsp; av * args; args = av_make(numargs, sp - numargs + 1); homecoming args; }

this similar pp_anonlist, not quite. dmark expands sv **mark = pl_stack_base + (*pl_markstack_ptr--). mark used extensively sick defined in documentation. because dmark modifies state of stack, unusable in function should have no side effects. topmark *pl_markstack_ptr, no decrement. numargs sp - mark without side effect.

sp points @ top of stack, av_make() works on lists. it's necessary pass in sp - numargs ensure av_make() can read 2 items off stack. why necessary add together one, i'm not sure.

c perl xs

Comments

Popular posts from this blog

xslt - DocBook 5 to PDF transform failing with error: "fo:flow" is missing child elements. Required content model: marker* -

mediawiki - How do I insert tables inside infoboxes on Wikia pages? -

Local Service User Logged into Windows -