summaryrefslogtreecommitdiff
path: root/op.c
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2006-02-20 13:42:47 +0000
committerNicholas Clark <nick@ccl4.org>2006-02-20 13:42:47 +0000
commitd04ba5897acce6425e3b231fbf36336ea42f8165 (patch)
tree0300fa64efa15fc65f2c48cc2938c1fe8afa0e5a /op.c
parentbf53b3a5f249ae2a059ca8014f7a62d301c554bc (diff)
downloadperl-d04ba5897acce6425e3b231fbf36336ea42f8165.tar.gz
xcv_root and xcv_xsub can also be merged into a union, providing a new
flag is added to denote whether the PVCV is perl or XSUB. p4raw-id: //depot/perl@27244
Diffstat (limited to 'op.c')
-rw-r--r--op.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/op.c b/op.c
index cb507bac77..85e88526f6 100644
--- a/op.c
+++ b/op.c
@@ -4295,7 +4295,7 @@ Perl_cv_undef(pTHX_ CV *cv)
SvREFCNT_dec((SV*)CvXSUBANY(cv).any_ptr);
CvCONST_off(cv);
}
- if (CvXSUB(cv)) {
+ if (CvISXSUB(cv) && CvXSUB(cv)) {
CvXSUB(cv) = 0;
}
/* delete all flags except WEAKOUTSIDE */
@@ -4586,6 +4586,7 @@ Perl_newATTRSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block)
CvXSUBANY(cv).any_ptr = const_sv;
CvXSUB(cv) = const_sv_xsub;
CvCONST_on(cv);
+ CvISXSUB_on(cv);
}
else {
GvCV(gv) = NULL;
@@ -4916,6 +4917,7 @@ Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename)
(void)gv_fetchfile(filename);
CvFILE(cv) = (char *)filename; /* NOTE: not copied, as it is expected to be
an external constant string */
+ CvISXSUB_on(cv);
CvXSUB(cv) = subaddr;
if (name) {