summaryrefslogtreecommitdiff
path: root/proto.h
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2012-09-26 13:12:57 -0700
committerFather Chrysostomos <sprout@cpan.org>2012-09-26 13:13:54 -0700
commitd699ecb701ac42e5f50b4ec00c162c4dc9532b91 (patch)
treec3dd99b645b5c7aa5c5de7815437a607c0aaf48b /proto.h
parent02c01adb33bc4dde0147539d95b275937329f6c4 (diff)
downloadperl-d699ecb701ac42e5f50b4ec00c162c4dc9532b91.tar.gz
Restore special blocks to working order
I accidentally broke these in commit 85ffec3682, yet everything passed for me under threads+mad. PL_compcv is usually restored to its previous value at the end of newATTRSUB when LEAVE_SCOPE is called. But BEGIN blocks are called before that. I needed PL_compcv to be restored to its previ- ous value before it was called, so I added LEAVE_SCOPE before process_special_blocks. But that caused the name to be freed before S_process_special_blocks got a chance to look at it. So I have now added a new parameter to S_process_special_blocks to allow *it* to call LEAVE_SCOPE after it determines that it is a BEGIN block, but before it calls it.
Diffstat (limited to 'proto.h')
-rw-r--r--proto.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/proto.h b/proto.h
index f2c9d243dc..fa69fa96fe 100644
--- a/proto.h
+++ b/proto.h
@@ -5866,10 +5866,10 @@ STATIC OP* S_pmtrans(pTHX_ OP* o, OP* expr, OP* repl)
#define PERL_ARGS_ASSERT_PMTRANS \
assert(o); assert(expr); assert(repl)
-STATIC void S_process_special_blocks(pTHX_ const char *const fullname, GV *const gv, CV *const cv)
- __attribute__nonnull__(pTHX_1)
+STATIC void S_process_special_blocks(pTHX_ I32 floor, const char *const fullname, GV *const gv, CV *const cv)
__attribute__nonnull__(pTHX_2)
- __attribute__nonnull__(pTHX_3);
+ __attribute__nonnull__(pTHX_3)
+ __attribute__nonnull__(pTHX_4);
#define PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS \
assert(fullname); assert(gv); assert(cv)