WITH-STOLEN-ALIST

(with-stolen-alist name form) ensures that name is a fast alist at the start of the execution of form. At the end of execution, it ensures that name is a fast alist if and only if it was originally. That is, if name was not a fast alist originally, its hash table link is freed, and if it was a fast alist originally but its table was modified during the execution of form, that table is restored. Note that any extended table created from the original fast alist during form must be manually freed.
Major Section:  HONS-AND-MEMOIZATION

Logically, with-stolen-alist just returns form.

Under the hood, we cause alist to become a fast alist before executing form, and we check the various conditions outlined above before returning the final value.

Note that with-stolen-alist will cause logically tail-recursive functions not to execute tail-recursively if its cleanup phase happens after the tail-recursive call returns.