0.9.6.50: stability before creativity
[sbcl.git] / src / code / sysmacs.lisp
index a970eef..b61e1b3 100644 (file)
@@ -38,13 +38,10 @@ gcs. Finally, upon leaving the BODY if gc is not inhibited it runs the
 pending gc. Similarly, if gc is triggered in another thread then it
 waits until gc is enabled in this thread."
   `(unwind-protect
-    (let ((*gc-inhibit* t))
-      ,@body)
-    ;; the test is racy, but it can err only on the overeager side
-    (when (and (not *gc-inhibit*)
-               (or #!+sb-thread *stop-for-gc-pending*
-                   *gc-pending*))
-      (sb!unix::receive-pending-interrupt))))
+        (let ((*gc-inhibit* t))
+          ,@body)
+     ;; the test is racy, but it can err only on the overeager side
+     (sb!kernel::maybe-handle-pending-gc)))
 
 \f
 ;;; EOF-OR-LOSE is a useful macro that handles EOF.
@@ -99,8 +96,8 @@ waits until gc is enabled in this thread."
                        `(,function stream ,@args)))))
          `(funcall (,slot stream) stream ,@args))))
 
-(defmacro with-out-stream (stream (slot &rest args) &optional stream-dispatch)
-  `(let ((stream (out-synonym-of ,stream)))
+(defmacro with-out-stream/no-synonym (stream (slot &rest args) &optional stream-dispatch)
+  `(let ((stream ,stream))
     ,(if stream-dispatch
          `(if (ansi-stream-p stream)
               (funcall (,slot stream) stream ,@args)
@@ -108,12 +105,20 @@ waits until gc is enabled in this thread."
                   `(,(destructuring-bind (function &rest args) stream-dispatch
                                          `(,function stream ,@args)))))
          `(funcall (,slot stream) stream ,@args))))
+
+(defmacro with-out-stream (stream (slot &rest args) &optional stream-dispatch)
+  `(with-out-stream/no-synonym (out-synonym-of ,stream)
+    (,slot ,@args) ,stream-dispatch))
+
 \f
 ;;;; These are hacks to make the reader win.
 
 ;;; This macro sets up some local vars for use by the
 ;;; FAST-READ-CHAR macro within the enclosed lexical scope. The stream
 ;;; is assumed to be a ANSI-STREAM.
+;;;
+;;; KLUDGE: Some functions (e.g. ANSI-STREAM-READ-LINE) use these variables
+;;; directly, instead of indirecting through FAST-READ-CHAR.
 (defmacro prepare-for-fast-read-char (stream &body forms)
   `(let* ((%frc-stream% ,stream)
           (%frc-method% (ansi-stream-in %frc-stream%))
@@ -129,7 +134,7 @@ waits until gc is enabled in this thread."
   `(setf (ansi-stream-in-index %frc-stream%) %frc-index%))
 
 ;;; a macro with the same calling convention as READ-CHAR, to be used
-;;; within the scope of a PREPARE-FOR-FAST-READ-CHAR
+;;; within the scope of a PREPARE-FOR-FAST-READ-CHAR.
 (defmacro fast-read-char (&optional (eof-error-p t) (eof-value ()))
   `(cond
     ((not %frc-buffer%)