More robust undefined restarts.
[sbcl.git] / src / code / type-init.lisp
blob85dced41c08321bb8871777117b9ea563630025b
1 ;;;; When this file's top level forms are run, it precomputes the
2 ;;;; translations for commonly used type specifiers. This stuff is
3 ;;;; split off from the other type stuff to get around problems with
4 ;;;; everything needing to be loaded before everything else. This
5 ;;;; stuff is also somewhat implementation-dependent in that
6 ;;;; implementations may want to precompute other types which are
7 ;;;; important to them.
9 ;;;; This software is part of the SBCL system. See the README file for
10 ;;;; more information.
11 ;;;;
12 ;;;; This software is derived from the CMU CL system, which was
13 ;;;; written at Carnegie Mellon University and released into the
14 ;;;; public domain. The software is in the public domain and is
15 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
16 ;;;; files for more information.
18 (in-package "SB!KERNEL")
20 ;;; built-in symbol type specifiers
22 ;;; Predefined types that are of kind :INSTANCE can't have their
23 ;;; :BUILTIN property set, so we cull them out. This used to operate
24 ;;; on all *!STANDARD-TYPE-NAMES* because !PRECOMPUTE-TYPES was ok to
25 ;;; call on unknown types. This relied upon the knowledge that
26 ;;; VALUES-SPECIFIER-TYPE avoided signaling a PARSE-UNKNOWN-TYPE
27 ;;; condition while in cold-init. This is terrible! It means that
28 ;;; (a) we have to know that something wouldn't signal
29 ;;; when it otherwise should, and
30 ;;; (b) we can call that thing when the very data that it depends on
31 ;;; are actually wrong.
32 ;;; Well, in as much as we have to do this suspicious action,
33 ;;; at least let's not get into a state where we *know*
34 ;;; that it ought to signal.
36 (/show0 "precomputing built-in symbol type specifiers")
37 (!precompute-types
38 (remove-if (lambda (x)
39 (memq x '(hash-table package pathname random-state readtable)))
40 *!standard-type-names*))
42 #+sb-xc-host (setf *type-system-initialized* t)
44 (/show0 "done with type-init.lisp")