The problem was that it called Fequal, which can quit.
* src/fns.c (enum equal_kind):
New enum, to be used in place of a boolean.
(equal_no_quit): New function.
(Fmemql, Feql): Use it to compare floats, as a minor tuneup.
(assoc_no_quit): Use it to avoid quitting, the main point here.
(internal_equal): Generalize bool to enum equal_kind arg, so that
there are now 3 possibilities instead of 2. Do not signal an
error if EQUAL_NO_QUIT. Put the arg before the depth, since depth
should be irrelevant if the arg is EQUAL_NO_QUIT. All callers
changed.