On 2025-04-23 14:59, David Ponce wrote: > > While working with cl-types.el I discovered a nasty side effect > of byte compilation on the cl--type-list. > > I can't explain what is going on :-( > > Here is a recipe: > > - run emacs -Q > > - load cl-type.el (the last version previously attached) > > - load cl-type-recipe.el (attached) > > - In the scratch buffer eval cl--type-list.  Result is expected: > >   (cons-cdr-foo cons-car-foo) > > - Then open cl-type-recipe.el and byte-compile it with >   M-x emacs-lisp-byte-compile > > - Then eval again cl--type-list in the scratch buffer, and now the >   result is something like this: > >   (# #) > >   Which completely breaks cl-types ! > > I hope you can shed some light on what is going on here. > > Thanks! > It seems the side effect is more general than just with cl-type.el. I attached cl-type-recipe2.el, another simple recipe to illustrate with current `cl-deftype'. - Run emacs -Q and load cl-type-recipe2.el. - Then in the scratch buffer eval: (symbol-plist 'cons-car-foo) => (cl-deftype-handler #[nil ((list 'satisfies #'(lambda (x) (eq (car-safe x) 'foo)))) (t) nil "A cons with a `foo' car."]) - Then open cl-type-recipe2.el and M-x emacs-lisp-byte-compile - Then in the scratch buffer eval again: (symbol-plist 'cons-car-foo) => (cl-deftype-handler #[nil (`(# ,(# (x) (# (# #) '#)))) (t) nil "A cons with a `foo' car."]) And, of course: (cl-typep '(foo) 'cons-car-foo) => (invalid-function #) Without compile in the `cl-eval-when' in `cl-deftype', there is no side effect. Hope it will help. David