--- Devel-FindRef/FindRef.xs 2008/12/01 13:22:43 1.14 +++ Devel-FindRef/FindRef.xs 2008/12/01 13:47:09 1.15 @@ -44,7 +44,7 @@ PROTOTYPES: ENABLE void -find_ (SV *target) +find_ (SV *target_ref) PPCODE: { SV *arena, *targ; @@ -53,10 +53,10 @@ AV *about = newAV (); AV *excl = newAV (); - if (!SvROK (target)) + if (!SvROK (target_ref)) croak ("find expects a reference to a perl value"); - targ = SvRV (target); + targ = SvRV (target_ref); for (arena = PL_sv_arenaroot; arena; arena = SvANY (arena)) { @@ -100,9 +100,9 @@ } } - if (SvROK (sv) && !SvWEAKREF (sv)) + if (SvROK (sv)) { - if (sv != target && SvRV (sv) == targ && !SvWEAKREF (sv)) + if (SvRV (sv) == targ && !SvWEAKREF (sv) && sv != target_ref) res_pair ("referenced by"); } else @@ -203,6 +203,11 @@ } } + /* look at the mortalise stack of the current coroutine */ + for (i = 0; i <= PL_tmps_ix; ++i) + if (PL_tmps_stack [i] == targ) + res_text ("a temporary on the stack"); + if (targ == (SV*)PL_main_cv) res_text ("the main body of the program");