X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcold%2Fansify.lisp;h=901286d9f9570423a884035b36b176e3219b7092;hb=cececc9ace31c1f0c624af1d3a8bafae9beb5348;hp=006a0df5a00f65f9e759af64351b6acc74cf74ac;hpb=d543ff4caaabda2f33ce7b5a723013db06aa5c9d;p=sbcl.git diff --git a/src/cold/ansify.lisp b/src/cold/ansify.lisp index 006a0df..901286d 100644 --- a/src/cold/ansify.lisp +++ b/src/cold/ansify.lisp @@ -12,6 +12,28 @@ ;;;; CLISP issues +;;; as explained on #lisp ca. October 2003: +;;; chandler: nope, I'm blaming another clisp bug +;;; [8]> least-positive-short-float +;;; 2.93874s-39 +;;; [9]> (coerce * 'single-float) +;;; 0.0 +;;; aah +;;; "oops" +;;; yep +;;; tried that on clisp from fink: +;;; [1]> least-positive-short-float +;;; 2.93874s-39 +;;; [2]> (coerce * 'single-float) +;;; *** - floating point underflow +;;; yeah +;;; shall i not try to build sbcl with that? +;;; if you turn off underflow traps, then you get 0.0 +;;; well, that makes sense, i guess +;;; #+clisp +;;; (ext:without-package-lock ("SYSTEM") +;;; (setf system::*inhibit-floating-point-underflow* t)) +;;; (in src/cold/ansify.lisp) #+clisp (ext:without-package-lock ("SYSTEM") (setf system::*inhibit-floating-point-underflow* t)) @@ -46,6 +68,12 @@ (warn "CMU CL has a broken implementation of READ-SEQUENCE.") (pushnew :no-ansi-read-sequence *features*)) +;;; This is apparently quite old, according to +;;; : +;;; (error "CMUCL on Alpha can't read floats in the format \"1.0l0\". +;;; the warning relates to a random vinary produced from cvs of +;;; around feb 2000, the corresponding sources to which I never found +;;; (But it seems harmless to leave it here forever just in case.) #+(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~%~%")) @@ -54,10 +82,11 @@ (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")) +;;; This issue in OpenMCL led to some SBCL bug reports ca. late 2003. +#+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 @@ -66,7 +95,7 @@ (defmacro munging-cl-package (&body body) #-clisp `(progn ,@body) #+clisp `(ext:without-package-lock ("CL") - ,@body)) + ,@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 @@ -75,57 +104,57 @@ ;;; we? "One dirty unportable hack deserves another.":-) (let ((standard-ht (make-hash-table :test 'equal)) (host-ht (make-hash-table :test 'equal)) - (cl (find-package "COMMON-LISP"))) + (cl (find-package "COMMON-LISP"))) (do-external-symbols (i cl) (setf (gethash (symbol-name i) host-ht) t)) (dolist (i (read-from-file "common-lisp-exports.lisp-expr")) (setf (gethash i standard-ht) t)) (maphash (lambda (key value) - (declare (ignore value)) - (unless (gethash key standard-ht) - (warn "removing non-ANSI export from package CL: ~S" key) - (munging-cl-package - (unexport (intern key cl) cl)))) - host-ht) + (declare (ignore value)) + (unless (gethash key standard-ht) + (warn "removing non-ANSI export from package CL: ~S" key) + (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) - (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. - ;; For now, the hack below works, but it's not good to rely - ;; on this nonstandardness. Ergo, I should fix things so that even - ;; when the cross-compilation host COMMON-LISP package has - ;; symbols with home packages elsewhere, genesis dumps out - ;; the correct stuff. (For each symbol dumped, check whether it's - ;; exported from COMMON-LISP, and if so, dump it as though its - ;; home package is COMMON-LISP regardless of whether it actually - ;; is. I think..) - ;; - ;; X CMU CL, at least the Debian versions ca. 2.4.9 that I'm - ;; X using as I write this, plays a sneaky trick on us by - ;; X putting DEBUG and FLOATING-POINT-INEXACT in the - ;; X EXTENSIONS package, then IMPORTing them into - ;; X COMMON-LISP, then reEXPORTing them from COMMON-LISP. - ;; X This leaves their home packages bogusly set to - ;; X EXTENSIONS, which confuses genesis into thinking that - ;; X the CMU CL EXTENSIONS package has to be dumped into the - ;; X target SBCL. (perhaps a last-ditch survival strategy - ;; X for the CMU CL "nooo! don't bootstrap from scratch!" - ;; X meme?) As far as I can see, there's no even slightly - ;; X portable way to undo the damage, so we'll play the "one - ;; X dirty unportable hack deserves another" game, only even - ;; X dirtierly and more unportably than before.. - #+cmu - (let ((symbol (intern key cl))) - (unless (eq (symbol-package symbol) cl) - (warn "using low-level hack to move ~S from ~S to ~S" - symbol - (symbol-package symbol) - cl) - (kernel:%set-symbol-package symbol cl)))) - standard-ht)) + (declare (ignore value)) + (unless (gethash key host-ht) + (warn "adding required-by-ANSI export to package CL: ~S" key) + (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. + ;; For now, the hack below works, but it's not good to rely + ;; on this nonstandardness. Ergo, I should fix things so that even + ;; when the cross-compilation host COMMON-LISP package has + ;; symbols with home packages elsewhere, genesis dumps out + ;; the correct stuff. (For each symbol dumped, check whether it's + ;; exported from COMMON-LISP, and if so, dump it as though its + ;; home package is COMMON-LISP regardless of whether it actually + ;; is. I think..) + ;; + ;; X CMU CL, at least the Debian versions ca. 2.4.9 that I'm + ;; X using as I write this, plays a sneaky trick on us by + ;; X putting DEBUG and FLOATING-POINT-INEXACT in the + ;; X EXTENSIONS package, then IMPORTing them into + ;; X COMMON-LISP, then reEXPORTing them from COMMON-LISP. + ;; X This leaves their home packages bogusly set to + ;; X EXTENSIONS, which confuses genesis into thinking that + ;; X the CMU CL EXTENSIONS package has to be dumped into the + ;; X target SBCL. (perhaps a last-ditch survival strategy + ;; X for the CMU CL "nooo! don't bootstrap from scratch!" + ;; X meme?) As far as I can see, there's no even slightly + ;; X portable way to undo the damage, so we'll play the "one + ;; X dirty unportable hack deserves another" game, only even + ;; X dirtierly and more unportably than before.. + #+cmu + (let ((symbol (intern key cl))) + (unless (eq (symbol-package symbol) cl) + (warn "using low-level hack to move ~S from ~S to ~S" + symbol + (symbol-package symbol) + cl) + (kernel:%set-symbol-package symbol cl)))) + standard-ht))