2010-10-06 08:52:04 |
Nikodemus Siivola |
description |
in-package :sb-c)
(defknown compiler-derived-type (t) (values t t) (unsafe))
(deftransform compiler-derived-type ((x) (t) * :node node)
(delay-ir1-transform node :optimize)
(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
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)
(delay-ir1-transform node :optimize)
(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
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 |
|