(defun compiler-derived-type (x)
(declare (ignore x))
(values t nil))
(export 'compiler-derived-type)
(in-package :cl-user)
;;; As expected
CL-USER> (funcall (compile nil `(lambda (&rest list) (sb-c:compiler-derived-type list))))
LIST
T
;;; Oops. We should get LIST, T here too.
CL-USER> (funcall (funcall (compile nil `(lambda () (lambda (&rest list) (sb-c:compiler-derived-type list))))))
T
T
in-package :sb-c)
(defknown compiler- derived- type (t) (values t t) (unsafe))
(deftransform compiler- derived- type ((x) (t) * :node node) ir1-transform node :optimize)
(delay-
(let ((type (type-specifier (lvar-type x))))
`(values ',type t)))
(defun compiler- derived- type (x)
(declare (ignore x))
(values t nil))
(export 'compiler- derived- type)
(in-package :cl-user)
;;; As expected
( sb-c:compiler- derived- type list))))
CL-USER> (funcall (compile nil `(lambda (&rest list)
LIST
T
;;; Oops. We should get LIST, T here too.
(lambda (&rest list)
(sb- c:compiler- derived- type list))))))
CL-USER> (funcall (funcall (compile nil `(lambda ()
T
T