0.7.7.22:
[sbcl.git] / src / compiler / main.lisp
index 89f7813..b01695d 100644 (file)
 ;;; 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
                  ;; 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
                 (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*
           (*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))))
 
   #!+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)))
 \f
 ;;;; MAKE-LOAD-FORM stuff