]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix printing of confusing symbol names
authorGerd Möllmann <gerd@gnu.org>
Mon, 17 Oct 2022 09:29:56 +0000 (11:29 +0200)
committerGerd Möllmann <gerd@gnu.org>
Mon, 17 Oct 2022 09:29:56 +0000 (11:29 +0200)
src/print.c

index 8f1f33c4d5d4cd53c16ea54fd73f4d1d8abeced1..69b82659b3e147259ab3a139d288027f4ecb0688 100644 (file)
@@ -2168,7 +2168,7 @@ must_escape_p (int c, int ichar)
 {
   if (c == '\"' || c == '\\' || c == '\''
       || (ichar == 0
-         && (c == '+' || c == '-' || c == '.' || c == '?'))
+         && (c == '+' || c == '-' || c == '?' || c == '.'))
       || c == ';' || c == '#' || c == '(' || c == ')'
       || c == ',' || c == '`' || c == '|'
       || c == '[' || c == ']' || c <= 040
@@ -2177,17 +2177,31 @@ must_escape_p (int c, int ichar)
   return false;
 }
 
+/* Return true if NAME looks like a number.  */
+
+static bool
+looks_like_number_p (Lisp_Object name)
+{
+  const char *p = (const char *) SDATA (name);
+  const bool signedp = *p == '-' || *p == '+';
+  ptrdiff_t len;
+  return ((c_isdigit (p[signedp]) || p[signedp] == '.')
+         && !NILP (string_to_number (p, 10, &len))
+         && len == SBYTES (name));
+}
+
 /* Print string NAME like a symbol name.  */
 
 static void
 print_symbol_name (Lisp_Object name, Lisp_Object printcharfun,
                   bool escape)
 {
+  const bool like_number_p = looks_like_number_p (name);
   for (ptrdiff_t ibyte = 0, ichar = 0; ibyte < SBYTES (name);)
     {
       const int c = fetch_string_char_advance (name, &ichar, &ibyte);
       maybe_quit ();
-      if (escape && must_escape_p (c, ichar))
+      if (escape && (like_number_p || must_escape_p (c, ichar)))
        printchar ('\\', printcharfun);
       printchar (c, printcharfun);
     }