#190 macrolet/flet inside load-time eval-when don't evaluate — alexandria types.lisp frob registers garbage deftype names

open
Opened by atgreen

types.lisp's numeric-subtype generator ((macrolet ((frob ...)) with an flet make-subtype-name) inside eval-when) half-runs during load: 36 deftypes register under the UNEVALUATED form (FUNCALL MAKE-SUBTYPE-NAME POSITIVE-~A) instead of POSITIVE-INTEGER etc. (registry inspection 2026-07-02; the plain deftypes — proper-list, array-index, string-designator... — register correctly). The MACROEVAL-PASSTHRU report (bd5f8af) names make-subtype-name/make-predicate-name/make-docstring falling through 36-45x each.

Interim (same-day): %deftype-register skips non-symbol names (garbage entries are unreachable anyway), and the prelude registers the standard positive/negative/non-positive/non-negative subtypes over integer/fixnum directly, so check-type positive-integer (the alexandria io chain, cave#189c) works. Real fix: macrolet + flet evaluation at load time (likely via the hosted path — related to cave#186 tiers 2-3).

Comments (1)

atgreen3992786005

STILL RELEVANT — direct line to cave#287 (2026-07-11): alexandria via asdf now LOADS end-to-end, and the residual '%DEFTYPE-REGISTER: not a byte-vector' errors on the double-float predicates are exactly this issue's frob path (macrolet/flet inside load-time eval-when producing garbage deftype names). #287 has the fresh repro context; fixing this closes that half of #287.