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
Daniel Kochmański
8a13a9e85f
reader: factor out ecl_read_token from ecl_read_object_with_delimiter
2026-03-07 22:42:12 +01:00
Daniel Kochmański
a4504dc1a3
reader: move the general-purpose reader from read.d to reader.d
2026-03-07 22:42:12 +01:00
Daniel Kochmański
8af28af3ef
reader: move the readtable implementation from read.d to readtable.d
2026-03-07 22:42:12 +01:00
Daniel Kochmański
cc33abf37a
reader: move common-lisp specific readtable entries t rtab_cl.d
2026-03-07 22:42:12 +01:00
Daniel Kochmański
f5870df786
reader: fix set_syntax_from_char copying behavior
2026-03-07 22:42:12 +01:00
Daniel Kochmański
f5372b057d
core: split cl_core_struct in two structure cl_core and ecl_core
...
ecl_core contains early global environment that is meant to be shared by all
runtimes, while cl_core contains an environment relevant to common lisp.
2026-03-07 21:35:37 +01:00
Daniel Kochmański
22f1883ec7
core: define protect and dummy tags as constants
...
Both tags have a special meaning to the low-level runtime (most notably the
frame stack). Extracting them from "all symbols" is a step towards multiple
runtimes.
2026-03-07 21:35:37 +01:00
Daniel Kochmański
a7c86c32d4
core: move defacto constants from cl_core structure to global space
2026-03-07 21:35:37 +01:00
Daniel Kochmański
ef1f3964ab
apply: generic functions are dispatched via the entry point
...
Previously standard and restricted dispatch was dispatched via
_ecl_standard_dispatch, but that adds a dependency on gfun.d.
2026-03-07 21:35:37 +01:00
Daniel Kochmański
147b7b68b7
apply: move funcall and apply-from-stack eval.d -> apply.d
2026-03-07 21:35:37 +01:00
Daniel Kochmański
0357e288ec
core: minor cleanups in files character.d and string.d
...
These function clearly operates on strings, so move them to string.d
- cl_name_char
- cl_char_name
- ecl_string_case
Add a new local assertion assert_type_radix taht uses the new type.
sq
2026-03-07 21:35:31 +01:00
Daniel Kochmański
9d262a9cb3
core: predlib: add a system type SI:RADIX
2026-03-06 23:04:34 +01:00
Daniel Kochmański
1a1f4a5394
cosmetic: indent vector_push.d
2026-03-06 23:04:34 +01:00
Daniel Kochmański
b752046ed3
Revert "reader: fix a bug in SET-SYNTAX-FROM-CHAR"
...
This reverts commit 6011067359 .
2026-03-06 19:48:53 +01:00
Daniel Kochmański
6011067359
reader: fix a bug in SET-SYNTAX-FROM-CHAR
...
The regrssion test was added as mix.0036.reader.false-sharing.
2026-03-06 18:58:54 +01:00
Marius Gerbershagen
ae92d13562
find-class: fix bug when searching compiler env
...
Environment records can be atoms.
2026-03-05 20:22:39 +01:00
Marius Gerbershagen
fcddd9c175
compiler.d: fix order of evaluation bug for nested eval-when forms
2026-03-05 20:22:39 +01:00
Marius Gerbershagen
5053532ee1
avoid name clashes in some tests
...
The cmp.0077.make-load-form.circular-dep test already tried to avoid
name clashes using ext:with-clean-symbols but this is a bit
problematic to use with file compilation since it uses uninterned
symbols. Just adding a prefix avoids the issue in a simpler, more
robust way.
2026-03-05 20:22:39 +01:00
Daniel Kochmański
13d41b746a
tests: add a new regression test for a bug found in the reader
2026-03-05 14:37:08 +01:00
Daniel Kochmański
8d9f3c171d
tests: add a new mixed test for bignums
2026-03-04 14:29:30 +01:00
Daniel Kochmański
56f1ce7850
tests: add a regression test for a symbol parser bug
2026-03-04 14:29:30 +01:00
Daniel Kochmański
83fc257cfa
tests: add a regression test for a readtable-case bug
2026-03-04 14:29:30 +01:00
Marius Gerbershagen
9b1b5bdcbe
fix test
...
We are already working in a sandbox, no need to use /tmp.
2026-02-28 19:05:15 +01:00
Marius Gerbershagen
2fbdd292af
add workaround for compiler bug in clang 19
2026-02-28 16:10:26 +01:00
Daniel Kochmański
ede2f0aaa1
cmp: define constant VM before it is first used in a produced header
...
When we've built ECL without dynamic VV, the preprocessor define VM was
referenced in the produced header before it was defined. That lead to an error.
2026-02-27 11:22:02 +01:00
Daniel Kochmański
86e2f245f6
cosmetic: remove unnecessary bindings of the_env
2026-02-27 09:51:50 +01:00
Daniel Kochmański
b230bf52ac
Merge branch 'find-class-compiler-env' into 'develop'
...
Store class definitions in the compiler environment
See merge request embeddable-common-lisp/ecl!364
2026-02-27 07:49:21 +00:00
Marius Gerbershagen
03a07d87b4
tests: fix Makefile for platforms that don't ship bash in /bin
...
Bug fix provided by Dima Pasechnik
2026-02-26 20:06:33 +01:00
Marius Gerbershagen
b1cf56806d
clos: store class definitions in the compiler environment
...
According to the CLHS:
> If a DEFCLASS form appears as a top level form, [...] the compiler
must make the class definition available to be returned by FIND-CLASS
when its environment argument is a value received as the environment
parameter of a macro.
We already store type definitions in the compiler environment, so we
can just reuse that.
While The metaobject protocol doesn't specify what happens when
compiling DEFCLASS, only what happens when executing it (see
https://franz.com/support/documentation/mop/concepts.html#compile-file ),
real life software breaks when we try to create a full class object at
compile time. Therefore, we just create a dummy forward-referenced
class object which contains nothing more than a name.
2026-02-25 20:10:06 +01:00
Daniel Kochmański
944d5ef3b1
Merge branch 'cmp-base-string-coercion' into 'develop'
...
Fix incorrect coercion of base strings to extended strings during compilation
See merge request embeddable-common-lisp/ecl!363
2026-02-23 10:26:10 +00:00
Daniel Kochmański
1b97477d6b
cross-compilation: add instructions and configs for mingw
2026-02-16 13:22:31 +01:00
Marius Gerbershagen
08dae53ebc
remove unused function declaration
2026-02-14 21:33:29 +01:00