0.8.19.1: PowerPC linkage tables (darwin only for now)
[sbcl.git] / src / code / early-extensions.lisp
index 5fb2c0f..797f149 100644 (file)
 (defun %failed-aver (expr-as-string)
   (bug "~@<failed AVER: ~2I~_~S~:>" expr-as-string))
 
-;;; We need a definition of BUG here for the host compiler to be able
-;;; to deal with BUGs in sbcl. This should never affect an end-user,
-;;; who will pick up the definition that signals a CONDITION of
-;;; condition-class BUG; however, this is not defined on the host
-;;; lisp, but for the target. SBCL developers sometimes trigger BUGs
-;;; in their efforts, and it is useful to get the details of the BUG
-;;; rather than an undefined function error. - CSR, 2002-04-12
-#+sb-xc-host
 (defun bug (format-control &rest format-arguments)
-  (error 'simple-error
-        :format-control "~@<  ~? ~:@_~?~:>"
-        :format-arguments `(,format-control
-                            ,format-arguments
-                            "~@<If you see this and are an SBCL ~
-developer, then it is probable that you have made a change to the ~
-system that has broken the ability for SBCL to compile, usually by ~
-removing an assumed invariant of the system, but sometimes by making ~
-an averrance that is violated (check your code!). If you are a user, ~
-please submit a bug report to the developers' mailing list, details of ~
-which can be found at <http://sbcl.sourceforge.net/>.~:@>"
-                            ())))
+  (error 'bug
+        :format-control format-control
+        :format-arguments format-arguments))
 
 (defmacro enforce-type (value type)
   (once-only ((value value))
@@ -1174,3 +1157,17 @@ which can be found at <http://sbcl.sourceforge.net/>.~:@>"
        (*read-suppress* *read-suppress*)
        (*readtable* *readtable*))
     (funcall function)))
+
+;;; Bind a few "potentially dangerous" printer control variables to
+;;; safe values, respecting current values if possible.
+(defmacro with-sane-io-syntax (&body forms)
+  `(call-with-sane-io-syntax (lambda () ,@forms)))
+
+(defun call-with-sane-io-syntax (function)
+  (declare (type function function))
+  (macrolet ((true (sym)
+               `(and (boundp ',sym) ,sym)))
+    (let ((*print-readably* nil)
+          (*print-level* (or (true *print-level*) 6))
+          (*print-length* (or (true *print-length*) 12)))
+      (funcall function))))