diff options
Diffstat (limited to 'src/fns.c')
| -rw-r--r-- | src/fns.c | 32 |
1 files changed, 5 insertions, 27 deletions
| @@ -36,7 +36,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | |||
| 36 | #include "buffer.h" | 36 | #include "buffer.h" |
| 37 | #include "intervals.h" | 37 | #include "intervals.h" |
| 38 | #include "window.h" | 38 | #include "window.h" |
| 39 | #include "puresize.h" | ||
| 40 | #include "gnutls.h" | 39 | #include "gnutls.h" |
| 41 | 40 | ||
| 42 | enum equal_kind { EQUAL_NO_QUIT, EQUAL_PLAIN, EQUAL_INCLUDING_PROPERTIES }; | 41 | enum equal_kind { EQUAL_NO_QUIT, EQUAL_PLAIN, EQUAL_INCLUDING_PROPERTIES }; |
| @@ -2653,7 +2652,6 @@ ARRAY is a vector, string, char-table, or bool-vector. */) | |||
| 2653 | size = SCHARS (array); | 2652 | size = SCHARS (array); |
| 2654 | if (size != 0) | 2653 | if (size != 0) |
| 2655 | { | 2654 | { |
| 2656 | CHECK_IMPURE (array, XSTRING (array)); | ||
| 2657 | unsigned char str[MAX_MULTIBYTE_LENGTH]; | 2655 | unsigned char str[MAX_MULTIBYTE_LENGTH]; |
| 2658 | int len; | 2656 | int len; |
| 2659 | if (STRING_MULTIBYTE (array)) | 2657 | if (STRING_MULTIBYTE (array)) |
| @@ -2695,7 +2693,6 @@ This makes STRING unibyte and may change its length. */) | |||
| 2695 | ptrdiff_t len = SBYTES (string); | 2693 | ptrdiff_t len = SBYTES (string); |
| 2696 | if (len != 0 || STRING_MULTIBYTE (string)) | 2694 | if (len != 0 || STRING_MULTIBYTE (string)) |
| 2697 | { | 2695 | { |
| 2698 | CHECK_IMPURE (string, XSTRING (string)); | ||
| 2699 | memset (SDATA (string), 0, len); | 2696 | memset (SDATA (string), 0, len); |
| 2700 | STRING_SET_CHARS (string, len); | 2697 | STRING_SET_CHARS (string, len); |
| 2701 | STRING_SET_UNIBYTE (string); | 2698 | STRING_SET_UNIBYTE (string); |
| @@ -4263,16 +4260,12 @@ hash_index_size (struct Lisp_Hash_Table *h, ptrdiff_t size) | |||
| 4263 | size exceeds REHASH_THRESHOLD. | 4260 | size exceeds REHASH_THRESHOLD. |
| 4264 | 4261 | ||
| 4265 | WEAK specifies the weakness of the table. If non-nil, it must be | 4262 | WEAK specifies the weakness of the table. If non-nil, it must be |
| 4266 | one of the symbols `key', `value', `key-or-value', or `key-and-value'. | 4263 | one of the symbols `key', `value', `key-or-value', or `key-and-value'. */ |
| 4267 | |||
| 4268 | If PURECOPY is non-nil, the table can be copied to pure storage via | ||
| 4269 | `purecopy' when Emacs is being dumped. Such tables can no longer be | ||
| 4270 | changed after purecopy. */ | ||
| 4271 | 4264 | ||
| 4272 | Lisp_Object | 4265 | Lisp_Object |
| 4273 | make_hash_table (struct hash_table_test test, EMACS_INT size, | 4266 | make_hash_table (struct hash_table_test test, EMACS_INT size, |
| 4274 | float rehash_size, float rehash_threshold, | 4267 | float rehash_size, float rehash_threshold, |
| 4275 | Lisp_Object weak, bool purecopy) | 4268 | Lisp_Object weak) |
| 4276 | { | 4269 | { |
| 4277 | struct Lisp_Hash_Table *h; | 4270 | struct Lisp_Hash_Table *h; |
| 4278 | Lisp_Object table; | 4271 | Lisp_Object table; |
| @@ -4301,7 +4294,6 @@ make_hash_table (struct hash_table_test test, EMACS_INT size, | |||
| 4301 | h->next = make_vector (size, make_fixnum (-1)); | 4294 | h->next = make_vector (size, make_fixnum (-1)); |
| 4302 | h->index = make_vector (hash_index_size (h, size), make_fixnum (-1)); | 4295 | h->index = make_vector (hash_index_size (h, size), make_fixnum (-1)); |
| 4303 | h->next_weak = NULL; | 4296 | h->next_weak = NULL; |
| 4304 | h->purecopy = purecopy; | ||
| 4305 | h->mutable = true; | 4297 | h->mutable = true; |
| 4306 | 4298 | ||
| 4307 | /* Set up the free list. */ | 4299 | /* Set up the free list. */ |
| @@ -4402,11 +4394,6 @@ maybe_resize_hash_table (struct Lisp_Hash_Table *h) | |||
| 4402 | set_hash_next_slot (h, i, HASH_INDEX (h, start_of_bucket)); | 4394 | set_hash_next_slot (h, i, HASH_INDEX (h, start_of_bucket)); |
| 4403 | set_hash_index_slot (h, start_of_bucket, i); | 4395 | set_hash_index_slot (h, start_of_bucket, i); |
| 4404 | } | 4396 | } |
| 4405 | |||
| 4406 | #ifdef ENABLE_CHECKING | ||
| 4407 | if (HASH_TABLE_P (Vpurify_flag) && XHASH_TABLE (Vpurify_flag) == h) | ||
| 4408 | message ("Growing hash table to: %"pD"d", next_size); | ||
| 4409 | #endif | ||
| 4410 | } | 4397 | } |
| 4411 | } | 4398 | } |
| 4412 | 4399 | ||
| @@ -4470,7 +4457,6 @@ check_mutable_hash_table (Lisp_Object obj, struct Lisp_Hash_Table *h) | |||
| 4470 | { | 4457 | { |
| 4471 | if (!h->mutable) | 4458 | if (!h->mutable) |
| 4472 | signal_error ("hash table test modifies table", obj); | 4459 | signal_error ("hash table test modifies table", obj); |
| 4473 | eassert (!PURE_P (h)); | ||
| 4474 | } | 4460 | } |
| 4475 | 4461 | ||
| 4476 | static void | 4462 | static void |
| @@ -4998,16 +4984,10 @@ key, value, one of key or value, or both key and value, depending on | |||
| 4998 | WEAK. WEAK t is equivalent to `key-and-value'. Default value of WEAK | 4984 | WEAK. WEAK t is equivalent to `key-and-value'. Default value of WEAK |
| 4999 | is nil. | 4985 | is nil. |
| 5000 | 4986 | ||
| 5001 | :purecopy PURECOPY -- If PURECOPY is non-nil, the table can be copied | ||
| 5002 | to pure storage when Emacs is being dumped, making the contents of the | ||
| 5003 | table read only. Any further changes to purified tables will result | ||
| 5004 | in an error. | ||
| 5005 | |||
| 5006 | usage: (make-hash-table &rest KEYWORD-ARGS) */) | 4987 | usage: (make-hash-table &rest KEYWORD-ARGS) */) |
| 5007 | (ptrdiff_t nargs, Lisp_Object *args) | 4988 | (ptrdiff_t nargs, Lisp_Object *args) |
| 5008 | { | 4989 | { |
| 5009 | Lisp_Object test, weak; | 4990 | Lisp_Object test, weak; |
| 5010 | bool purecopy; | ||
| 5011 | struct hash_table_test testdesc; | 4991 | struct hash_table_test testdesc; |
| 5012 | ptrdiff_t i; | 4992 | ptrdiff_t i; |
| 5013 | USE_SAFE_ALLOCA; | 4993 | USE_SAFE_ALLOCA; |
| @@ -5041,9 +5021,8 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) | |||
| 5041 | testdesc.cmpfn = cmpfn_user_defined; | 5021 | testdesc.cmpfn = cmpfn_user_defined; |
| 5042 | } | 5022 | } |
| 5043 | 5023 | ||
| 5044 | /* See if there's a `:purecopy PURECOPY' argument. */ | 5024 | /* Ignore a `:purecopy PURECOPY' argument. */ |
| 5045 | i = get_key_arg (QCpurecopy, nargs, args, used); | 5025 | get_key_arg (QCpurecopy, nargs, args, used); |
| 5046 | purecopy = i && !NILP (args[i]); | ||
| 5047 | /* See if there's a `:size SIZE' argument. */ | 5026 | /* See if there's a `:size SIZE' argument. */ |
| 5048 | i = get_key_arg (QCsize, nargs, args, used); | 5027 | i = get_key_arg (QCsize, nargs, args, used); |
| 5049 | Lisp_Object size_arg = i ? args[i] : Qnil; | 5028 | Lisp_Object size_arg = i ? args[i] : Qnil; |
| @@ -5093,8 +5072,7 @@ usage: (make-hash-table &rest KEYWORD-ARGS) */) | |||
| 5093 | signal_error ("Invalid argument list", args[i]); | 5072 | signal_error ("Invalid argument list", args[i]); |
| 5094 | 5073 | ||
| 5095 | SAFE_FREE (); | 5074 | SAFE_FREE (); |
| 5096 | return make_hash_table (testdesc, size, rehash_size, rehash_threshold, weak, | 5075 | return make_hash_table (testdesc, size, rehash_size, rehash_threshold, weak); |
| 5097 | purecopy); | ||
| 5098 | } | 5076 | } |
| 5099 | 5077 | ||
| 5100 | 5078 | ||