* Rev 906a406a quieted all compiler notes coming from make-host-1,
rendering moot the muffle-conditions code-deletion-note in shared.lisp,
not to mention (satisfies unable-to-optimize-note-p) there as well.
* Prevent introduction of new occurrences of the optional+key warning
by confining the suppression to precisely where there is old code.
We need to fix whatever is wrong with cross-typep so that make-host-2
correctly utilizes the &OPTIONAL-AND-&KEY-IN-LAMBDA-LIST condition.
Other than new defined characters, the most significant change is
revisions to the grapheme, word and line-breaking algorithms,
particularly as relates to emoji.
Grapheme-breaking needs a new mini-state-machine in order to track the
extended pictographic state.
Word-breaking changes just enough to invalidate our previous
strategy of (attempting to) implement Replacing Ignore Rules (section
6.2 of UAX 29); instead, we now look back when we are in an extended
context to find the correct class. This is not maximally efficient,
and the strategy in line-breaking is probably better, but it is not
terrible either. We also need to handle the new requirement to
consider non-Glue Zs characters as their own WSegSpace class.
The line-breaking needs a very minor adjustment: nothing breaks after
a zero-width joiner.
Reading allkeys would parse, then encode then decode then encode
(and decode upon use). We only care about the final form.
This change produces an EQUALP hash table in far fewer convolutions.
I think we have no assertions to check it though.
As well as updates to data files, this involves minor changes to the
build process to accommodate the fact that Unicode data files now
contain copyright/registered symbols, and updates to the collation and
grapheme/word/line-breaking algorithms.
ECL's issues have been fixed for more than a year now.
The issue with ADJUST-ARRAY is unfortunate, as the spec explicitly
states that the dimensions of ARRAY is changed, but using the result
explicitly hurts no one.
The notes emitted while building cross-compiler are not important; we
only care about efficiency notes for the built system. This keeps
make-host-1 output free.
After this it is more-or-less possible to have the SBCL root directory
be a subdirectory of the current dir. Everything in src/cold finds required
files as siblings, so if SBCL is in "mumble/something/sbcl", you needn't
change dir into "sbcl" but instead, while in "mumble" it works to load
"something/sbcl/src/cold/shared"
A quick not-too-exciting example:
* (setq *sbcl-local-target-features-file* "sbcl/local-target-features.lisp-expr")
"sbcl/local-target-features.lisp-expr"
* (load "sbcl/src/cold/shared")
T
In real-world usage, the SBCL directory would be buried deeper in the tree
and you don't want to physically change dir into it because reasons.
It should be easier to parallelize crossbuild-runner too. With suitable
input and output directories, each architecture can place its artifacts into
a different fasl tree while pulling sources from the common location.
All architectures are warning-free now.
But of course only trust our own warnings. Other Lisps' warnings are
mostly unhelpful as far as we're concerned. e.g. Clozure warns about
an unused binding in (loop for ((a . b) . c) in x do (frob a b))),
but the workaround is ugly - an effectless (PROGN C) or similar.
The format control for the &OPTIONAL+&KEY warnings changed, so STRING=
is a bad test. But muffling has been broken for a while because nested
LOAD rebinds *HANDLED-CONDITIONS* so duplicate the DECLAIM.
* Do not attempt to place the host in a state in which all fasls are
loadedable after having loading sources.
* Move sanity checks where load-or-cload-xcompiler always performs them.
Tighten the conversion of the Unicode-supplied data file to assert
that we convert exactly one high-octet pair, an eszet, and that
there are no other high-octet characters in the file. Fail with
errors if these are not true: if they aren't, then Unicode has
probably put other important information in there that the intrepid
SBCL developer should read. (Or the file has been encoded using
EBCDIC-high or something.)
The sandboxed build issue referred to in a previous commit message
is solved another way.
The tracking here is potentially lossy, in that it requires ucd.lisp
to cooperate to mark files as accessed or created. But this approach
should be enough to catch renames, introduction of new files and
removal of existing ones.
It's a bit painful to have a file which embeds the Unicode version in
its name: each time it is update, the SBCL sources have to change.
Name allkeys.txt generically (aiming in the end for an unmodified data
file, though we're not there yet).
The number of collation entries varies between versions of Unicode.
It is useful to check that our binary database has the right number of
entries, but generate that number of entries to check against from the
initial parse of the Unicode data file, rather than hard-coding the
value in SBCL sources.
as proposed in https://sourceforge.net/p/sbcl/mailman/message/36607624/.
The most important takeaway is that floating-point literals must be spelled
in source with a leading dollar sign. Regarding other aspects of the change:
* src/code/unportable-float is gone
* a few transforms that were conditional on #+/-sb-xc-host are enabled
- constant-folding of MAKE-{single,double}-FLOAT
- transform of <,>,= of rational vs constant float
* inner-coerce-real-bound and inner-coerce-float-bound can directly use
the most-{positive,negative} constants
Cleanup of more code containing comments about cross-float-infinity-kludge
remains to be done in a subsequent series of changes.
Tested with crossbuild-runner and a few alternate choices of host lisp.
* Miscompiled DO-SC-LOCATIONS. It appeared not to handle the LABELS form,
but personally I didn't like that we called EVAL so I removed that too,
and one thing or another fixed their compiler crash.
* Workaround https://abcl.org/trac/ticket/231
* One files produce some build-breaking warnings during make-host-1.
The mechanism for ignoring failures remains useful after all.
* ETYPECASE warns if the final clause is T, so we might as well use TYPECASE.
* Use symbolicate instead of (FORMAT nil "~S") because FORMAT puts
package names on symbols even if accessible without:
SB-C(8): (format nil "fast-~s-foo" '+) => "fast-COMMON-LISP:+-foo"
As of this change, there are at least 6 open-source implementations
that can compile SBCL: ABCL, CCL, CLISP, CMUCL, ECL, and SBCL.
I have not recently tested CMUCL, but at last check it still worked.
* Call SB-XC:SUBTYPEP in GENERATE-NUMBER-DISPATCH, not the host's
* Don't pass improper lists to MAPC in the disassembler.
This looks to have been a genuine bug in our code.
* Ignore contents of COMMON-LISP-USER package in genesis
* Workaround ECL compiler bugs
- discrimination of complex floats in compiled code is wrong.
- disable the SB-INT:INFO compiler macro.
- miscompilation of SB-ASSEM::LABEL-POSITION which is mysteriously fixed
by not proclaiming the ftype.
Build succeeds with ECL 16.1.3
Files which are part of the build framework, namely "make-*.lisp" and anything
under src/cold except for src/cold/warm always interpret #+/- as host features,
which is obvious. In those files, the reader can't parse target feature sexprs,
but the value of SB-XC:*FEATURES* may be tested with code.
Files which are sources, namely everything else, can _only_ refer to target
features in "#+"/"#-" (sans #\!) expressions, unless within a #+(host-feature)
escape. Thus it is identical, for the time being, to using #!+ or #!-.
As far as implementation, the default *READTABLE* never has its macros changed,
so you can't just slurp a file containing target feature conditionals -
instead *READTABLE* must be bound from *XC-READTABLE*. You may continue to use
the features named :sb-xc-host and :sb-xc with either the bang or non-bang
conditional syntax. So ultimately, "#!" syntax serves no purpose at all,
and we can replace every occurrence with normal syntax.
Note also that DO-STEMS-AND-FLAGS requires a third argument to indicate whether
the flags pertain to make-host-1 or -2 which avoid erroneous injection of
the :IGNORE-FAILURE-P flag when it is intended for the host. I don't love it,
but lacking proof that the CMUCL workaround isn't needed, I preserved the
behavior while improving upon it as well.
Fix build order some more: LAYOUT-EQ was not defined soon enough to
use in typetran, and the SYMBOL-INFO-VECTOR thingy was correct but
warned without a slight tweak.
Also remove unnecessary limit on print-length/level in make-host-1
because if the host printer crashes, that's on it, nor us.
(for suitable values of "it" and "us")