There are iusses, some stylistic, some related to comments in the code. - There is a comment here: > First, see if any of our defaults are `lambda', and > re-evaluate them and apply the value to our slots. I don't observe anything like this happening. Looks like it refers to eieio-default-eval-maybe (likely referring to any compound form with fbound car as to `lambda') which used to be in eieio-core in 27 but now is gone. Maybe we should drop this comment? - There is a comment: > For each slot, see if we need to evaluate it Slots are self-evaluating objects; I think it was meant to be “to evaluate its initform”. - There is FIXME > FIXME: We should be able to just do (aset this (+ i ) dflt)! Local variable dflt had been removed after Emacs 27 release. The comment should likely have been gone too, or at least updated. It suggests to assign the value of initform with a low-level `aset' applied to eieio--class struct but (1) I don't understand the + i shift (2) eieio--class is not declared to be of :type vector, neither does it inherit from a struct declared to be of :type vector. I suggest to replace the comment with “TODO: maybe specify eieio--class as vector and use aset here” - I employ when-let which requires subr-x at compile time. I can't check the build cleanly right now, only with some dirty reverts related to libseccomp issues but aside from that, this subr-x dependency doesn't break byte-compilation of eieio.el. I hope it's fine?