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