]> git.vpit.fr Git - perl/modules/Scope-Upper.git/commitdiff
Fix "localize *x, 'y', $cx" to match Perl behaviour
authorVincent Pit <vince@profvince.com>
Sun, 15 Feb 2009 11:42:28 +0000 (12:42 +0100)
committerVincent Pit <vince@profvince.com>
Sun, 15 Feb 2009 11:43:10 +0000 (12:43 +0100)
Upper.xs
t/20-localize-target.t

index 17c4407eca2b39af44177bd1433e86133eee031c..2ebee08b0c1d9b189d3c47ddf26596230ca83dc9 100644 (file)
--- a/Upper.xs
+++ b/Upper.xs
@@ -351,11 +351,9 @@ STATIC void su_localize(pTHX_ void *ud_) {
 
  if (SvTYPE(sv) >= SVt_PVGV) {
   gv = (GV *) sv;
-  if (!val) {               /* local *x; */
+  if (!val || !SvROK(val)) { /* local *x; or local *x = $val; */
    t = SVt_PVGV;
-  } else if (!SvROK(val)) { /* local *x = $val; */
-   goto assign;
-  } else {                  /* local *x = \$val; */
+  } else {                   /* local *x = \$val; */
    t = SvTYPE(SvRV(val));
    deref = 1;
   }
@@ -430,7 +428,6 @@ STATIC void su_localize(pTHX_ void *ud_) {
                                      ud, PL_savestack_ix,
                                          PL_scopestack[PL_scopestack_ix]));
 
-assign:
  if (val)
   SvSetMagicSV((SV *) gv, val);
 
index 56ebd978df5f747f571b6585808ddbb1dda2eb76..726a588d156763797c0f3523ae2556b305dcb14f 100644 (file)
@@ -32,14 +32,17 @@ sub _t { shift->{t} }
  is $x, undef, 'localize *x, obj => HERE [end]';
 }
 
+our $y;
+
 {
- local $x = 2;
+ local $x = 1;
+ local $y = 2;
  {
-  local $x = 3;
-  localize *x, 1 => HERE;
-  is $x, undef, 'localize *x, 1 => HERE [ok]';
+  local $y = 3;
+  localize *x, 'y' => HERE;
+  is $x, 3, "localize *x, 'y' => HERE [ok]";
  }
- is $x, $] < 5.008009 ? undef : 2, 'localize *x, 1 => HERE [end]';
+ is $x, 1, "localize *x, 'y' => HERE [end]";
 }
 undef *x;