0.8.10.32:
[sbcl.git] / src / code / target-load.lisp
index 56a139e..560ba0e 100644 (file)
 \f
 ;;;; LOAD itself
 
+(define-condition fasl-header-missing (invalid-fasl)
+  ((fhsss :reader invalid-fasl-fhsss :initarg :fhsss))
+  (:report
+   (lambda (condition stream)
+     (format stream "~@<File ~S has a fasl file type, but no fasl header:~%~
+                     Expected ~S, but got ~S.~:@>"
+            (invalid-fasl-stream condition)
+            (invalid-fasl-expected condition)
+            (invalid-fasl-fhsss condition)))))
+
 ;;; a helper function for LOAD: Load the stuff in a file when we have
 ;;; the name.
 (defun internal-load (pathname truename if-does-not-exist verbose print
                          :binary))
          (t
           (when (string= (pathname-type truename) *fasl-file-type*)
-            (error "File has a fasl file type, but no fasl file header:~%  ~S"
-                   (namestring truename)))
+            (error 'fasl-header-missing
+                   :stream (namestring truename)
+                   :fhsss first-line
+                   :expected fhsss))
           (internal-load pathname truename if-does-not-exist verbose print
                          :source))))))))
 
   #!+sb-doc
   "Load the file given by FILESPEC into the Lisp environment, returning
    T on success."
-
+  (declare (ignore external-format))
   (let ((*load-depth* (1+ *load-depth*))
        ;; KLUDGE: I can't find in the ANSI spec where it says that
        ;; DECLAIM/PROCLAIM of optimization policy should have file
                      tto)
               (format t "   loading to the dynamic space~%"))
 
-       (let ((code (%primitive sb!c:allocate-dynamic-code-object
+       (let ((code (%primitive sb!c:allocate-code-object
                                 box-num
                                 code-length))
              (index (+ sb!vm:code-trace-table-offset-slot box-num)))
 
 ;;; SB!SYS:GET-DYNAMIC-FOREIGN-SYMBOL-ADDRESS is in foreign.lisp, on
 ;;; platforms that have dynamic loading
+(defun foreign-symbol-address-as-integer-or-nil (foreign-symbol)
+  (or (find-foreign-symbol-in-table foreign-symbol *static-foreign-symbols*)
+      (sb!sys:get-dynamic-foreign-symbol-address foreign-symbol)))
+    
 (defun foreign-symbol-address-as-integer (foreign-symbol)
-  (or (find-foreign-symbol-in-table  foreign-symbol *static-foreign-symbols*)
-      (sb!sys:get-dynamic-foreign-symbol-address foreign-symbol)
+  (or (foreign-symbol-address-as-integer-or-nil foreign-symbol)
       (error "unknown foreign symbol: ~S" foreign-symbol)))
 
 (defun foreign-symbol-address (symbol)