X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Finterface.impure.lisp;h=da179ede3f0ee3c2e62c2b33dc50f1c09e7f0571;hb=d7875c296a4988e9f27e2776237884deb1984c62;hp=52b5fc2f32582df482006f10a55db28cf49cbbed;hpb=e345436f0efaca2c0ba6be2c30ce6b5a3dae3836;p=sbcl.git diff --git a/tests/interface.impure.lisp b/tests/interface.impure.lisp index 52b5fc2..da179ed 100644 --- a/tests/interface.impure.lisp +++ b/tests/interface.impure.lisp @@ -30,55 +30,60 @@ (assert (string= (documentation #'(setf foo) 'function) "(setf foo) documentation")) +(with-test (:name :disassemble) ;;; DISASSEMBLE shouldn't fail on closures or unpurified functions -(defun disassemble-fun (x) x) -(disassemble 'disassemble-fun) - -(let ((x 1)) (defun disassemble-closure (y) (if y (setq x y) x))) -(disassemble 'disassemble-closure) - -#+sb-eval -(progn - ;; Nor should it fail on interpreted functions - (let ((sb-ext:*evaluator-mode* :interpret)) - (eval `(defun disassemble-eval (x) x)) - (disassemble 'disassemble-eval)) - - ;; disassemble-eval should still be an interpreted function. - ;; clhs disassemble: "(If that function is an interpreted function, - ;; it is first compiled but the result of this implicit compilation - ;; is not installed.)" - (assert (sb-eval:interpreted-function-p #'disassemble-eval))) - -;; nor should it fail on generic functions or other funcallable instances -(defgeneric disassemble-generic (x)) -(disassemble 'disassemble-generic) -(let ((fin (sb-mop:make-instance 'sb-mop:funcallable-standard-object))) - (disassemble fin)) + (defun disassemble-fun (x) x) + (disassemble 'disassemble-fun) + + (let ((x 1)) (defun disassemble-closure (y) (if y (setq x y) x))) + (disassemble 'disassemble-closure) + + #+sb-eval + (progn + ;; Nor should it fail on interpreted functions + (let ((sb-ext:*evaluator-mode* :interpret)) + (eval `(defun disassemble-eval (x) x)) + (disassemble 'disassemble-eval)) + + ;; disassemble-eval should still be an interpreted function. + ;; clhs disassemble: "(If that function is an interpreted function, + ;; it is first compiled but the result of this implicit compilation + ;; is not installed.)" + (assert (sb-eval:interpreted-function-p #'disassemble-eval))) + + ;; nor should it fail on generic functions or other funcallable instances + (defgeneric disassemble-generic (x)) + (disassemble 'disassemble-generic) + (let ((fin (make-instance 'sb-mop:funcallable-standard-object))) + (disassemble fin))) ;;; while we're at it, much the same applies to ;;; FUNCTION-LAMBDA-EXPRESSION: (defun fle-fun (x) x) -(function-lambda-expression #'fle-fun) (let ((x 1)) (defun fle-closure (y) (if y (setq x y) x))) -(function-lambda-expression #'fle-closure) - -#+sb-eval -(progn - ;; Nor should it fail on interpreted functions - (let ((sb-ext:*evaluator-mode* :interpret)) - (eval `(defun fle-eval (x) x)) - (function-lambda-expression #'fle-eval)) - - ;; fle-eval should still be an interpreted function. - (assert (sb-eval:interpreted-function-p #'fle-eval))) - -;; nor should it fail on generic functions or other funcallable instances -(defgeneric fle-generic (x)) -(function-lambda-expression #'fle-generic) -(let ((fin (sb-mop:make-instance 'sb-mop:funcallable-standard-object))) - (function-lambda-expression fin)) + +(with-test (:name :function-lambda-expression) + (flet ((fle-name (x) + (nth-value 2 (function-lambda-expression x)))) + (assert (eql (fle-name #'fle-fun) 'fle-fun)) + (assert (eql (fle-name #'fle-closure) 'fle-closure)) + (assert (eql (fle-name #'disassemble-generic) 'disassemble-generic)) + (function-lambda-expression + (make-instance 'sb-mop:funcallable-standard-object)) + (function-lambda-expression + (make-instance 'generic-function)) + (function-lambda-expression + (make-instance 'standard-generic-function)) + #+sb-eval + (progn + (let ((sb-ext:*evaluator-mode* :interpret)) + (eval `(defun fle-eval (x) x)) + (assert (eql (fle-name #'fle-eval) 'fle-eval))) + + ;; fle-eval should still be an interpreted function. + (assert (sb-eval:interpreted-function-p #'fle-eval))))) + ;;; support for DESCRIBE tests (defstruct to-be-described a b) @@ -86,6 +91,10 @@ (let ((sb-ext:*evaluator-mode* :compile)) (eval `(let (x) (defun closure-to-describe () (incf x))))) +(with-test (:name :describe-empty-gf) + (describe (make-instance 'generic-function)) + (describe (make-instance 'standard-generic-function))) + ;;; DESCRIBE should run without signalling an error. (with-test (:name (describe :no-error)) (describe (make-to-be-described)) @@ -232,7 +241,7 @@ "bar" (incf x y))) -(with-test (:name (documentation closure)) +(with-test (:name (documentation :closure)) (assert (string= (documentation 'docfoo 'function) "bar")) (assert (string= (setf (documentation 'docfoo 'function) "baz") "baz")) (assert (string= (documentation 'docfoo 'function) "baz")) @@ -243,10 +252,10 @@ (assert (not (setf (documentation 'docfoo 'function) nil))) (assert (not (documentation 'docfoo 'function)))) -(with-test (:name (documentation built-in-macro) :skipped-on '(not :sb-doc)) +(with-test (:name (documentation :built-in-macro) :skipped-on '(not :sb-doc)) (assert (documentation 'trace 'function))) -(with-test (:name (documentation built-in-function) :skipped-on '(not :sb-doc)) +(with-test (:name (documentation :built-in-function) :skipped-on '(not :sb-doc)) (assert (documentation 'cons 'function))) (with-test (:name :describe-generic-function-with-assumed-type) @@ -310,5 +319,14 @@ (equal (documentation 'test 'function) (documentation 'test2 'function))))) +(with-test (:name :setf-documentation-on-nil) + (assert + (handler-case + (assert (equal (setf (documentation nil 'function) "foo") "foo")) + (style-warning () t) + (:no-error (x) + (declare (ignore x)) + nil)))) + ;;;; success