Commit graph

9152 commits

Author SHA1 Message Date
Daniel Kochmański
49e2aed7be modules: [A/n] move the environment allocators to nucleus
Also clean up initialization code across different paths to have the same order.
2026-03-15 09:47:02 +01:00
Daniel Kochmański
c9f41e29f1 modules: [9/n] introduce ecl_module_thread 2026-03-15 09:47:00 +01:00
Daniel Kochmański
4ef1a5097b modules: [7/n] introduce ecl_module_stacks 2026-03-15 09:46:58 +01:00
Daniel Kochmański
75a3449eb4 modules: [6/n] introduce ecl_module_aux 2026-03-15 09:46:55 +01:00
Daniel Kochmański
b8e5d2b6c0 modules: [5/n] introduce ecl_module_ffi 2026-03-15 09:46:52 +01:00
Daniel Kochmański
f4a0e6ee36 modules: [4/n] introduce ecl_module_bignum 2026-03-15 09:46:45 +01:00
Daniel Kochmański
9469886a62 squash [3/n] 2026-03-15 09:46:45 +01:00
Daniel Kochmański
e26cea7a56 modules: [3/n] introduce ecl_module_process 2026-03-15 09:46:45 +01:00
Daniel Kochmański
34e02dfb90 modules: [2/n] introduce ecl_module_unixint 2026-03-15 09:46:41 +01:00
Daniel Kochmański
79c56803b5 modules: [1/n] introduce ecl_module_gc
We also remove conditionalization for garbage collector inclusion in autotools.
When we propose an alternative gc, then we may decide to put them back, or to
add necessary ifdef statements directly in files.

Moreover untangle c-stack from the gc code and assign the stack base with a
rough guess only when it is not initialized yet (GC will always fill it).

Finally remove a kludge from ecl_adopt_cpu and disable colleciton until the cpu
is fully initialized.
2026-03-15 09:46:37 +01:00
Daniel Kochmański
df66f26cb6 modules: [0/n] introduce a new structure ecl_module in the system
This will allow us to decouple forward system initialization from the early
process code.
2026-03-15 09:46:31 +01:00
Daniel Kochmański
504658d3ef process: move ecl_clear_bignum_registers to _dealloc_env
This resolves a fixme.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
d2a2a9afd7 process: use GC_thread_is_registered() instead of the_env->cleanup
This allows us to remove unnecessary bookkeeping.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
d6c0be95a9 nucleus: [2/n] move processing unit managament to nucleus 2026-03-13 19:23:06 +01:00
Daniel Kochmański
46b05d88b8 nucleus: [1/n] move processing unit managament to nucleus 2026-03-13 19:23:06 +01:00
Daniel Kochmański
e463ff4f85 signals: define *SIGNAL-HANDLERS* in cold_boot
I've also renamed *HANDLER-CLUSTERS* to a more appropriate *SIGNAL-HANDLERS*.
Currently this symbol is imported to the SYSTEM package, although this may be
revised in the future to cater to multiple global environments. Alternatively
the SYSTEM package may be common to all runtimes.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
3146ac1cf3 signals: handler-bind handles only objects of type CONDITION 2026-03-13 19:23:06 +01:00
Daniel Kochmański
fd6cd03378 signals: introduce signals to the early environment 2026-03-13 19:23:06 +01:00
Daniel Kochmański
06483e14d8 signals: rewrite signal handling to use functions and not lists
Instead of storing lists in *HANDLER-CLUSTERS*, we define functions that are
called unconditionally on the handler. HANDLER-BIND defines that function to be
a typecase that is dispatched based on the conditiont type, as specified by CL.

This change will aid further refactor.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
f6dc3d88bf boot: move ecl_eql to a separate file eql.d
This is a low-level comparison operator. We opencode EQL comparison for bignums
to avoid a dependency on GMP (in this file).
2026-03-13 19:23:06 +01:00
Daniel Kochmański
b84da6d1bb boot: move ecl_core_struct to boot.d 2026-03-13 19:23:06 +01:00
Daniel Kochmański
f6f21ce38d boot: move protect and dummy tags to boot.d 2026-03-13 19:23:06 +01:00
Daniel Kochmański
0cddd828bc boot: move early constants from main.d to boot.d 2026-03-13 19:23:06 +01:00
Daniel Kochmański
808bc06531 boot: add a file boot.d for booting the core
Currently it contains only option setters.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
73689cdb29 boot: add a file escape.d for program control transfer
Currently it contains early errors and backtrace.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
fb703882b8 hash: rename cl__make_hash_table to ecl_make_hash_table
The latter name follows the codebase convention that functions that do not work
in the environment have a prefix ecl_. The old name is defined in legacy.h.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
f411ad5198 hash: use explicit ecl_returnX forms instead of (@return)
This also fixes an issue, where si:hash-table-synchronized-p did not populate
VALUES (it used raw return).
2026-03-13 19:23:06 +01:00
Daniel Kochmański
14e77f4cd4 reader: open-code token-specific version of ecl_push_string_extend
This way we make the reader independent of string.d and array.d while still
enabling adjustable token buffers.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
ba3613d976 reader: make token parser installable in the readtable 2026-03-13 19:23:06 +01:00
Daniel Kochmański
b397287dda reader: merge back readtable.d into read.d and reader.d 2026-03-13 19:23:06 +01:00
Daniel Kochmański
515037a038 reader: store separately macro and a dispatch table
This improves code readibility, because dispatch macro characters are built on
top of "normal" macro characters.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
9ab1e5bce3 reader: init_read has now shorter definitions (use macros) 2026-03-13 19:23:06 +01:00
Daniel Kochmański
2bab4d83e5 reader: cosmetic change 2026-03-13 19:23:06 +01:00
Daniel Kochmański
292eab75d8 reader: turn separate parameters into flags in low-level read
Instead of passing parameters as values, we make a bitfield:

ECL_READ_LIST_DOT, ECL_READ_RETURN_IGNORABLE, ECL_READ_SUPPRESS,
ECL_READ_ESCAPE_FIST;

this way we don't rely on a dynamic variable in a low-level function.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
09cfa40676 reader: low level functions accept explicit readtable argument
Previously the readtable was accessed as a value of a variable *READTABLE*.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
2d9da9ce83 reader: wrap up the escaping and remove kludges 2026-03-13 19:23:06 +01:00
Daniel Kochmański
ab2a464eaf reader: honor *read-suppress* in #\foo:bar reader 2026-03-13 19:23:06 +01:00
Daniel Kochmański
f9eddb83b2 reader: add new operators and fix found regressions
- low limit in escapes was off-by-one
- quoted character immediately after :, like :|foo| did not pare correctly
2026-03-13 19:23:06 +01:00
Daniel Kochmański
a82e7a095f reader: separate token parsing from token reading
Parsing the token ends in a separate file.
2026-03-13 19:23:06 +01:00
Daniel Kochmański
d91c4bc114 reader: use token object to pass tokens prior parsing 2026-03-13 19:23:06 +01:00
Daniel Kochmański
9f54582bda reader: add a new object to the system ecl_token
It represents unparsed token constructed by the reader.
2026-03-13 19:23:05 +01:00
Daniel Kochmański
939a6d87ad reader: cleanup of mapping over escape intervals
This still needs some work, but we remove CONS in favor of flat list of even
number of elements and simplify loops over them.
2026-03-13 19:23:05 +01:00
Daniel Kochmański
b997a03a35 reader: turn ecl_read_token into symbol/number parser
First it call ecl_only_read_token and then it parses it.
Fixes #814.
2026-03-13 19:23:05 +01:00
Daniel Kochmański
2cedabfac8 reader: factor out ecl_read_only_token from ecl_read_token
The end goal is to make ecl_read_token become ecl_parse_token and read tokens
only from ecl_read_only_token, to keep Common Lisp -specific processing out of
the token reader.
2026-03-13 19:23:05 +01:00
Daniel Kochmański
53f3576dc4 reader: store escape intervals on a stack
To enable access from both sides we store escape intervals in a vector (a
stack). This also fixes #813.
2026-03-13 19:23:05 +01:00
Daniel Kochmański
1a83e74f45 reader: always cons full escape_list
This is in preparation for separating CL-specific tokenization from general
rule. We need to carry information about all escaped characters even when we
don't change their case, this is to allow for interpretation of special token
characters, like ":" - when it is escaped then it has no meaning, otherwise it
separates the symbol from the package.
2026-03-13 19:23:05 +01:00
Daniel Kochmański
f270b54692 reader: simplify and clarify arguments of ecl_read_token 2026-03-13 19:23:05 +01:00
Daniel Kochmański
f6e9a36651 reader: factor out ecl_read_token from ecl_read_object_with_delimiter 2026-03-13 19:23:05 +01:00
Daniel Kochmański
16ac6aff8c reader: move the general-purpose reader from read.d to reader.d 2026-03-13 19:23:05 +01:00
Daniel Kochmański
b6c5aac5fd reader: move the readtable implementation from read.d to readtable.d 2026-03-13 19:23:05 +01:00