sb!xc:*compile-file-pathname*
sb!xc:*compile-file-truename*))
-;;; the values of *PACKAGE* and policy when compilation started
-(defvar *initial-package*)
-(defvar *initial-cookie*)
-(defvar *initial-interface-cookie*)
-
-;;; The source-info structure for the current compilation. This is null
-;;; globally to indicate that we aren't currently in any identifiable
-;;; compilation.
+;;; the SOURCE-INFO structure for the current compilation. This is
+;;; null globally to indicate that we aren't currently in any
+;;; identifiable compilation.
(defvar *source-info* nil)
-;;; True if we are within a WITH-COMPILATION-UNIT form (which normally
-;;; causes nested uses to be no-ops).
+;;; This is true if we are within a WITH-COMPILATION-UNIT form (which
+;;; normally causes nested uses to be no-ops).
(defvar *in-compilation-unit* nil)
;;; Count of the number of compilation units dynamically enclosed by
(entry-analyze component)
(ir2-convert component)
- (when (policy nil (>= speed cspeed))
+ (when (policy nil (>= speed compilation-speed))
(maybe-mumble "copy ")
(copy-propagate component))
(defun byte-compiling ()
(if (eq *byte-compiling* :maybe)
(or (eq *byte-compile* t)
- (policy nil (zerop speed) (<= debug 1)))
+ (policy nil (and (zerop speed) (<= debug 1))))
(and *byte-compile* *byte-compiling*)))
;;; Delete components with no external entry points before we try to
(:maybe
(dolist (fun (component-lambdas component) t)
(unless (policy (lambda-bind fun)
- (zerop speed) (<= debug 1))
+ (and (zerop speed) (<= debug 1)))
(return nil)))))))
(when sb!xc:*compile-print*
;;;; Source-Info structure. The bookkeeping is done as a side-effect
;;;; of getting the next source form.
-;;; The File-Info structure holds all the source information for a
+;;; A FILE-INFO structure holds all the source information for a
;;; given file.
(defstruct file-info
- ;; If a file, the truename of the corresponding source file. If from a Lisp
- ;; form, :LISP, if from a stream, :STREAM.
+ ;; If a file, the truename of the corresponding source file. If from
+ ;; a Lisp form, :LISP. If from a stream, :STREAM.
(name (required-argument) :type (or pathname (member :lisp :stream)))
- ;; The defaulted, but not necessarily absolute file name (i.e. prior to
- ;; TRUENAME call.) Null if not a file. This is used to set
- ;; *COMPILE-FILE-PATHNAME*, and if absolute, is dumped in the debug-info.
+ ;; the defaulted, but not necessarily absolute file name (i.e. prior
+ ;; to TRUENAME call.) Null if not a file. This is used to set
+ ;; *COMPILE-FILE-PATHNAME*, and if absolute, is dumped in the
+ ;; debug-info.
(untruename nil :type (or pathname null))
- ;; The file's write date (if relevant.)
+ ;; the file's write date (if relevant)
(write-date nil :type (or unsigned-byte null))
- ;; The source path root number of the first form in this file (i.e. the
- ;; total number of forms converted previously in this compilation.)
+ ;; the source path root number of the first form in this file (i.e.
+ ;; the total number of forms converted previously in this
+ ;; compilation)
(source-root 0 :type unsigned-byte)
- ;; Parallel vectors containing the forms read out of the file and the file
- ;; positions that reading of each form started at (i.e. the end of the
- ;; previous form.)
+ ;; parallel vectors containing the forms read out of the file and
+ ;; the file positions that reading of each form started at (i.e. the
+ ;; end of the previous form)
(forms (make-array 10 :fill-pointer 0 :adjustable t) :type (vector t))
(positions (make-array 10 :fill-pointer 0 :adjustable t) :type (vector t)))
;;; rebinding around each file.
;;;
;;; FIXME: Since we now do the standard ANSI thing of only one file
-;;; per compile (unlike the CMU CL extended COMPILE-FILE) can't this
-;;; complexity (including ADVANCE-SOURCE-FILE) go away?
+;;; per compile (unlike the CMU CL extended COMPILE-FILE) this code is
+;;; becoming stale, and the remaining bits of it (and the related code
+;;; in ADVANCE-SOURCE-FILE) can go away.
(defun get-source-stream (info)
(declare (type source-info info))
(cond ((source-info-stream info))
(t
- (setq *package* *initial-package*)
- (setq *default-cookie* (copy-cookie *initial-cookie*))
- (setq *default-interface-cookie*
- (copy-cookie *initial-interface-cookie*))
(let* ((finfo (first (source-info-current-file info)))
(name (file-info-name finfo)))
(setq sb!xc:*compile-file-truename* name)
;;; *TOP-LEVEL-LAMBDAS* instead.
(defun convert-and-maybe-compile (form path)
(declare (list path))
- (let* ((*lexenv* (make-lexenv :cookie *default-cookie*
- :interface-cookie *default-interface-cookie*))
+ (let* ((*lexenv* (make-lexenv :policy *policy*
+ :interface-policy *interface-policy*))
(tll (ir1-top-level form path nil)))
(cond ((eq *block-compile* t) (push tll *top-level-lambdas*))
(t (compile-top-level (list tll) nil)))))
;;; Process a top-level use of LOCALLY. We parse declarations and then
;;; recursively process the body.
-;;;
-;;; Binding *DEFAULT-xxx-COOKIE* is pretty much of a hack, since it
-;;; causes LOCALLY to "capture" enclosed proclamations. It is
-;;; necessary because CONVERT-AND-MAYBE-COMPILE uses the value of
-;;; *DEFAULT-COOKIE* as the policy. The need for this hack is due to
-;;; the quirk that there is no way to represent in a cookie that an
-;;; optimize quality came from the default.
-;;; FIXME: Ideally, something should be done so that DECLAIM inside LOCALLY
-;;; works OK. Failing that, at least we could issue a warning instead
-;;; of silently screwing up.
(defun process-top-level-locally (form path)
(declare (list path))
(multiple-value-bind (forms decls) (sb!sys:parse-body (cdr form) nil)
(let* ((*lexenv*
(process-decls decls nil nil (make-continuation)))
- (*default-cookie* (lexenv-cookie *lexenv*))
- (*default-interface-cookie* (lexenv-interface-cookie *lexenv*)))
+ ;; Binding *xxx-POLICY* is pretty much of a hack, since it
+ ;; causes LOCALLY to "capture" enclosed proclamations. It
+ ;; is necessary because CONVERT-AND-MAYBE-COMPILE uses the
+ ;; value of *POLICY* as the policy. The need for this hack
+ ;; is due to the quirk that there is no way to represent in
+ ;; a POLICY that an optimize quality came from the default.
+ ;; FIXME: Ideally, something should be done so that DECLAIM
+ ;; inside LOCALLY works OK. Failing that, at least we could
+ ;; issue a warning instead of silently screwing up.
+ (*policy* (lexenv-policy *lexenv*))
+ (*interface-policy* (lexenv-interface-policy *lexenv*)))
(process-top-level-progn forms path))))
;;; Force any pending top-level forms to be compiled and dumped so
#+nil (*compiler-note-count* 0)
(*block-compile* *block-compile-argument*)
(*package* (sane-package))
- (*initial-package* (sane-package))
- (*initial-cookie* *default-cookie*)
- (*initial-interface-cookie* *default-interface-cookie*)
- (*default-cookie* (copy-cookie *initial-cookie*))
- (*default-interface-cookie*
- (copy-cookie *initial-interface-cookie*))
+ (*policy* *policy*)
+ (*interface-policy* *interface-policy*)
(*lexenv* (make-null-lexenv))
(*converting-for-interpreter* nil)
(*source-info* info)
;;; default to the appropriate implementation-defined default type for
;;; compiled files.
(defun cfp-output-file-default (input-file)
- (let* ((output-type (make-pathname :type *backend-fasl-file-type*))
- (merge1 (merge-pathnames output-type input-file))
- (merge2 (merge-pathnames merge1 *default-pathname-defaults*)))
- merge2))
+ (let* ((defaults (merge-pathnames input-file
+ *default-pathname-defaults*))
+ (retyped (make-pathname :type *backend-fasl-file-type*
+ :defaults defaults)))
+ retyped))
;;; KLUDGE: Part of the ANSI spec for this seems contradictory:
;;; If INPUT-FILE is a logical pathname and OUTPUT-FILE is unsupplied,