shithub: femtolisp

Download patch

ref: c400506dffc50ab1b939714d64c8edccd4a73a41
parent: 4cf907cc035cd84c90b4270f758d382861c15451
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Mon Dec 9 19:04:46 EST 2024

aref: fix multiindex on arrays

--- a/flisp.c
+++ b/flisp.c
@@ -1281,7 +1281,8 @@
 						bounds_error(v, e);
 					v = vector_elt(v, isz);
 				}else if(__likely(isarray(v))){
-					v = cvalue_array_aref(&FL(stack)[FL(sp)-i]);
+					FL(stack)[FL(sp)-i-1] = v;
+					v = cvalue_array_aref(&FL(stack)[FL(sp)-i-1]);
 				}else{
 					type_error("sequence", v);
 				}
--- a/test/unittest.lsp
+++ b/test/unittest.lsp
@@ -419,6 +419,10 @@
 (assert (equal? 7 (aref a 1 2)))
 (assert (equal? 5 (aref a 1 1 1)))
 (assert-fail (aref a 1 1 3) bounds-error)
+(assert (equal? (fixnum #\l) (aref #("hello") 0 2)))
+(assert (equal? (fixnum #\o) (aref #("hello") 0 4)))
+(assert-fail (aref #("hello") 0 5))
+(assert-fail (aref #("hello") 1 0))
 
 ;; make many initialized tables large enough not to be stored in-line
 (for 1 100 (λ (i)