summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib.c11
-rw-r--r--lib.h2
-rw-r--r--regex.c4
3 files changed, 11 insertions, 6 deletions
diff --git a/lib.c b/lib.c
index f089ee90..cf800c52 100644
--- a/lib.c
+++ b/lib.c
@@ -10849,7 +10849,7 @@ static val simple_qref_args_p(val args, val pos)
}
}
-void out_str_char(wchar_t ch, val out, int *semi_flag)
+void out_str_char(wchar_t ch, val out, int *semi_flag, int regex)
{
if (*semi_flag && (iswxdigit(ch) || ch == ';'))
put_char(chr(';'), out);
@@ -10864,9 +10864,14 @@ void out_str_char(wchar_t ch, val out, int *semi_flag)
case '\v': put_string(lit("\\v"), out); break;
case '\f': put_string(lit("\\f"), out); break;
case '\r': put_string(lit("\\r"), out); break;
- case '"': put_string(lit("\\\""), out); break;
case '\\': put_string(lit("\\\\"), out); break;
case 27: put_string(lit("\\e"), out); break;
+ case '"':
+ if (regex)
+ put_char(chr(ch), out);
+ else
+ put_string(lit("\\\""), out);
+ break;
default:
{
val fmt = nil;
@@ -10891,7 +10896,7 @@ void out_str_char(wchar_t ch, val out, int *semi_flag)
static void out_str_readable(const wchar_t *ptr, val out, int *semi_flag)
{
for (; *ptr; ptr++)
- out_str_char(*ptr, out, semi_flag);
+ out_str_char(*ptr, out, semi_flag, 0);
}
static void out_lazy_str(val lstr, val out)
diff --git a/lib.h b/lib.h
index 6fe29fe2..b473b4dd 100644
--- a/lib.h
+++ b/lib.h
@@ -1069,7 +1069,7 @@ val to(val range);
val set_from(val range, val from);
val set_to(val range, val to);
val env(void);
-void out_str_char(wchar_t ch, val out, int *semi_flag);
+void out_str_char(wchar_t ch, val out, int *semi_flag, int regex);
val obj_print_impl(val obj, val out, val pretty, struct strm_ctx *);
val obj_print(val obj, val stream, val pretty);
val print(val obj, val stream, val pretty);
diff --git a/regex.c b/regex.c
index 47693e97..3fb6b42c 100644
--- a/regex.c
+++ b/regex.c
@@ -2272,7 +2272,7 @@ static void print_class_char(val ch, val first_p, val stream, int *semi_flag)
put_char(ch, stream);
return;
}
- out_str_char(c_chr(ch), stream, semi_flag);
+ out_str_char(c_chr(ch), stream, semi_flag, 1);
}
static void print_rec(val exp, val stream, int *semi_flag);
@@ -2311,7 +2311,7 @@ static void print_rec(val exp, val stream, int *semi_flag)
put_char(exp, stream);
break;
default:
- out_str_char(ch, stream, semi_flag);
+ out_str_char(ch, stream, semi_flag, 1);
}
} else if (stringp(exp)) {
cnum i;