Lower typed JVM array setters to Kotlin

ober

31acfe4e8ba4bef80851d73d7ba62ff1b8282a47

diff --git a/lib/jerboa/typed/checker.ss b/lib/jerboa/typed/checker.ss
index f4f5e78..a9eb83e 100644
--- a/lib/jerboa/typed/checker.ss
+++ b/lib/jerboa/typed/checker.ss
@@ -397,18 +397,27 @@
       (cons 'float-array-ref
             (make-typed-call-sig (list 'FloatArray 'Int32) 'Float32 '()
               'jvm-float-array-ref '()))
+      (cons 'float-array-set!
+            (make-typed-call-sig (list 'FloatArray 'Int32 'Float32) 'Unit '()
+              'jvm-float-array-set '()))
       (cons 'float-array-length
             (make-typed-call-sig (list 'FloatArray) 'Int32 '()
               'jvm-float-array-length '()))
       (cons 'int-array-ref
             (make-typed-call-sig (list 'IntArray 'Int32) 'Int32 '()
               'jvm-int-array-ref '()))
+      (cons 'int-array-set!
+            (make-typed-call-sig (list 'IntArray 'Int32 'Int32) 'Unit '()
+              'jvm-int-array-set '()))
       (cons 'int-array-length
             (make-typed-call-sig (list 'IntArray) 'Int32 '()
               'jvm-int-array-length '()))
       (cons 'boolean-array-ref
             (make-typed-call-sig (list 'BooleanArray 'Int32) 'Bool '()
               'jvm-boolean-array-ref '()))
+      (cons 'boolean-array-set!
+            (make-typed-call-sig (list 'BooleanArray 'Int32 'Bool) 'Unit '()
+              'jvm-boolean-array-set '()))
       (cons 'boolean-array-length
             (make-typed-call-sig (list 'BooleanArray) 'Int32 '()
               'jvm-boolean-array-length '()))
diff --git a/lib/jerboa/typed/kotlin/lower.ss b/lib/jerboa/typed/kotlin/lower.ss
index 979cfef..3511d8b 100644
--- a/lib/jerboa/typed/kotlin/lower.ss
+++ b/lib/jerboa/typed/kotlin/lower.ss
@@ -288,10 +288,20 @@
          (make-kt-call (kt-name1 'floatArrayOf) args)]
         [(jvm-float-array-ref)
          (make-kt-index-get (car args) (cadr args))]
+        [(jvm-float-array-set)
+         (make-kt-block
+           (list (make-kt-assign (make-kt-index-get (car args) (cadr args))
+                                 (caddr args)))
+           (make-kt-lit 'Unit '()))]
         [(jvm-float-array-length)
          (make-kt-member-get (car args) 'size)]
         [(jvm-int-array-ref)
          (make-kt-index-get (car args) (cadr args))]
+        [(jvm-int-array-set)
+         (make-kt-block
+           (list (make-kt-assign (make-kt-index-get (car args) (cadr args))
+                                 (caddr args)))
+           (make-kt-lit 'Unit '()))]
         [(jvm-int-array-length)
          (make-kt-member-get (car args) 'size)]
         [(jvm-int-array-build)
@@ -308,6 +318,11 @@
          (make-kt-index-get (car args) (cadr args))]
         [(jvm-boolean-array-ref)
          (make-kt-index-get (car args) (cadr args))]
+        [(jvm-boolean-array-set)
+         (make-kt-block
+           (list (make-kt-assign (make-kt-index-get (car args) (cadr args))
+                                 (caddr args)))
+           (make-kt-lit 'Unit '()))]
         [(jvm-boolean-array-length)
          (make-kt-member-get (car args) 'size)]
         [(bytevector-length)
diff --git a/tests/test-typed-kotlin.ss b/tests/test-typed-kotlin.ss
index 888a031..4413e40 100644
--- a/tests/test-typed-kotlin.ss
+++ b/tests/test-typed-kotlin.ss
@@ -457,6 +457,34 @@
 (test-contains "IntArray length lowers to Kotlin size" array-kotlin
   "return items.size")
 
+(define array-set-form
+  '(typed-library (sample typed arrayset)
+     (export setGray setEdge setWeight)
+     (type Int32)
+     (type IntArray)
+     (type BooleanArray)
+     (type Float32)
+     (type FloatArray)
+     (def (setGray (items : IntArray) (index : Int32) (value : Int32)) : Unit
+       (int-array-set! items index value))
+     (def (setEdge (items : BooleanArray) (index : Int32) (value : Bool)) : Unit
+       (boolean-array-set! items index value))
+     (def (setWeight (items : FloatArray) (index : Int32) (value : Float32)) : Unit
+       (float-array-set! items index value))))
+
+(define array-set-kotlin
+  (typed-library-form->kotlin-string array-set-form))
+
+(test-contains "IntArray set lowers to Kotlin indexed assignment"
+  array-set-kotlin
+  "items[index] = value")
+(test-contains "BooleanArray set lowers to Kotlin indexed assignment"
+  array-set-kotlin
+  "fun setEdge(items: BooleanArray, index: Int, value: Boolean)")
+(test-contains "FloatArray set lowers to Kotlin indexed assignment"
+  array-set-kotlin
+  "fun setWeight(items: FloatArray, index: Int, value: Float)")
+
 (define int-array-build-form
   '(typed-library (sample typed intarraybuild)
      (export copyPlusOne)