]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/print.c (print_object): Don't print empty hash-table data
authorMattias Engdegård <mattiase@acm.org>
Thu, 2 Nov 2023 10:10:24 +0000 (11:10 +0100)
committerMattias Engdegård <mattiase@acm.org>
Sat, 13 Jan 2024 19:50:37 +0000 (20:50 +0100)
Since no data is the default, this preserves bidirectional compatibility.

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

index 0a5f2ee48d4b06d5c5504c15a28771271b10cac5..d011962d85b412d0d3b2669e77b6987ee49a69ec 100644 (file)
@@ -2603,21 +2603,30 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag)
            if (h->purecopy)
              print_c_string (" purecopy t", printcharfun);
 
-           print_c_string (" data (", printcharfun);
-
            ptrdiff_t size = h->count;
-           /* Don't print more elements than the specified maximum.  */
-           if (FIXNATP (Vprint_length) && XFIXNAT (Vprint_length) < size)
-             size = XFIXNAT (Vprint_length);
-
-           print_stack_push ((struct print_stack_entry){
-               .type = PE_hash,
-               .u.hash.obj = obj,
-               .u.hash.nobjs = size * 2,
-               .u.hash.idx = 0,
-               .u.hash.printed = 0,
-               .u.hash.truncated = (size < h->count),
-             });
+           if (size > 0)
+             {
+               print_c_string (" data (", printcharfun);
+
+               /* Don't print more elements than the specified maximum.  */
+               if (FIXNATP (Vprint_length) && XFIXNAT (Vprint_length) < size)
+                 size = XFIXNAT (Vprint_length);
+
+               print_stack_push ((struct print_stack_entry){
+                   .type = PE_hash,
+                   .u.hash.obj = obj,
+                   .u.hash.nobjs = size * 2,
+                   .u.hash.idx = 0,
+                   .u.hash.printed = 0,
+                   .u.hash.truncated = (size < h->count),
+                 });
+             }
+           else
+             {
+               /* Empty table: we can omit the data entirely.  */
+               printchar (')', printcharfun);
+               --print_depth;   /* Done with this.  */
+             }
            goto next_obj;
          }
 
index aedaa9a4e06d476cf9223794cbe8689c5b4f4232..ff3a6fe7483c4b7299fb6f6385dbe54809e72370 100644 (file)
@@ -367,13 +367,6 @@ otherwise, use a different charset."
       (remhash 1 h)
       (format "%S" h))))
 
-  (should
-   (string-match
-    "data ()"
-    (let ((h (make-hash-table)))
-      (let ((print-length 0))
-        (format "%S" h)))))
-
   (should
    (string-match
     "data (99 99)"