X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcold%2Fansify.lisp;h=006a0df5a00f65f9e759af64351b6acc74cf74ac;hb=f8893c7c658bf9d9e0757c63e47af2fdea810f04;hp=693c632d4f25b50ac92eac4575710d879ab12398;hpb=e8b69b1dd5564a4237b1bdc1060820c3b820cde2;p=sbcl.git diff --git a/src/cold/ansify.lisp b/src/cold/ansify.lisp index 693c632..006a0df 100644 --- a/src/cold/ansify.lisp +++ b/src/cold/ansify.lisp @@ -1,4 +1,4 @@ -;;;; patches to hide some implementation idiosyncrasies in our +;;;; patches to work around implementation idiosyncrasies in our ;;;; cross-compilation host ;;;; This software is part of the SBCL system. See the README file for @@ -13,34 +13,8 @@ ;;;; CLISP issues #+clisp -(locally - - (in-package "COMMON-LISP") - - ;; no longer needed in CLISP 1999-01-08, hurrah! - #| - ;; ANSI specifies that package LISP defines the type BOOLEAN, and the CMU CL - ;; compiler uses it a lot. This should be trivial to patch in CLISP, except - ;; that CLISP defines FFI:BOOLEAN, which conflicts. Gads.. Here we try to fix - ;; it with some package hacking. (Please do not take this as an example of - ;; good package hacking, I just messed with it until it seemed to work well - ;; enough to bootstrap CMU CL, because I'm highly unmotivated to make elegant - ;; fixes for nonstandard behavior. -- WHN) - (shadow 'ffi:boolean "FFI") - (deftype cl::boolean () '(member t nil)) - (export 'boolean "LISP") - |# - - ;; apparently fixed sometime in 2001, hurray! - #| (error "can't use CLISP -- no MAKE-LOAD-FORM") |# - - ;; CLISP is still unsupported as a cross-compilation host because of - ;; these known problems: - (flet ((clisp-ouch (s) (error "can't bootstrap with CLISP: ~A" s))) - ;; These problems don't seem deep, and could probably be worked - ;; around. - #+nil (clisp-ouch "no (DOCUMENTATION X) when X is a PACKAGE") - #+nil (clisp-ouch "no (FUNCTION (SETF SYMBOL-FUNCTION))"))) +(ext:without-package-lock ("SYSTEM") + (setf system::*inhibit-floating-point-underflow* t)) ;;;; CMU CL issues @@ -75,11 +49,25 @@ #+(and cmu alpha) (unless (ignore-errors (read-from-string "1.0l0")) (error "CMUCL on Alpha can't read floats in the format \"1.0l0\". Patch your core file~%~%")) + +#+(and cmu sparc) +(ext:set-floating-point-modes :traps '(:overflow :invalid :divide-by-zero)) + +;;;; OpenMCL issues +#+openmcl +(unless (ignore-errors (funcall (constantly t) 1 2 3)) + (error "please find a binary that understands CONSTANTLY to build from")) + ;;;; general non-ANSI-ness (in-package :sb-cold) +(defmacro munging-cl-package (&body body) + #-clisp `(progn ,@body) + #+clisp `(ext:without-package-lock ("CL") + ,@body)) + ;;; Do the exports of COMMON-LISP conform to the standard? If not, try ;;; to make them conform. (Of course, ANSI says that bashing symbols ;;; in the COMMON-LISP package like this is undefined, but then if the @@ -96,13 +84,16 @@ (declare (ignore value)) (unless (gethash key standard-ht) (warn "removing non-ANSI export from package CL: ~S" key) - (unexport (intern key cl) cl))) + (munging-cl-package + (unexport (intern key cl) cl)))) host-ht) (maphash (lambda (key value) (declare (ignore value)) (unless (gethash key host-ht) (warn "adding required-by-ANSI export to package CL: ~S" key) - (export (intern key cl) cl)) + (munging-cl-package + (export (intern key cl) cl))) + ;; FIXME: My righteous indignation below was misplaced. ANSI sez ;; (in 11.1.2.1, "The COMMON-LISP Package") that it's OK for ;; COMMON-LISP things to have their home packages elsewhere.