-*- Mode:Text -*- Ways to lose (things not to do) in system cold-load source files: 1. Things COLD:COLD-FASLOAD won't handle, e.g. - 8-bit binary format .QFASL files (could be made to work) - QFASL ops added to system but not added to SYM:FASL-OPS and SYS:COLD;COLDLD.LISP I haven't seen these lose, but according to FERRORs in COLDLD.LISP these aren't handled: - Initializing a displaced array. - Arrays other than 1- or 2-dimensional, art-16b or numeric. (But strings are OK.) - DEFUN function specs other than symbol or property; e.g., the following won't load: (DEFUN (FOO PROP) ...) {What does that mean???} - Pathnames that can't be handled as phony pathname strings. (???) 2. Initializations that refer to things that aren't defined yet, such as DEFVARs that EVAL can't handle. These are easy to mess up. Forward references in general are a common problem. For example, references to COMPILER functions at top level in QFASL.LISP caused problems when I built system 128. QFASL is a cold-loaded file, but the compiler gets loaded much later, in the third stage, during (MAKE-SYSTEM 'SYSTEM). Remember, initializations are EVAL'd in cold-load during LISP-REINITIALIZE, but before ADD-INITIALIZATIONS are done. For example: - (DEFCONST X (BYTE 3 0)) blows up during load of an INNER-SYSTEM-FILE-ALIST file - BYTE just isn't there yet. - Anything that uses SIGNAL or other error-handling. However, a crude warning function is used in place of FERROR. This version is automatically called in place of FERROR. It accepts only simple string args. For example: (FERROR "YOU LOSE in cold load!"). --Keith Corbett 11/2/88