summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChip Salzenberg <chip@perl.com>1997-02-03 16:01:58 +1200
committerChip Salzenberg <chip@atlantic.net>1997-02-04 17:47:00 +1200
commit3841441e5e6bb3f9e314b1a60a20e0690567685f (patch)
tree76254d1920be5c89aaad808fc3e10303ed38d95b
parent49beac4814c9f4f107819fdd49700d8c7d84d40b (diff)
downloadperl-3841441e5e6bb3f9e314b1a60a20e0690567685f.tar.gz
Ignore refs to lexicals when making refs to lexicals
-rw-r--r--op.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/op.c b/op.c
index 2d25fb3522..9409378340 100644
--- a/op.c
+++ b/op.c
@@ -187,6 +187,7 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
for (off = AvFILL(curname); off > 0; off--) {
if ((sv = svp[off]) &&
sv != &sv_undef &&
+ !SvFAKE(sv) &&
seq <= SvIVX(sv) &&
seq > I_32(SvNVX(sv)) &&
strEQ(SvPVX(sv), name))
@@ -211,7 +212,7 @@ pad_findlex(char *name, PADOFFSET newoff, U32 seq, CV* startcv, I32 cx_ix)
av_store(comppad_name, newoff, sv);
SvNVX(sv) = (double)curcop->cop_seq;
SvIVX(sv) = 999999999; /* A ref, intro immediately */
- SvFLAGS(sv) |= SVf_FAKE;
+ SvFAKE_on(sv); /* A ref, not a real var */
if (CvANON(compcv) || SvTYPE(compcv) == SVt_PVFM) {
/* "It's closures all the way down." */
CvCLONE_on(compcv);
@@ -1379,6 +1380,19 @@ OP *op;
peep(main_start);
main_cv = compcv;
compcv = 0;
+ /* Register with debugger: */
+
+ if (perldb) {
+ CV *cv = perl_get_cv("DB::postponed", FALSE);
+
+ if (cv) {
+ dSP;
+ PUSHMARK(sp);
+ XPUSHs((SV*)compiling.cop_filegv);
+ PUTBACK;
+ perl_call_sv((SV*)cv, G_DISCARD);
+ }
+ }
}
}