On 04/06/2014 05:36 AM, Stefan Monnier wrote: >> This scheme works and passes Dmitry's test, but the resulting >> Vpure_reachable vector has over 8,000 items. Most of these items are >> ordinary interned symbols. > > What objects are there besides symbols in Vpure_reachable? Just symbols for me. > If we can reduce Vpure_reachable to only contain symbols, then we can > replace it with a `pinned' bit in the Lisp_Symbol struct and then walk > the list of symbols during mark, marking all those symbols with the > `pinned' bit. The pinned bit approach is exactly what I implemented, except that we walk obarray, like we already do, instead of all symbols. Your approach would require that we check for non-symbols in purecopy and reject them, and it'd have a bigger performance impact, since we'd then need to walk the entire symbol list essentially twice. I'd strongly prefer the fully general approach in my patch. It isn't *that* complicated.