X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmain.lisp;h=2fe6b17d110dc6975a6139227935596f46b579e0;hb=a0c5831b3a74118cf41a848300200a1acdb48dcf;hp=66297358d6e3ef503eae36cd18a1b69f2f49ed5e;hpb=23dc441a94e9b7dcd397a43a089f3e8cd4122138;p=sbcl.git diff --git a/src/compiler/main.lisp b/src/compiler/main.lisp index 6629735..2fe6b17 100644 --- a/src/compiler/main.lisp +++ b/src/compiler/main.lisp @@ -115,6 +115,8 @@ (defvar *compile-object* nil) (declaim (type object *compile-object*)) + +(defvar *fopcompile-label-counter*) ;;;; WITH-COMPILATION-UNIT and WITH-COMPILATION-VALUES @@ -852,16 +854,19 @@ ;;; *TOPLEVEL-LAMBDAS* instead. (defun convert-and-maybe-compile (form path) (declare (list path)) - (let* ((*top-level-form-noted* (note-top-level-form form t)) - (*lexenv* (make-lexenv - :policy *policy* - :handled-conditions *handled-conditions* - :disabled-package-locks *disabled-package-locks*)) - (tll (ir1-toplevel form path nil))) - (if (eq *block-compile* t) - (push tll *toplevel-lambdas*) - (compile-toplevel (list tll) nil)) - nil)) + (if (fopcompilable-p form) + (let ((*fopcompile-label-counter* 0)) + (fopcompile form path nil)) + (let* ((*top-level-form-noted* (note-top-level-form form t)) + (*lexenv* (make-lexenv + :policy *policy* + :handled-conditions *handled-conditions* + :disabled-package-locks *disabled-package-locks*)) + (tll (ir1-toplevel form path nil))) + (if (eq *block-compile* t) + (push tll *toplevel-lambdas*) + (compile-toplevel (list tll) nil)) + nil))) ;;; Macroexpand FORM in the current environment with an error handler. ;;; We only expand one level, so that we retain all the intervening @@ -1185,7 +1190,9 @@ ;; sequence of steps in ANSI's "3.2.3.1 Processing of ;; Top Level Forms". #-sb-xc-host - (let ((expanded (preprocessor-macroexpand-1 form))) + (let ((expanded + (let ((*current-path* path)) + (preprocessor-macroexpand-1 form)))) (cond ((eq expanded form) (when compile-time-too (eval-in-lexenv form *lexenv*)) @@ -1701,13 +1708,14 @@ SPEED and COMPILATION-SPEED optimization values, and the ;;; -- WHN 2000-12-09 (defun sb!xc:compile-file-pathname (input-file &key - (output-file (cfp-output-file-default - input-file)) + (output-file nil output-file-p) &allow-other-keys) #!+sb-doc "Return a pathname describing what file COMPILE-FILE would write to given these arguments." - (merge-pathnames output-file (merge-pathnames input-file))) + (if output-file-p + (merge-pathnames output-file (cfp-output-file-default input-file)) + (cfp-output-file-default input-file))) ;;;; MAKE-LOAD-FORM stuff @@ -1787,8 +1795,6 @@ SPEED and COMPILATION-SPEED optimization values, and the (:ignore-it nil) (t - (when (fasl-constant-already-dumped-p constant *compile-object*) - (return-from emit-make-load-form nil)) (let* ((name (write-to-string constant :level 1 :length 2)) (info (if init-form (list constant name init-form)