master: Add a type deriver for ELT
stassats via Sbcl-commits <[email protected]> Thu, 04 Jun 2026 22:32:38 +0000
| Newsgroups | gmane.lisp.steel-bank.cvs |
|---|---|
| Message-ID | <[email protected]> |
The branch "master" has been updated in SBCL:
via b378f284eab221c5c1dc914d5c12e67dc0ed4cf0 (commit)
from de8f08567ed68a0eabcf024199abf67206b76462 (commit)
- Log -----------------------------------------------------------------
commit b378f284eab221c5c1dc914d5c12e67dc0ed4cf0
Author: Stas Boukarev <[email protected]>
Date: Fri Jun 5 01:30:34 2026 +0300
Add a type deriver for ELT
It's not always transformed to NTH or AREF.
---
src/compiler/array-tran.lisp | 3 +++
tests/seq.pure.lisp | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/src/compiler/array-tran.lisp b/src/compiler/array-tran.lisp
index 2c354a117..e0d5364ba 100644
--- a/src/compiler/array-tran.lisp
+++ b/src/compiler/array-tran.lisp
@@ -490,6 +490,9 @@
(defoptimizer (aref derive-type) ((array &rest subscripts))
(sequence-elements-type array))
+(defoptimizer (elt derive-type) ((sequence index))
+ (sequence-elements-type sequence))
+
(defoptimizer ((setf aref) derive-type) ((new-value array &rest subscripts))
(assert-new-value-type new-value array))
diff --git a/tests/seq.pure.lisp b/tests/seq.pure.lisp
index 8b11b0506..119542e4c 100644
--- a/tests/seq.pure.lisp
+++ b/tests/seq.pure.lisp
@@ -1137,3 +1137,12 @@
((v '(1 2)) v)
((v #(2 3)) v)
((v #9*1) v))))
+
+(with-test (:name :elt-constants-type)
+ (assert-type
+ (lambda (x n)
+ (elt (if x
+ #(1 2)
+ '(1 3))
+ n))
+ (integer 1 3)))
-----------------------------------------------------------------------
hooks/post-receive
--
SBCL