X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcompiler.pure.lisp;h=ae0fe96f8494b6fd9f98f40dab9c3c5fed940009;hb=b9a60d8c091096ce7f90073de9b3d26ec7433387;hp=234c9b1fc3cd417d125aa716c40327a885ebcb64;hpb=4d58eac755342319f7a25391606fed86541e5fef;p=sbcl.git diff --git a/tests/compiler.pure.lisp b/tests/compiler.pure.lisp index 234c9b1..ae0fe96 100644 --- a/tests/compiler.pure.lisp +++ b/tests/compiler.pure.lisp @@ -1373,15 +1373,43 @@ 0 0)))) 391833530 -32785211))) -;;; Efficiency notes for FUNCALL -(handler-case - (compile nil '(lambda (x) (funcall x))) - (sb-ext:compiler-note (e) - (error "bogus compiler note: ~S." e))) - -(catch :got-note - (handler-case - (compile nil '(lambda (x) (declare (optimize speed)) (funcall x))) - (sb-ext:compiler-note (e) - (throw :got-note nil))) - (error "missing compiler note for FUNCALL")) +;;; efficiency notes for ordinary code +(macrolet ((frob (arglist &body body) + `(progn + (handler-case + (compile nil '(lambda ,arglist ,@body)) + (sb-ext:compiler-note (e) + (error "bad compiler note for ~S:~% ~A" ',body e))) + (catch :got-note + (handler-case + (compile nil '(lambda ,arglist (declare (optimize speed)) + ,@body)) + (sb-ext:compiler-note (e) (throw :got-note nil))) + (error "missing compiler note for ~S" ',body))))) + (frob (x) (funcall x)) + (frob (x y) (find x y)) + (frob (x y) (find-if x y)) + (frob (x y) (find-if-not x y)) + (frob (x y) (position x y)) + (frob (x y) (position-if x y)) + (frob (x y) (position-if-not x y)) + (frob (x) (aref x 0))) + +(macrolet ((frob (style-warn-p form) + (if style-warn-p + `(catch :got-style-warning + (handler-case + (eval ',form) + (style-warning (e) (throw :got-style-warning nil))) + (error "missing style-warning for ~S" ',form)) + `(handler-case + (eval ',form) + (style-warning (e) + (error "bad style-warning for ~S: ~A" ',form e)))))) + (frob t (lambda (x &optional y &key z) (list x y z))) + (frob nil (lambda (x &optional y z) (list x y z))) + (frob nil (lambda (x &key y z) (list x y z))) + (frob t (defgeneric #:foo (x &optional y &key z))) + (frob nil (defgeneric #:foo (x &optional y z))) + (frob nil (defgeneric #:foo (x &key y z))) + (frob t (defun #:foo (x) (flet ((foo (x &optional y &key z) (list x y z))) (foo x x :z x)))))