X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmain.lisp;h=b01695dd0e088cdf13e9e3cff2dae291ac723216;hb=cd2c70c8b5d4dcc62b968f5a9bedd3c9c8698e82;hp=b5ad7f1dc679308cb878d0dd282edb08ded2ee83;hpb=75f29fee61a19b3607bd8fafa8a31184c998c5b0;p=sbcl.git diff --git a/src/compiler/main.lisp b/src/compiler/main.lisp index b5ad7f1..b01695d 100644 --- a/src/compiler/main.lisp +++ b/src/compiler/main.lisp @@ -801,7 +801,7 @@ ;;; We parse declarations and then recursively process the body. (defun process-toplevel-locally (body path compile-time-too) (declare (list path)) - (multiple-value-bind (forms decls) (sb!sys:parse-body body nil) + (multiple-value-bind (forms decls) (parse-body body nil) (let* ((*lexenv* (process-decls decls nil nil (make-continuation))) ;; Binding *POLICY* is pretty much of a hack, since it @@ -903,8 +903,8 @@ ;; nice default for things where we don't have a ;; real source path (as in e.g. inside CL:COMPILE). '(original-source-start 0 0))) - (unless (or (null name) (legal-fun-name-p name)) - (error "not a legal function name: ~S" name)) + (when name + (legal-fun-name-or-type-error name)) (let* ((*lexenv* (make-lexenv :policy *policy*)) (fun (make-functional-from-toplevel-lambda lambda-expression :name name @@ -945,14 +945,36 @@ (gethash (leaf-info fun) entry-table) (aver found-p) result)) + ;; KLUDGE: This code duplicates some other code in this + ;; file. In the great reorganzation, the flow of program logic + ;; changed from the original CMUCL model, and that path (as of + ;; sbcl-0.7.5 in SUB-COMPILE-FILE) was no longer followed for + ;; CORE-OBJECTS, leading to BUG 156. This place is + ;; transparently not the right one for this code, but I don't + ;; have a clear enough overview of the compiler to know how to + ;; rearrange it all so that this operation fits in nicely, and + ;; it was blocking reimplementation of + ;; (DECLAIM (INLINE FOO)) (MACROLET ((..)) (DEFUN FOO ...)) + ;; + ;; FIXME: This KLUDGE doesn't solve all the problem in an + ;; ideal way, as (1) definitions typed in at the REPL without + ;; an INLINE declaration will give a NULL + ;; FUNCTION-LAMBDA-EXPRESSION (allowable, but not ideal) and + ;; (2) INLINE declarations will yield a + ;; FUNCTION-LAMBDA-EXPRESSION headed by + ;; SB-C:LAMBDA-WITH-LEXENV, even for null LEXENV. + ;; + ;; CSR, 2002-07-02 + (when (core-object-p *compile-object*) + (fix-core-source-info *source-info* *compile-object*)) + (mapc #'clear-ir1-info components-from-dfo) (clear-stuff))))) (defun process-toplevel-cold-fset (name lambda-expression path) (unless (producing-fasl-file) (error "can't COLD-FSET except in a fasl file")) - (unless (legal-fun-name-p name) - (error "not a legal function name: ~S" name)) + (legal-fun-name-or-type-error name) (fasl-dump-cold-fset name (%compile lambda-expression *compile-object* @@ -977,8 +999,9 @@ (*compiler-error-bailout* (lambda () (convert-and-maybe-compile - `(error "execution of a form compiled with errors:~% ~S" - ',form) + `(error 'simple-program-error + :format-control "execution of a form compiled with errors:~% ~S" + :format-arguments (list ',form)) path) (throw 'process-toplevel-form-error-abort nil)))) @@ -1225,7 +1248,11 @@ (node-component (lambda-bind x))) :toplevel))) lambdas - :start start) + ;; this used to read ":start start", but + ;; start can be greater than len, which + ;; is an error according to ANSI - CSR, + ;; 2002-04-25 + :start (min start len)) len))) (do* ((start 0 (1+ loser)) (loser (loser start) (loser start))) @@ -1523,7 +1550,7 @@ #!+sb-doc "Return a pathname describing what file COMPILE-FILE would write to given these arguments." - (pathname output-file)) + (merge-pathnames output-file (merge-pathnames input-file))) ;;;; MAKE-LOAD-FORM stuff @@ -1558,7 +1585,7 @@ ;;; If the constant doesn't show up in *CONSTANTS-BEING-CREATED*, then ;;; we have to create it. We call MAKE-LOAD-FORM and check to see ;;; whether the creation form is the magic value -;;; :JUST-DUMP-IT-NORMALLY. If it is, then we don't do anything. The +;;; :SB-JUST-DUMP-IT-NORMALLY. If it is, then we don't do anything. The ;;; dumper will eventually get its hands on the object and use the ;;; normal structure dumping noise on it. ;;; @@ -1599,7 +1626,7 @@ constant condition))) (case creation-form - (:just-dump-it-normally + (:sb-just-dump-it-normally (fasl-validate-structure constant *compile-object*) t) (:ignore-it