0.7.8.12:
[sbcl.git] / src / compiler / main.lisp
index b5ad7f1..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))))
 
                                          (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)))
   #!+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
 
 ;;; 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.
 ;;;
                                 constant
                                 condition)))
       (case creation-form
-       (:just-dump-it-normally
+       (:sb-just-dump-it-normally
         (fasl-validate-structure constant *compile-object*)
         t)
        (:ignore-it