Get rid of the PCL method-lambda macrolets completely (see also 0.9.12.6). * Replace PV-ENV with a global macro that switches its behaviour based on the environment where it's expanded. * The macrolets created by BIND-*-LEXICAL-METHOD-MACROS were only used by BIND-LEXICAL-METHOD-FUNCTIONS. Merge them into a BIND-*-LEXICAL-METHOD-FUNCTIONS without the macrolets. Also remove some dead code in the macros (I'm sure it made sense 15 years ago).
Get rid of some low-level hotspots in the compiler: * Use simple-arrays for assembler segment buffers. * Move the checking of policy variable name validity from run-time to compile-time where possible. * In POLICY, don't fetch the values of optimization qualities that aren't used in the body. * When creating debug-names, don't call FORMAT when encountering values of unhandled types. Instead mark them with a suitable s-exp.
Speed up CLOS compilation. (For example, 45% speedup for compiling asdf.lisp, 30% for compiling McCLIM on x86-64). The code generated by PCL in MAKE-METHOD-LAMBDA has lots of macrolets, which for the most part are never expanded. Modify it to only create the macrolets that are really used in the body, so that the useless local macro-functions don't need to be compiled. You might wonder why this is done in PCL, rather than as a general purpose compiler change by lazily compiling the definitions when they're first expanded. I tried that first, and while it worked, the end result was rather messy. Since users can access the macro-functions through the environment, we need to minimally compile them to be ansixly correct, and we don't really have much useful minimal compilation infrastructure for at the moment. Ensuring that the source of the macro-functions is stored properly, e.g. for (MACROLET ((FOO ...)) (DECLAIM (INLINE BAR)) (DEFUN BAR () (FOO))) is also somewhat tricky.