Daniel Kochmański
a54570352a
[maybe] bytevm: open-code lexical environment allocation
...
To avoid dependency on vector.o we opencode allocating the vector.
Note that we can't use ecl_make_stack, because mallocated memory must be
reegistered as a root.
[todo] move finalizers to memory and fix t_bclosure
[note] ecl_stack_pshu never resizes the stack (realloc vs manual resize)
2026-03-15 09:47:50 +01:00
Daniel Kochmański
0f616e9e2c
[maybe] stacks: add more operations
2026-03-15 09:47:50 +01:00
Daniel Kochmański
357ef042ed
[maybe] boot: introduce a table with early symbols ecl_symbols
...
This table contains symbols that are essential to the core runtime: ECL_T,
ECL_UNBOUND, ECL_SIGNAL_HANDLERS, ECL_RESTART_CLUSTERs, ECL_INTERRUPTS_ENABLED,
ECL_ALLOW_OTHER_KEYS and ECL_UNBOUND.
The table is initialized with constexpr, so it is possible to use its elements
in static elements. We also add ecl_def_function to ecl-inl to allow
appropriating C functions into Lisp world at top level.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
f31a4b7a34
memory: add a new allocator function realloc
2026-03-15 09:47:50 +01:00
Daniel Kochmański
715f472565
memory: rename ecl_realloc to ecl_resize
2026-03-15 09:47:50 +01:00
Daniel Kochmański
12f1458a32
memory: ensure disabled interrupts in top-level operators
...
ecl_alloc_object, ecl_free_object
ecl_alloc, ecl_alloc_manual, ecl_alloc_atomic, ecl_dealloc
Moreover move all top-level ops to memory.d so they are not reliant on mem_gc.
The stubbed allocator uses manual memory managament for all ops.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
de73c24bd4
memory: move resource pools from reader.d to memory.d
...
si_get_buffer_string is used in a few places, and gneerally it is more
appropriate to put resources in memory.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
7d7352cf6b
memory: reify the type_info database
...
We store information about the object size, its pointers and name. This
information is later reused by the garbage collector.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
ee4dcb7a62
memory: move ecl_alloc_adjustable_*_string to memory.d
...
These constructors are used to provide buffers that may be returned to cl_core.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
4fc8bb7c45
memory: move ecl_cons to memory.d
...
ecl_cons requires a separate allocator because it may be a small cons.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
2130da17b5
memory: make it possible to configure the allocator
2026-03-15 09:47:50 +01:00
Daniel Kochmański
cffeae0a1d
stacks: elide unnecessary call to ecl_symbol_type
...
having this call makes interpreter dependent on symbol.d
2026-03-15 09:47:50 +01:00
Daniel Kochmański
bc8385486b
stacks: move early stacks to a separate file
...
This is necessary if we want to link them into nucleus without CL env baggage.
2026-03-15 09:47:50 +01:00
Daniel Kochmański
97406afb12
control: move aux throw/go/tagbody implementations to escape.d
2026-03-15 09:47:50 +01:00
Daniel Kochmański
8776a249d6
modules: [B/n] allow for building ecl without bdwgc and with nogc
...
In that case we use a dummy object nogc.o that contains stubs for GC-related
functions. It also defines a substitute module.
2026-03-15 09:47:02 +01:00
Daniel Kochmański
20ecefa4f6
modules: uninstall signal handlers when unixint is destroyed
2026-03-15 09:47:02 +01:00
Daniel Kochmański
ac05b750dd
modules: deallocate stacks when modules are destroyed
2026-03-15 09:47:02 +01:00
Daniel Kochmański
d875e235eb
modules: release all resources on ecl_halt
...
Previously we were lazy and simply marked the runtime as "not booted", but now
we do perform a proper shutdown.
2026-03-15 09:47:02 +01:00
Daniel Kochmański
424ba93a2a
process: move process initialization to the process module hooks
2026-03-15 09:47:02 +01:00
Daniel Kochmański
30bccdefcf
garbage: register and unregister GC threads manually from a module
...
This decouples thread primitives from the garbage collector and allows us to
build nucl once more.
2026-03-15 09:47:02 +01:00
Daniel Kochmański
1eb9822065
process: abstract away create thread, exit thread and sigmask
...
Previously we've opencoded calls to these functions, although they may be nicely
abstracted with static inline functions. This change improves code readibility
and portability.
2026-03-15 09:47:02 +01:00
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