From 0a3425ba18565eec37c9b92f98224c4d5b7e1a78 Mon Sep 17 00:00:00 2001 From: giles Date: Thu, 23 Apr 2026 23:24:02 +0000 Subject: [PATCH] js-on-sx: Array.prototype.lastIndexOf --- lib/js/runtime.sx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/js/runtime.sx b/lib/js/runtime.sx index 3489f095..5fe9a266 100644 --- a/lib/js/runtime.sx +++ b/lib/js/runtime.sx @@ -854,6 +854,19 @@ ((cmp (if (= (len args) 0) nil (nth args 0)))) (js-list-sort! arr cmp) arr))) + ((= name "lastIndexOf") + (fn + (&rest args) + (if + (= (len args) 0) + -1 + (js-list-last-index-of + arr + (nth args 0) + (if + (< (len args) 2) + (- (len arr) 1) + (js-num-to-int (nth args 1))))))) (else js-undefined)))) (define pop-last! (fn (lst) nil)) @@ -1060,6 +1073,15 @@ (begin (js-list-set! arr i b) (js-list-set! arr (+ i 1) a))))) (js-list-sort-inner! arr cmp (+ i 1) end)))))) +(define + js-list-last-index-of + (fn + (arr x i) + (cond + ((< i 0) -1) + ((= (nth arr i) x) i) + (else (js-list-last-index-of arr x (- i 1)))))) + (define js-list-every-loop (fn @@ -1389,6 +1411,7 @@ ((= key "flat") (js-array-method obj "flat")) ((= key "fill") (js-array-method obj "fill")) ((= key "sort") (js-array-method obj "sort")) + ((= key "lastIndexOf") (js-array-method obj "lastIndexOf")) (else js-undefined))) ((= (type-of obj) "string") (cond