0.8.21.11:
authorNikodemus Siivola <nikodemus@random-state.net>
Fri, 1 Apr 2005 12:57:28 +0000 (12:57 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Fri, 1 Apr 2005 12:57:28 +0000 (12:57 +0000)
  * print null lexenvs as #<NULL-LEXENV>, making for more compact
     backtraces. Non-null lexenvs still print as structures.
  * add TYPE-WARNING to cross-conditions for comfort, and try to
     embarrass the next one to diddle there into solving the larger
     issue.

NEWS
src/code/cross-condition.lisp
src/compiler/lexenv.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index 90e2cb4..c74b7b0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ changes in sbcl-0.8.22 relative to sbcl-0.8.21:
   * incompatible change: the --noprogrammer option, deprecated since
     version 0.7.5, has been removed.  Please use the equivalent
     --disable-debugger option instead.
+  * Null lexical environments are now printed as #<NULL-LEXENV>, 
+    significantly reducing the amount of clutter in typical backtraces.
   * improved the startup banner.  (thanks to Brian Mastenbrook and
     Teemu Kalvas)
   * optimization: REPLACE on declared (UNSIGNED-BYTE 8) vectors, as well
index e74fc3c..5c2f821 100644 (file)
 (define-condition reference-condition ()
   ((references :initarg :references :reader reference-condition-references)))
 
+;;; KLUDGE: yet another OAOOM.
+;;;
+;;; FIXME: This is clearly one OAOOM KLUDGE too many in a row. When tempted
+;;; to add another one invent DEF!CONDITION or whatever seems necessary,
+;;; and replace these.
+(define-condition type-warning (reference-condition simple-warning)
+  ()
+  (:default-initargs :references (list '(:sbcl :node "Handling of Types"))))
+
 (define-condition bug (simple-error)
   ()
   (:report
index 34b4a59..5eba1fa 100644 (file)
@@ -15,7 +15,8 @@
 ;;; (This is also what shows up as an ENVIRONMENT value in macroexpansion.)
 #!-sb-fluid (declaim (inline internal-make-lexenv)) ; only called in one place
 (def!struct (lexenv
-            (:constructor make-null-lexenv ())
+            (:print-function print-lexenv)
+            (:constructor make-null-lexenv ())      
             (:constructor internal-make-lexenv
                           (funs vars blocks tags
                                  type-restrictions
     (null (make-null-lexenv))
     (lexenv x)))
 
+(defun null-lexenv-p (lexenv)
+  (equalp (coerce-to-lexenv lexenv) (make-null-lexenv)))
+
+(defun print-lexenv (lexenv stream level)
+  (if (null-lexenv-p lexenv)
+      (print-unreadable-object (lexenv stream)
+       (write-string "NULL-LEXENV" stream))
+      (default-structure-print lexenv stream level)))
+
 (defun maybe-inline-syntactic-closure (lambda lexenv)
   (declare (type list lambda) (type lexenv lexenv))
   (aver (eql (first lambda) 'lambda))
index 48b682f..2422444 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.21.10"
+"0.8.21.11"