X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fprint.impure.lisp;h=8de1bc5f0a05c46952d61a877696297f0ca25c91;hb=cd13034f9415f64cdaa05893a4ac5ff1e95c97bd;hp=69ff13c75e331b3079c358ab3f7abca5e562336e;hpb=10e7ad98e711db20ada209a4be37f06c466cfbe8;p=sbcl.git diff --git a/tests/print.impure.lisp b/tests/print.impure.lisp index 69ff13c..8de1bc5 100644 --- a/tests/print.impure.lisp +++ b/tests/print.impure.lisp @@ -134,5 +134,40 @@ ;;; violations through stack corruption. (print 0.0001) +;;; In sbcl-0.8.7, the ~W format directive interpreter implemented the +;;; sense of the colon and at-sign modifiers exactly backwards. +;;; +;;; (Yes, the test for this *is* substantially hairier than the fix; +;;; wanna make something of it?) +(cl:in-package :cl-user) +(defstruct wexerciser-0-8-7) +(defun wexercise-0-8-7-interpreted (wformat) + (format t wformat (make-wexerciser-0-8-7))) +(defmacro define-compiled-wexercise-0-8-7 (wexercise wformat) + `(defun ,wexercise () + (declare (optimize (speed 3) (space 1))) + (format t ,wformat (make-wexerciser-0-8-7)) + (values))) +(define-compiled-wexercise-0-8-7 wexercise-0-8-7-compiled-without-atsign "~W") +(define-compiled-wexercise-0-8-7 wexercise-0-8-7-compiled-with-atsign "~@W") +(defmethod print-object :before ((wexerciser-0-8-7 wexerciser-0-8-7) stream) + (unless (and *print-level* *print-length*) + (error "gotcha coming"))) +(let ((*print-level* 11) + (*print-length* 12)) + (wexercise-0-8-7-interpreted "~W") + (wexercise-0-8-7-compiled-without-atsign)) +(remove-method #'print-object + (find-method #'print-object + '(:before) + (mapcar #'find-class '(wexerciser-0-8-7 t)))) +(defmethod print-object :before ((wexerciser-0-8-7 wexerciser-0-8-7) stream) + (when (or *print-level* *print-length*) + (error "gotcha going"))) +(let ((*print-level* 11) + (*print-length* 12)) + (wexercise-0-8-7-interpreted "~@W") + (wexercise-0-8-7-compiled-with-atsign)) + ;;; success (quit :unix-status 104)