Change 29835 by [EMAIL PROTECTED] on 2007/01/15 17:18:03
Make changes analagous to pp_rv2hv's 21394 and 24489 in pp_rv2av.
Affected files ...
... //depot/perl/pp_hot.c#498 edit
Differences ...
==== //depot/perl/pp_hot.c#498 (text) ====
Index: perl/pp_hot.c
--- perl/pp_hot.c#497~29831~ 2007-01-15 08:26:17.000000000 -0800
+++ perl/pp_hot.c 2007-01-15 09:18:03.000000000 -0800
@@ -783,6 +783,8 @@
{
dVAR; dSP; dTOPss;
AV *av;
+ const I32 gimme = GIMME_V;
+ static const char return_array_to_lvalue_scalar[] = "Can't return hash to
lvalue scalar context";
if (SvROK(sv)) {
wasref:
@@ -796,8 +798,8 @@
RETURN;
}
else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue scalar context");
+ if (gimme != G_ARRAY)
+ Perl_croak(aTHX_ return_array_to_lvalue_scalar);
SETs((SV*)av);
RETURN;
}
@@ -813,9 +815,8 @@
RETURN;
}
else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue"
- " scalar context");
+ if (gimme != G_ARRAY)
+ Perl_croak(aTHX_ return_array_to_lvalue_scalar);
SETs((SV*)av);
RETURN;
}
@@ -835,8 +836,8 @@
DIE(aTHX_ PL_no_usym, "an ARRAY");
if (ckWARN(WARN_UNINITIALIZED))
report_uninit(sv);
- if (GIMME == G_ARRAY) {
- (void)POPs;
+ if (gimme == G_ARRAY) {
+ SP--;
RETURN;
}
RETSETUNDEF;
@@ -869,16 +870,15 @@
RETURN;
}
else if (LVRET) {
- if (GIMME == G_SCALAR)
- Perl_croak(aTHX_ "Can't return array to lvalue"
- " scalar context");
+ if (gimme != G_ARRAY)
+ Perl_croak(aTHX_ return_array_to_lvalue_scalar);
SETs((SV*)av);
RETURN;
}
}
}
- if (GIMME == G_ARRAY) {
+ if (gimme == G_ARRAY) {
const I32 maxarg = AvFILL(av) + 1;
(void)POPs; /* XXXX May be optimized away? */
EXTEND(SP, maxarg);
@@ -897,7 +897,7 @@
}
SP += maxarg;
}
- else if (GIMME_V == G_SCALAR) {
+ else if (gimme == G_SCALAR) {
dTARGET;
const I32 maxarg = AvFILL(av) + 1;
SETi(maxarg);
End of Patch.