Equal is too general. Diferrent literals are considered the same and
if you modify destructively one of them, then other were modified too.
((floatp sexp) (float-to-string sexp))
((characterp sexp) (code "\"" (escape-string (string sexp)) "\""))
(t
- (or (cdr (assoc sexp *literal-table* :test #'equal))
+ (or (cdr (assoc sexp *literal-table* :test #'eql))
(let ((dumped (typecase sexp
(symbol (dump-symbol sexp))
(string (dump-string sexp))