diff options
| author | Mattias EngdegÄrd | 2023-10-26 18:36:05 +0200 |
|---|---|---|
| committer | Mattias EngdegÄrd | 2024-01-13 20:50:37 +0100 |
| commit | 3f9c81a87f7bce854489b8232d817b536ccf349b (patch) | |
| tree | 44b7cea96f336f9595c964109d9aa8d287cce29e /src | |
| parent | a09619f2598a1658feac6794e85bc61a07c4855f (diff) | |
| download | emacs-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.c | 17 | ||||
| -rw-r--r-- | src/print.c | 7 |
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 | { |