]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix priting of :1
authorGerd Möllmann <gerd@gnu.org>
Sat, 22 Oct 2022 07:26:07 +0000 (09:26 +0200)
committerGerd Möllmann <gerd@gnu.org>
Sat, 22 Oct 2022 07:26:07 +0000 (09:26 +0200)
* src/print.c (print_symbol_name, print_symbol): Don't check for
symbol names looking like a number when we have already printed a
package prefix.
* test/src/editfns-tests.el (format-%s-keywords): Test for :1.

src/print.c
test/src/editfns-tests.el

index 7cb7165cb0873c3e13e999191ee1c56f15b117d2..0bae167c00ea59fd01c00c8d00a0cf7033f0e92b 100644 (file)
@@ -2196,9 +2196,11 @@ looks_like_number_p (Lisp_Object name)
 
 static void
 print_symbol_name (Lisp_Object name, Lisp_Object printcharfun,
-                  bool escape)
+                  bool escape, bool check_number)
 {
-  bool like_number_p = looks_like_number_p (name);
+  /* Don't check if the name looks like a number if we already know it
+     doesn't.  For example, for keywords.  */
+  bool like_number_p = check_number ? looks_like_number_p (name) : false;
   for (ptrdiff_t ibyte = 0, ichar = 0; ibyte < SBYTES (name);)
     {
       const int c = fetch_string_char_advance (name, &ichar, &ibyte);
@@ -2221,9 +2223,13 @@ print_symbol (Lisp_Object symbol, Lisp_Object printcharfun,
 {
   const Lisp_Object name = SYMBOL_NAME (symbol);
   const Lisp_Object package = SYMBOL_PACKAGE (symbol);
+  bool check_number_p = true;
 
   if (EQ (package, Vkeyword_package))
-    print_c_string (":", printcharfun);
+    {
+      print_c_string (":", printcharfun);
+      check_number_p = false;
+    }
   else if (EQ (package, Vearmuffs_package))
     ;
   else if (NILP (package))
@@ -2239,13 +2245,14 @@ print_symbol (Lisp_Object symbol, Lisp_Object printcharfun,
       const bool accessible = !EQ (found, Qunbound);
       if (!accessible || !EQ (found, symbol))
        {
-         print_symbol_name (PACKAGE_NAMEX (package), printcharfun, escape);
+         print_symbol_name (PACKAGE_NAMEX (package), printcharfun, escape, true);
          const Lisp_Object found = pkg_find_symbol (name, package, &status);
          eassert (!EQ (found, Qunbound));
          if (EQ (status, QCexternal))
            print_c_string (":", printcharfun);
          else
            print_c_string ("::", printcharfun);
+         check_number_p = false;
        }
     }
 
@@ -2255,7 +2262,7 @@ print_symbol (Lisp_Object symbol, Lisp_Object printcharfun,
   if (SBYTES (name) == 0 && !EQ (package, Vkeyword_package))
     print_c_string ("##", printcharfun);
   else
-    print_symbol_name (name, printcharfun, escape);
+    print_symbol_name (name, printcharfun, escape, check_number_p);
 }
 
 
index bffa7865d52b842557922d93a4a094099d0b118d..74327fcb32d903476303e3124ab3339da210d11c 100644 (file)
     (should (= (field-end) (point-max)))))
 
 (ert-deftest format-%s-keywords ()
-  (should (string-equal (format "%s" :hansi) ":hansi")))
-
+  (should (string-equal (format "%s" :hansi) ":hansi"))
+  (should (string-equal (format "%s" :1) ":1")))
 
 ;;; editfns-tests.el ends here