Embeddable Common-Lisp main repository.
Find a file
Daniel Kochmański 20d9266664 proclaim-class: use the correct env and don't redefine in bytecmp
PROCLAIM-CLASS in ccmp had the following form in its body:

(ext:with-backend
  :c/c++ (register-in-ccmp)
  :bytecmp (register-globally))

with a clear intention, that CCMP-compiled code should use the first path, and
BCMP-compiled code should use the second. But that's not what this operator
does. This operator caused, that when CCMP was compiled with CCMP, then it
always took (register-in-ccmp) path (even for bytecodes compiler(!)), while when
CCMP was compiled with BCMP (i.e with a flag --disable-shared and compiler is
not builtin), then modifying global instance was always called, disregrading
whether we were compiling with CCMP or BCMP at the moment.

We've replaced this with a more precise statement that decides at runtime which
compiler to chose:

(if *compiler-in-use*
    (register-in-ccmp)
    (register-globally))

The other part of the problem was that registering the class definition globally
in the bytecodes compiler (or in ccmp when --disable-shared was true), could
redefine existing class in runtime environment with a forward-referenced-class,
and that lead to the environment corruption. Consider:

(compile-file "foo.lisp" :load t)   ;defines globally at load time "#<standard-class foo>"
(compile-file "foo.lisp" :load nil) ;defines globally at compile time "#<forward-class foo>"

So after compiling the second file, we don't have the standard class foo, that
we may depend on in later files.

Fixes #843.
2026-05-05 11:00:38 +02:00
contrib update asdf to 3.1.8.11 2026-03-09 15:42:41 +01:00
examples Update asdf_with_dependence example readme 2023-07-09 18:04:35 +00:00
msvc streams: add binary encoders and decoders to the mix 2025-08-11 10:01:40 +02:00
src proclaim-class: use the correct env and don't redefine in bytecmp 2026-05-05 11:00:38 +02:00
.gitignore .gitignore: add the directory /local as ignored 2023-05-22 10:16:39 +02:00
.gitlab-ci.yml Update gitlab-ci to run pipeline less frequently (2) 2025-07-26 16:59:24 +02:00
appveyor.yml Add simple appveyor msvc build 2017-05-13 00:12:13 +02:00
CHANGELOG proclaim-class: use the correct env and don't redefine in bytecmp 2026-05-05 11:00:38 +02:00
configure Preserve quoting when passing the arguments to the build directory 2008-08-27 09:50:44 +02:00
COPYING cleanup: update license to lgpl-2.1+ in both headers and text 2024-01-14 12:22:27 +01:00
INSTALL doc: update install for macos 2026-03-13 19:22:36 +01:00
LICENSE cleanup: update license to lgpl-2.1+ in both headers and text 2024-01-14 12:22:27 +01:00
Makefile.in tests: implement tests for cross compilation of user code 2025-11-21 19:08:14 +01:00
README.md update readme (typos) 2015-08-31 08:22:52 +00:00

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.