Commit graph

7772 commits

Author SHA1 Message Date
Marius Gerbershagen
deefc21c9d deftype: implement &environment parameters
The deftype expansion functions now take two parameters, the type
argument and an environment. More precisely, for an atomic type 'x the
type argument for the expansion function is given by '(x) while for a
non-atomic type '(x y z) it is given by '(x y z). This also fixes the
value of &whole parameters in deftype lambda lists. The new behaviour
is consistent with SBCL and CCL.

Fixes #750
2025-04-08 21:57:53 +02:00
Daniel Kochmański
7e3dc96fa5 Merge branch 'improve-ensure-directories-exist' into 'develop'
ensure-directories-exist: minor improvements

See merge request embeddable-common-lisp/ecl!340
2025-03-17 20:23:42 +00:00
Marius Gerbershagen
270b3a4157 cmp: fix compiler-macro for make-array
Constant arguments for the dimensions were not handled correctly. The
valid-array-index function was lost in a refactor some time ago.
Moreover, we need to check all of the conditions on the
dimensions (limits on rank, dimension and total size) using an AND
statement instead of checking only the first condition using OR.
2025-03-02 19:36:06 +01:00
Marius Gerbershagen
a3d7036c36 ensure-directories-exist: minor improvements
Simply call mkdir and ignore EEXIST errors to prevent race conditions
when two processes try to create a directory at the same time. Also
avoids a redundant syscall since by not calling si::file-kind, so this
should be slightly faster.
2025-03-01 17:52:26 +01:00
Marius Gerbershagen
31bcb06d83 use separate directory for --with-extra-files to avoid name clashes
Fixes #772
2025-02-22 20:18:42 +01:00
Daniel Kochmański
8d34f874d0 DESCRIBE prints arguments and source information for operators
After this commit DESCRIBE prints two additional pieces of information below the
docstring. To avoid duplication, corresponding arg piece in doc/help.lsp has
been removed. Fixes #711.
2025-01-28 09:22:08 +01:00
Daniel Kochmański
77dc322364 bignum: factor out serialization functions for bignum 2025-01-20 12:39:59 +01:00
Daniel Kochmański
1102e58e0e bignum: replace numerous references to mpz with _ecl_big trampolines 2025-01-20 12:39:59 +01:00
Daniel Kochmański
ceae17c1bb bignum: replace references to gmp limbs with ecl macros
GMP_LIMB_BITS -> ECL_BIGNUM_LIMB_BITS
mp_limb_t -> ecl_limb_t
2025-01-20 12:39:59 +01:00
Daniel Kochmański
a826e65af0 bignum: internal interface cleanup
Remove unused wrappers and move things used only in big.d to that file.
2025-01-20 12:39:57 +01:00
Daniel Kochmański
c5f7b48a96 ecl_to_float: use the function ratio_to_float 2025-01-20 12:08:50 +01:00
Daniel Kochmański
44033ce73e si_need_to_make_load_form_p: use hash table for load form cache
For very long lists going with list search gives us O(n²).
2024-12-29 20:32:25 +01:00
Daniel Kochmański
295dfc0cd8 printer: fix the write_ugly method for bclosure
We've made an implicit cast from bclosure to bytecodes, so instead of a name
we've printed bytecodes itself.

Except from thsi fix we also write the closure address to make it possible to
distinguish two different closures over the same function.
2024-12-18 10:47:17 +01:00
Daniel Kochmański
58ffd18cc5 Merge branch 'emscripten-lazy-loading-files' into 'develop'
avoid unnecessary network requests when reading directories on emscripten

See merge request embeddable-common-lisp/ecl!335
2024-12-15 19:13:32 +00:00
Daniel Kochmański
f73d4babbd Revert "Merge branch 'remove-small-cons' into 'develop'" 2024-12-15 10:01:30 +00:00
Marius Gerbershagen
e41a5efcb5 avoid unnecessary network requests when reading directories on emscripten
If we call stat in order to find out if a filename points to a
directory or an ordinary file, the emscripten stdlib may need to do a
network request to find out the size of the file even though we don't
care about that. This happens for files created with
FS.createLazyFile() by emscripten. By using readlink/opendir when
possible we avoid that.
2024-12-14 14:58:25 +01:00
Daniel Kochmański
82e01c0b7d cosmetic: replace @'t' with ECL_T in core 2024-12-11 12:38:30 +01:00
Daniel Kochmański
31fdffa6ab core: remove the "small-cons" feature and build flag 2024-12-06 13:04:34 +00:00
Daniel Kochmański
a08d60d11a process: check for bindings_array in env (c.f the previous commit) 2024-12-06 12:28:25 +01:00
Daniel Kochmański
6b2a0d7ed0 process: alloc_process used OBJNULL instead of ECL_NIL 2024-12-06 11:43:40 +01:00
Daniel Kochmański
fcd9abba71 universal_error_handler: print more of the error
Having *PRINT-LENGTH* at 3 is not satisfactory, especially in the early handler
where there are no other means to introspect errors. Change it to 8.

Before:

    ;;; Message:
    |TYPE-ERROR|
    ;;; Arguments:
    (:|EXPECTED-TYPE| |FUNCTION| :|DATUM| ...)

After:

    ;;; Message:
    |TYPE-ERROR|
    ;;; Arguments:
    (:|EXPECTED-TYPE| |FUNCTION| :|DATUM| (|QUOTE| |WHILE|))
2024-12-06 10:20:39 +01:00
Daniel Kochmański
3f8e82351d build: remove a workaround in bdwgc masking a bug in bdwgc 8.2.4 2024-12-05 22:28:33 +01:00
Daniel Kochmański
6246c8aa85 build: regenerate configure script with autoconf 2.72 2024-12-05 22:27:10 +01:00
Daniel Kochmański
dd14c9bf71 bdwgc: update bundled gc to version 8.2.8
libatomic_ops did not change in the meantime
2024-12-05 22:21:45 +01:00
Daniel Kochmański
0d8720dd49 util: turn off thread-events in proposed gdbinit 2024-12-05 14:07:14 +01:00
Daniel Kochmański
8d6a9ab3f0 gmp: fix the configure script
The config script as it is now fails on gcc version 14.2.1 20240912 (Red Hat 14.2.1-3) (GCC)
This is because one test did not include string.h before memcpy, and two other tests relied
on implicit function definitions -- in one test definitions are moved before the first use
and the second test is removed wholesale as it relies on undefined behavior and tests some
obscure (and ancient) gcc flavor segfault.
2024-11-27 22:10:37 +01:00
Daniel Kochmański
5c138480d0 hash: fix numerous issues with weak hash tables
1. We don't normalize garbage collected entries.

Doing that created a false free bucket, so GETHASH and SETHASH stopped searching
for entry too early. Fixes #761.

2. MAPHASH does not map over garbate collected entries.

Previously MAPHASH did not call copy_entry, so it was always accessing key/val
even if they were recently garbage collected, effectively mapping over NIL in
the place of the collected value

3. HASH-TABLE-CONTENT had a similar issue to MAPHASH.

4. REMHASH did fill the hole, but didn't replace the moved entry with a free
bucket, moreover we've used the value to comptue the hash when computing the
distance function.

Moreover we introduce an optimization, where SETHASH first tries to fill a
garbage collected entry in the bucket before it tries to extend the table.
2024-11-01 08:46:33 +01:00
Daniel Kochmański
63f0ba1ab8 tests: add regression tests for weak hash tables
See #761 and #762.
2024-11-01 08:46:33 +01:00
Daniel Kochmański
50879fd5d9 hash: factor out _ecl_store_key and _ecl_store_val for weak htables
This makes the function _ecl_remash_weak and ecl_sethash_weak closer to the
"default" macros HASH_TABLE_REMOVE and HASH_TABLE_SET.
2024-11-01 08:46:33 +01:00
Daniel Kochmański
1ddbb00b53 hash: factor out _ecl_hash_test for weak hash tables
This makes the function _ecl_weak_hash_loop closer to the "default" hash LOOP
macro and simplifies _ecl_sethash_weak.
2024-11-01 08:46:33 +01:00
Daniel Kochmański
e2dd1ef0ac cosmetic: indent and add a few comments and fixme's 2024-11-01 08:46:33 +01:00
Daniel Kochmański
df0992afe6 Revert "io: *TERMINAL-IO* output stream is stderr"
This reverts commit e345fd612c.
2024-11-01 08:43:01 +01:00
Daniel Kochmański
e345fd612c io: *TERMINAL-IO* output stream is stderr
This is to ensure that the line is not buffered and that it is visible to the
user. It is a synonym from *QUERY-IO* and *DEBUG-IO* which both are interactive.
2024-11-01 08:20:50 +01:00
Daniel Kochmański
7e25107779 repl: always call clear-input when SERIOUS-CONDITION is encountered
Consider the following input from string: #j :r1

First the reader signals a condition that there is no dispatch character macro
for #j, and then we select the first restart. That's clearly undesireable.
2024-10-31 17:54:41 +01:00
Daniel Kochmański
4a49130ad5 tpl: repl and debugger use only *query-io* and *debug-io* 2024-10-31 17:54:40 +01:00
Daniel Kochmański
271166a5b0 hash-table: fix a potential deadlock while rehashing
Closes #760.
2024-10-29 10:05:45 +01:00
Daniel Kochmański
c67ec1aba5 cosmetic: fix indent 2024-10-28 21:11:30 +01:00
Daniel Kochmański
24f5a3bb8f makunbound: use ECL_SETQ and not ECL_SET
The specification says that it makes the symbol unbound; that paired with the
definition of BOUNDP indicates, that what is meant is the binding in the dynamic
environment (and for consistency we want to make it behave as a pair to BOUNDP).

Note that this behavioral change matches implementations like CCL and SBCL, so
this change improves the compatibility.

The issue with interpretation comes from the subheader "Side Effects" in the
standard that states: "The value cell of symbol is modified", it should state
that "The value cell of symbol might be modified".
2024-10-25 09:29:00 +02:00
Daniel Kochmański
c235a57ded Small compatibility fixes
- add a new character name alias Formfeed (for Page) -- sometimes used in the wild
- export asdf:registered-system (exported upstream, some systems use it)
2024-10-07 07:42:22 +02:00
Daniel Kochmański
19a3b97eee bdwgc: add appropriate definition for cosmopolitan libc 2024-09-09 10:14:19 +02:00
Daniel Kochmański
f585847506 initial port to cosmopolitan libc 2024-09-09 10:14:17 +02:00
Daniel Kochmański
8952725847 process: don't call cl_sleep on a variable declared static
We call ecl_musleep that avoids the hassle of converting values back and forth
between lisp and c world.

The change is prompted by a potential bug in cosmopolitan libc, where the value
stored in a static variable can't be passed to a function in a different
compilation unit. Unmodified code lead to a segmentation fault with cosmocc.
2024-09-09 10:11:44 +02:00
Marius Gerbershagen
c0d0f2f891 restore ability to compile without --disable-shared on emscripten
SHARED_LDFLAGS, BUNDLE_LDFLAGS and PROGRAM_LDFLAGS are ignored with
--disable-shared.
2024-08-17 13:11:53 +02:00
Marius Gerbershagen
003a7edd6b emscripten: add linker flag to allow bdwgc to work correctly
See https://github.com/ivmai/bdwgc/issues/650 for more discussion.
2024-08-17 12:43:02 +02:00
Daniel Kochmański
4f0fed4698 ffi: fix size-of-foreign-type when called on structore with no slots
Fixes #752.
2024-06-21 21:43:43 +02:00
Daniel Kochmański
f5e3de23fd Merge branch 'faster-function-calls-fix' into 'develop'
Fixes for the faster function call branch

Closes #737

See merge request embeddable-common-lisp/ecl!327
2024-06-18 05:59:16 +00:00
Daniel Kochmański
ac2b53d66a emscripten: don't enable shared in the configure script 2024-06-16 17:55:50 +02:00
Daniel Kochmański
366a77a013 cmpopt-sequence: fix a regression with loop 2024-06-16 17:54:37 +02:00
Daniel Kochmański
f0147072a2 loop: barf on nonconformant loop detection
The specification says that the simple loop is determined when all forms are
compound. Fixes #748.
2024-06-06 08:10:41 +02:00
Marius Gerbershagen
1a0aa0a52e gray streams: add missing default method for stream-interactive-p
According to the documentation we should always return nil.
2024-05-18 13:30:49 +02:00