On Thu, May 03, 2007 at 10:50:07AM -0700, Artur Bergman wrote:
On May 3, 2007, at 4:15 AM, Tim Bunce wrote:
Umm. PL_copline looks like it's compile-time only.
And CopLINE(PL_curop) gives the line number of the current statement,
not the first statement of the current block/scope.
With a bit of digging the nearest I've seen (or guessed at) so far is
CopLINE(cxstack[cxstack_ix].blk_oldcop) which I think will give me the
line number of the start of the current subroutine, eval, or loop.
Right?
Loop level would be handy but I'd still like to get down to block/
scope level.
Ah, I missunderstood, you want to find the start of the perl level
scope that access your XS?
Yes. Specifically the first cop in the block, to get the line number.
loop is a block/scope :) but I guess you can just walk down the
cxstack until you find the type you want
CxTYPE == CXt_SUB and CXt_BLOCK
The context struct is focussed on restoring state when the context is exited.
So I can get the op that the context will return to (cx_u.cx_blk.blku_oldcop)
but not the first op that was executed in the context. Right?
If so, does anyone have any ideas?
I may need to track the line numbers myself in the DB_sub, but that'll
probaby need a stack mechanism and careful logic to note changes in
cxstack_ix and PL_curstackinfo. Not very appealing.
Tim.