0.9.1.55: trivial cleanup, new documentation directory
[sbcl.git] / src / compiler / macros.lisp
index 3e1e337..7016312 100644 (file)
 (defmacro position-or-lose (&rest args)
   `(or (position ,@args)
        (error "shouldn't happen?")))
+
+;;; user-definable compiler io syntax
+
+;;; We use WITH-SANE-IO-SYNTAX to provide safe defaults, and provide
+;;; *COMPILER-PRINT-VARIABLE-ALIST* for user customization.
+(defvar *compiler-print-variable-alist* nil
+  #!+sb-doc
+  "an association list describing new bindings for special variables
+to be used by the compiler for error-reporting, etc. Eg.
+
+ ((*PRINT-LENGTH* . 10) (*PRINT-LEVEL* . 6) (*PRINT-PRETTY* . NIL))
+
+The variables in the CAR positions are bound to the values in the CDR
+during the execution of some debug commands. When evaluating arbitrary
+expressions in the debugger, the normal values of the printer control
+variables are in effect.
+
+Initially empty, *COMPILER-PRINT-VARIABLE-ALIST* is Typically used to
+specify bindings for printer control variables.")
+
+(defmacro with-compiler-io-syntax (&body forms)
+  `(with-sane-io-syntax
+    (progv
+        (nreverse (mapcar #'car *compiler-print-variable-alist*))
+        (nreverse (mapcar #'cdr *compiler-print-variable-alist*))
+      ,@forms)))