1. We've implemented SPECIALIZER-DIRECT-METHODS and SPECIALIZER-DIRECT-GENERIC-FUNCTIONS as accessors to slots in the specializer DIRECT-METHODS and DIRECT-GENERIC-FUNCTIONS. 2. As specified in MOP these collections are maintained by ADD-DIRECT-METHOD and REMOVE-DIRECT-METHOD functions. 3. When we finalize standard-method, we remove old methods and among them is a method for a function METHOD-GENERIC-FUNCTION, and that function must be called from REMOVE-DIRECT-METHOD when we want to update SPECIALIZER-DIRECT-GENERIC-FUNCTIONS, so we end up in a debugger that there is no specialization for this function. We adapt approach similar to one taken in SBCL (did they encounter a similar issue?): specializer class has a SPECIALIZER-METHOD-HOLDER accessor which stores a CONS cell. We add/remove methods to CAR and take generic functions from CDR. The trick is that CDR is lazily computed when SPECIALIZER-DIRECT-GENERIC-FUNCTIONS is called and invalidated when we add and remove method. |
||
|---|---|---|
| contrib | ||
| examples | ||
| msvc | ||
| src | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| appveyor.yml | ||
| CHANGELOG | ||
| configure | ||
| COPYING | ||
| INSTALL | ||
| LICENSE | ||
| Makefile.in | ||
| README.md | ||
ECL stands for Embeddable Common-Lisp. The ECL project aims to produce an implementation of the Common-Lisp language which complies to the ANSI X3J13 definition of the language.
The term embeddable refers to the fact that ECL includes a Lisp to C compiler, which produces libraries (static or dynamic) that can be called from C programs. Furthermore, ECL can produce standalone executables from Lisp code and can itself be linked to your programs as a shared library. It also features an interpreter for situations when a C compiler isn't available.
ECL supports the operating systems Linux, FreeBSD, NetBSD, DragonFly BSD, OpenBSD, Solaris (at least v. 9), Microsoft Windows (MSVC, MinGW and Cygwin) and OSX, running on top of the Intel, Sparc, Alpha, ARM and PowerPC processors. Porting to other architectures should be rather easy.