Daniel Kochmański
f6e62a050b
modules: [7/n] introduce ecl_module_stacks
2026-03-08 20:01:34 +01:00
Daniel Kochmański
e1c5b915c6
modules: [6/n] introduce ecl_module_aux
2026-03-08 20:01:34 +01:00
Daniel Kochmański
aed13ee7e9
modules: [5/n] introduce ecl_module_ffi
2026-03-08 20:01:34 +01:00
Daniel Kochmański
4efc018094
modules: [4/n] introduce ecl_module_bignum
2026-03-08 20:01:34 +01:00
Daniel Kochmański
726b84a8be
modules: [3/n] introduce ecl_module_process
2026-03-08 20:01:34 +01:00
Daniel Kochmański
001422e3b9
modules: [2/n] introduce ecl_module_unixint
2026-03-08 20:01:34 +01:00
Daniel Kochmański
6116a83fbb
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-08 20:01:34 +01:00
Daniel Kochmański
6f21e51667
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-08 20:01:34 +01:00
Daniel Kochmański
01287175b2
process: move ecl_clear_bignum_registers to _dealloc_env
...
This resolves a fixme.
2026-03-08 20:01:34 +01:00
Daniel Kochmański
0846b149df
process: use GC_thread_is_registered() instead of the_env->cleanup
...
This allows us to remove unnecessary bookkeeping.
2026-03-08 20:01:34 +01:00
Daniel Kochmański
0451796b51
nucleus: [2/n] move processing unit managament to nucleus
2026-03-08 20:01:34 +01:00
Daniel Kochmański
24c6ba6456
nucleus: [1/n] move processing unit managament to nucleus
2026-03-08 20:01:34 +01:00
Daniel Kochmański
6a35457248
exceptions: make reader.d usable in the early env
2026-03-08 20:01:34 +01:00
Daniel Kochmański
ad50724d47
exceptions: make stream.d usable in the early env
...
This is a step towards introducing the I/O system.
2026-03-08 20:01:34 +01:00
Daniel Kochmański
f057e1b5af
exceptions: make character.d usable in early runtime
2026-03-08 20:01:34 +01:00
Daniel Kochmański
eff8a495de
exceptions: make cfun_dispatch use exception trampolines
2026-03-08 20:01:34 +01:00
Daniel Kochmański
96de2e24ad
exceptions: dispatch signals exceptions (not conditions)
2026-03-08 20:01:34 +01:00
Daniel Kochmański
827fbfc268
exceptions: runtime stack error signals exceptions (not conditions)
...
Replace calls to CEstack_overflow with exceptions - this is a necessary step
before moving stacks into nucleus.
2026-03-08 20:01:34 +01:00
Daniel Kochmański
4b389b5341
exceptions: interpreter signals exceptions (not conditions)
2026-03-08 20:01:34 +01:00
Daniel Kochmański
a71eebeb0e
exceptions: introduce the concept of an exception
...
Exceptions, unlike conditions, are stack allocated and can't be captured.
2026-03-08 20:01:34 +01:00
Daniel Kochmański
add69a9b1a
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-08 20:01:34 +01:00
Daniel Kochmański
dd8f985dd8
signals: handler-bind handles only objects of type CONDITION
2026-03-08 20:01:34 +01:00
Daniel Kochmański
9348ddf462
signals: introduce signals to the early environment
2026-03-08 20:01:34 +01:00
Daniel Kochmański
8a411415b7
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-08 20:01:34 +01:00
Daniel Kochmański
e8eefd5963
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-08 20:01:34 +01:00
Daniel Kochmański
4ab7fb50a7
boot: move ecl_core_struct to boot.d
2026-03-08 20:01:34 +01:00
Daniel Kochmański
1cf9b006d2
boot: move protect and dummy tags to boot.d
2026-03-08 20:01:33 +01:00
Daniel Kochmański
1dbf4664d6
boot: move early constants from main.d to boot.d
2026-03-08 20:01:33 +01:00
Daniel Kochmański
39fd5a954a
boot: add a file boot.d for booting the core
...
Currently it contains only option setters.
2026-03-08 20:01:33 +01:00
Daniel Kochmański
dc0f2bd2c7
boot: add a file escape.d for program control transfer
...
Currently it contains early errors and backtrace.
2026-03-08 20:01:33 +01:00
Daniel Kochmański
67f22249de
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-08 20:01:33 +01:00
Daniel Kochmański
e57ca30637
reader: make token parser installable in the readtable
2026-03-07 22:42:12 +01:00
Daniel Kochmański
09e8d7dd04
reader: merge back readtable.d into read.d and reader.d
2026-03-07 22:42:12 +01:00
Daniel Kochmański
6f22cbd27d
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-07 22:42:12 +01:00
Daniel Kochmański
cf9033a05d
reader: init_read has now shorter definitions (use macros)
2026-03-07 22:42:12 +01:00
Daniel Kochmański
c5cf707dfe
reader: cosmetic change
2026-03-07 22:42:12 +01:00
Daniel Kochmański
27fb51b98f
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-07 22:42:12 +01:00
Daniel Kochmański
83aa9b8df4
reader: low level functions accept explicit readtable argument
...
Previously the readtable was accessed as a value of a variable *READTABLE*.
2026-03-07 22:42:12 +01:00
Daniel Kochmański
f1c3edfeb3
reader: wrap up the escaping and remove kludges
2026-03-07 22:42:12 +01:00
Daniel Kochmański
b6ac33834f
reader: honor *read-suppress* in #\foo:bar reader
2026-03-07 22:42:12 +01:00
Daniel Kochmański
9369946933
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-07 22:42:12 +01:00
Daniel Kochmański
29a4a2c51a
reader: separate token parsing from token reading
...
Parsing the token ends in a separate file.
2026-03-07 22:42:12 +01:00
Daniel Kochmański
6828cb7005
reader: use token object to pass tokens prior parsing
2026-03-07 22:42:12 +01:00
Daniel Kochmański
d495a41464
reader: add a new object to the system ecl_token
...
It represents unparsed token constructed by the reader.
2026-03-07 22:42:12 +01:00
Daniel Kochmański
8281d2316f
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-07 22:42:12 +01:00
Daniel Kochmański
26b556ea00
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-07 22:42:12 +01:00
Daniel Kochmański
4e7aa4e358
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-07 22:42:12 +01:00
Daniel Kochmański
2b36abd0b7
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-07 22:42:12 +01:00
Daniel Kochmański
832850bdee
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-07 22:42:12 +01:00
Daniel Kochmański
aef1cd8129
reader: simplify and clarify arguments of ecl_read_token
2026-03-07 22:42:12 +01:00