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.

Reply via email to