Tweaks to get Test::Builder::Tester's tests to work in the core.
[p5sagit/p5-mst-13.2.git] / lib / dumpvar.pl
index f4a4399..43e107f 100644 (file)
@@ -30,7 +30,8 @@ sub main::dumpValue {
   local $^W=0;
   (print "undef\n"), return unless defined $_[0];
   (print &stringify($_[0]), "\n"), return unless ref $_[0];
-  dumpvar::unwrap($_[0],0, $_[1]);
+  push @_, -1 if @_ == 1;
+  dumpvar::unwrap($_[0], 0, $_[1]);
 }
 
 # This one is good for variable names:
@@ -79,7 +80,7 @@ sub stringify {
        } elsif ($unctrl eq 'quote') {
          s/([\"\\\$\@])/\\$1/g if $tick eq '"';
          s/\033/\\e/g;
-         s/([\000-\037\177])/'\\c'.chr(ord($1)^64)/eg;
+         s/([\000-\037\177])/'\\c'._escaped_ord($1)/eg;
        }
        $_ = uniescape($_);
        s/([\200-\377])/'\\'.sprintf('%3o',ord($1))/eg if $quoteHighBit;
@@ -88,6 +89,14 @@ sub stringify {
          : $tick . $_ . $tick;
 }
 
+# Ensure a resulting \ is escaped to be \\
+sub _escaped_ord {
+    my $chr = shift;
+    $chr = chr(ord($chr)^64);
+    $chr =~ s{\\}{\\\\}g;
+    return $chr;
+}
+
 sub ShortArray {
   my $tArrayDepth = $#{$_[0]} ; 
   $tArrayDepth = $#{$_[0]} < $arrayDepth-1 ? $#{$_[0]} : $arrayDepth-1 
@@ -115,7 +124,7 @@ sub DumpElem {
            join("' '", @{$v}[0..$tArrayDepth]) . "'$shortmore";
   } else {
     print "$short\n";
-    unwrap($_[0],$_[1],$_[2]);
+    unwrap($_[0],$_[1],$_[2]) if ref $_[0];
   }
 }
 
@@ -176,7 +185,7 @@ sub unwrap {
 
     if ( $item_type eq 'HASH' ) { 
         # Hash ref or hash-based object.
-       @sortKeys = sort keys(%$v) ;
+       my @sortKeys = sort keys(%$v) ;
        undef $more ; 
        $tHashDepth = $#sortKeys ; 
        $tHashDepth = $#sortKeys < $hashDepth-1 ? $#sortKeys : $hashDepth-1