if (MARK < SP) {
copy_sv:
if (cx->blk_sub.cv && CvDEPTH(cx->blk_sub.cv) > 1) {
- if (!SvPADTMP(*SP)) {
*++newsp = SvREFCNT_inc(*SP);
FREETMPS;
sv_2mortal(*newsp);
- }
- else {
- /* FREETMPS could clobber it */
- SV *sv = SvREFCNT_inc(*SP);
- FREETMPS;
- *++newsp = sv_mortalcopy(sv);
- SvREFCNT_dec(sv);
- }
}
else
*++newsp =
- SvPADTMP(*SP)
- ? sv_mortalcopy(*SP)
- : !SvTEMP(*SP)
+ !SvTEMP(*SP)
? sv_2mortal(SvREFCNT_inc_simple_NN(*SP))
: *SP;
}
if (ref || !CxLVAL(cx))
while (++MARK <= SP)
*++newsp =
- SvFLAGS(*MARK) & SVs_PADTMP
+ SvTEMP(*MARK)
+ ? *MARK
+ : ref && SvFLAGS(*MARK) & SVs_PADTMP
? sv_mortalcopy(*MARK)
- : SvTEMP(*MARK)
- ? *MARK
: sv_2mortal(SvREFCNT_inc_simple_NN(*MARK));
else while (++MARK <= SP) {
if (*MARK != &PL_sv_undef
ok eval { *CORE::exit = \42 },
'[rt.cpan.org #74289] *CORE::foo is not accidentally made read-only';
-@UNIVERSAL::ISA = CORE;
-is "just another "->ucfirst . "perl hacker,\n"->ucfirst,
- "Just another Perl hacker,\n", 'coresubs do not return TARG';
-++$tests;
-
done_testing $tests;
CORE::__END__
@INC = '../lib';
require './test.pl';
}
-plan tests=>191;
+plan tests=>187;
sub a : lvalue { my $a = 34; ${\(bless \$a)} } # Return a temporary
sub b : lvalue { ${\shift} }
::like $@, qr/^Can't modify non-lvalue subroutine call at /,
'sub:lvalue{&$x}->() dies in true lvalue context';
}
-
-# TARG should be copied in rvalue context
-sub ucf :lvalue { ucfirst $_[0] }
-is ucf("just another ") . ucf("perl hacker,\n"),
- "Just another Perl hacker,\n", 'TARG is copied in rvalue scalar cx';
-is join('',ucf("just another "), ucf "perl hacker,\n"),
- "Just another Perl hacker,\n", 'TARG is copied in rvalue list cx';
-sub ucfr : lvalue {
- @_ ? ucfirst $_[0] : do {
- is ucfr("just another ") . ucfr("perl hacker,\n"),
- "Just another Perl hacker,\n",
- 'TARG is copied in recursive rvalue scalar cx';
- is join('',ucfr("just another "), ucfr("perl hacker,\n")),
- "Just another Perl hacker,\n",
- 'TARG is copied in recursive rvalue list cx';
- }
-}
-ucfr();