B::cstring() and B::Deparse EBCDIC fixes from Rafael Garcia-Suarez.
Jarkko Hietaniemi [Sun, 27 Jan 2002 21:47:29 +0000 (21:47 +0000)]
p4raw-id: //depot/perl@14451

ext/B/B.xs
ext/B/B/Deparse.pm

index 9b7fa9d..c731c98 100644 (file)
@@ -251,7 +251,11 @@ cstring(pTHX_ SV *sv)
                 sprintf(escbuff, "\\%03o", '?');
                 sv_catpv(sstr, escbuff);
             }
-           else if (*s >= ' ' && *s < 127) /* XXX not portable */
+#ifdef EBCDIC
+           else if (isPRINT(*s))
+#else
+           else if (*s >= ' ' && *s < 127)
+#endif /* EBCDIC */
                sv_catpvn(sstr, s, 1);
            else if (*s == '\n')
                sv_catpv(sstr, "\\n");
@@ -292,7 +296,11 @@ cchar(pTHX_ SV *sv)
        sv_catpv(sstr, "\\'");
     else if (*s == '\\')
        sv_catpv(sstr, "\\\\");
-    else if (*s >= ' ' && *s < 127) /* XXX not portable */
+#ifdef EBCDIC
+    else if (isPRINT(8s))
+#else
+    else if (*s >= ' ' && *s < 127)
+#endif /* EBCDIC */
        sv_catpvn(sstr, s, 1);
     else if (*s == '\n')
        sv_catpv(sstr, "\\n");
index c373a69..fe1dc10 100644 (file)
@@ -3074,7 +3074,7 @@ sub re_unback {
     my($str) = @_;
 
     # the insane complexity here is due to the behaviour of "\c\"
-    $str =~ s/(^|[^\\]|\\c\\)(?<!\\c)\\(\\\\)*(?=[\0-\031\177-\377])/$1$2/g;
+    $str =~ s/(^|[^\\]|\\c\\)(?<!\\c)\\(\\\\)*(?=[^[:print:]])/$1$2/g;
     return $str;
 }