Embeddable Common-Lisp main repository.
Find a file
Daniel Kochmański 25f825efff subtypep: don't add a new tag for equivalent types
The function MAKE-REGISTERED-TAG calls FIND-TYPE-BOUNDS to determine supertypes
that need to be updated with the new bit, and subtypes that need to be included
in the new tag.

Thiis procedure was bogus because it did not recognize equivalent types. That
lead to a situation, where synonymous types could have been added twice with
incorrect relation. Consider:

type A: 011
type B: 001

We add a type C that is equivalent to A and B is subtype (to both). With the old
method the result would be:

type A: 111
type B: 001
type C: 101

So if we had later queried wheter A is subtypep to C, then the answer would be
incorrectly NIL.

The bug was hidden by the fact, that CANONICAL-TYPE expands type aliases when
they are symbols, so we had never encountered a situation where equivalent types
had different names in *ELEMENTARY-TYPES*. This changes when we introduce the
new kingdom for CONS type, because the key is (CONS X Y), and symbols in type
names X Y are not expanded, so

  (CONS (OR FIXNUM BIGNUM)) is not EQUAL to (CONS INTEGER)
2025-08-27 10:46:58 +02:00
contrib Small compatibility fixes 2024-10-07 07:42:22 +02: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 subtypep: don't add a new tag for equivalent types 2025-08-27 10:46:58 +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 Update changelog 2025-08-11 10:01:41 +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 Clarify INSTALL instructions for Windows (replace ...) 2025-08-23 14:14:12 +02:00
LICENSE cleanup: update license to lgpl-2.1+ in both headers and text 2024-01-14 12:22:27 +01:00
Makefile.in Makefile: allow both install and flatinstall targets 2024-02-24 22:30:16 +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.