mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
Have CTU:COMPILER-DERIVED-TYPE return the final dervied type.
By making it an IR2 converter, we get the final type, not some intermediate type.
This commit is contained in:
parent
13b5e0a8ed
commit
30741cecef
|
|
@ -35,11 +35,16 @@
|
|||
|
||||
(cl:in-package :ctu)
|
||||
|
||||
;;; Report the type the compiler ended up with for X.
|
||||
(unless (fboundp 'compiler-derived-type)
|
||||
(defknown compiler-derived-type (t) (values t t) (flushable))
|
||||
(deftransform compiler-derived-type ((x) * * :node node)
|
||||
(sb-c::delay-ir1-transform node :ir1-phases)
|
||||
`(values ',(type-specifier (sb-c::lvar-type x)) t))
|
||||
(sb-c::defoptimizer (compiler-derived-type sb-c::ir2-convert) ((x) node block)
|
||||
(let ((lvar (sb-c::node-lvar node)))
|
||||
(sb-c::move-lvar-result
|
||||
node block
|
||||
(list (sb-c::emit-constant (type-specifier (sb-c::lvar-type x)))
|
||||
(sb-c::emit-constant t))
|
||||
lvar)))
|
||||
(defun compiler-derived-type (x)
|
||||
(declare (ignore x))
|
||||
(values t nil)))
|
||||
|
|
|
|||
Loading…
Reference in a new issue