aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMattias EngdegÄrd2023-10-26 18:36:05 +0200
committerMattias EngdegÄrd2024-01-13 20:50:37 +0100
commit3f9c81a87f7bce854489b8232d817b536ccf349b (patch)
tree44b7cea96f336f9595c964109d9aa8d287cce29e /src
parenta09619f2598a1658feac6794e85bc61a07c4855f (diff)
downloademacs-3f9c81a87f7bce854489b8232d817b536ccf349b.tar.gz
emacs-3f9c81a87f7bce854489b8232d817b536ccf349b.zip
Don't print or read the hash table size parameter
It's not a meaningful part of the external representation. This allows for faster printing and reading, smaller external representation, and less memory consumption. * src/print.c (print_object): Omit size. * src/lread.c (hash_table_from_plist): Take size from the data.
Diffstat (limited to 'src')
-rw-r--r--src/lread.c17
-rw-r--r--src/print.c7
2 files changed, 11 insertions, 13 deletions
diff --git a/src/lread.c b/src/lread.c
index e95dafcf222..18894801376 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -3426,7 +3426,6 @@ hash_table_from_plist (Lisp_Object plist)
3426 } \ 3426 } \
3427 } while (0) 3427 } while (0)
3428 3428
3429 ADDPARAM (size);
3430 ADDPARAM (test); 3429 ADDPARAM (test);
3431 ADDPARAM (weakness); 3430 ADDPARAM (weakness);
3432 ADDPARAM (rehash_size); 3431 ADDPARAM (rehash_size);
@@ -3434,23 +3433,25 @@ hash_table_from_plist (Lisp_Object plist)
3434 ADDPARAM (purecopy); 3433 ADDPARAM (purecopy);
3435 3434
3436 Lisp_Object data = plist_get (plist, Qdata); 3435 Lisp_Object data = plist_get (plist, Qdata);
3436 if (!(NILP (data) || CONSP (data)))
3437 error ("Hash table data is not a list");
3438 ptrdiff_t data_len = list_length (data);
3439 if (data_len & 1)
3440 error ("Hash table data length is odd");
3441 *par++ = QCsize;
3442 *par++ = make_fixnum (data_len / 2);
3437 3443
3438 /* Now use params to make a new hash table and fill it. */ 3444 /* Now use params to make a new hash table and fill it. */
3439 Lisp_Object ht = Fmake_hash_table (par - params, params); 3445 Lisp_Object ht = Fmake_hash_table (par - params, params);
3440 3446
3441 Lisp_Object last = data; 3447 while (!NILP (data))
3442 FOR_EACH_TAIL_SAFE (data)
3443 { 3448 {
3444 Lisp_Object key = XCAR (data); 3449 Lisp_Object key = XCAR (data);
3445 data = XCDR (data); 3450 data = XCDR (data);
3446 if (!CONSP (data))
3447 break;
3448 Lisp_Object val = XCAR (data); 3451 Lisp_Object val = XCAR (data);
3449 last = XCDR (data);
3450 Fputhash (key, val, ht); 3452 Fputhash (key, val, ht);
3453 data = XCDR (data);
3451 } 3454 }
3452 if (!NILP (last))
3453 error ("Hash table data is not a list of even length");
3454 3455
3455 return ht; 3456 return ht;
3456} 3457}
diff --git a/src/print.c b/src/print.c
index d011962d85b..c1c91b2383a 100644
--- a/src/print.c
+++ b/src/print.c
@@ -2574,11 +2574,8 @@ print_object (Lisp_Object obj, Lisp_Object printcharfun, bool escapeflag)
2574 { 2574 {
2575 struct Lisp_Hash_Table *h = XHASH_TABLE (obj); 2575 struct Lisp_Hash_Table *h = XHASH_TABLE (obj);
2576 /* Implement a readable output, e.g.: 2576 /* Implement a readable output, e.g.:
2577 #s(hash-table size 2 test equal data (k1 v1 k2 v2)) */ 2577 #s(hash-table test equal data (k1 v1 k2 v2)) */
2578 /* Always print the size. */ 2578 print_c_string ("#s(hash-table", printcharfun);
2579 int len = sprintf (buf, "#s(hash-table size %"pD"d",
2580 HASH_TABLE_SIZE (h));
2581 strout (buf, len, len, printcharfun);
2582 2579
2583 if (!BASE_EQ (h->test.name, Qeql)) 2580 if (!BASE_EQ (h->test.name, Qeql))
2584 { 2581 {