;;; -*- Mode:LISP; Package:SYSTEM-INTERNALS; Readtable:ZL; Base:10; COLD-LOAD: T -*-


;;; this is the first file in the cold load, so it has the first thing on the
;;; lisp-crash-list (to be evaluated) by lisp-reinitialize.

;;; When I changed how special forms worked I didnt know how much it was going
;;; to screw me in the cold load. Hence these kludges.
;;; Instead, if a file is COLD-LOAD:T all "eval-mungables" should be
;;; consed up into a single function to be called. This would make things
;;; initialize faster and with less bootstrapping hair. Like in VAX-NIL.

(DEFUN (:PROPERTY SPECIAL SPECIAL-FORM-BOOTSTRAP) (FORM)
  (MAPC (LAMBDA (X) (SETF (GET X 'SPECIAL) T))
	(CDR FORM))
  T)

(DEFUN (:PROPERTY UNSPECIAL SPECIAL-FORM-BOOSTRAP) (FORM)
  (MAPC (LAMBDA (X) (REMPROP X 'SPECIAL))
	(CDR FORM))
  T)

(EVAL-WHEN (EVAL COMPILE)
  (DEFVAR *BOOTSTRAP-SPECIAL-FORMS*))

(SETQ *BOOTSTRAP-SPECIAL-FORMS*
      '(DEFF-MACRO DEFPROP DEFCONST-1
	 DEFVAR-1 CATCH COMMENT DECLARE
	 EVAL-WHEN COMPILER-LET THE
	 QUOTE SETQ VARIABLE-BOUNDP VARIABLE-LOCATION
	 VARIABLE-MAKUNBOUND MULTIPLE-VALUE-SETQ
	 NTH-VALUE MULTIPLE-VALUE-CALL MULTIPLE-VALUE-LIST
	 MULTIPLE-VALUE-PROG1 MULTIPLE-VALUE-BIND DONT-OPTIMIZE
	 LOCALLY PROGN WITH-STACK-LIST WITH-STACK-LIST*
	 AND  OR  COND  IF COMPILER::CASEN
	 LET LET* FLET MACROLET LABELS
	 PROGV PROGW LET-IF LETF LETF-IF
	 LETF* UNWIND-PROTECT
	 THROW BLOCK
	 RETURN-FROM RETURN TAGBODY GO PROG PROG*
	 DO DO-NAMED DO* DO*-NAMED FUNCTION
	 LAMBDA
	 SPECIAL UNSPECIAL
	 ))

(DEFUN INSTALL-BOOTSTRAP-SPECIAL-FORMS ()
  (PUTPROP ':SPECIAL-FORM 'SPECIAL-FORM-FUNCTION-SPEC-HANDLER 'FUNCTION-SPEC-HANDLER)
  (DOLIST (X *BOOTSTRAP-SPECIAL-FORMS*)
    (BOOTSTRAP-SPECIAL-FORM X)))

(INSTALL-BOOTSTRAP-SPECIAL-FORMS)

(DEFVAR *BOOTSTRAP-SPECIAL-FORMS*)




