Lower typed Kotlin record setters

ober

52db8d222eb362c690c7692c714c9d56a51c8778

diff --git a/docs/typed-kotlin.md b/docs/typed-kotlin.md
index 2064f57..54613f7 100644
--- a/docs/typed-kotlin.md
+++ b/docs/typed-kotlin.md
@@ -9,6 +9,8 @@ by the Rust and LLVM work:
 
 - top-level typed functions;
 - records as Kotlin `data class` declarations;
+- mutable record fields and setters as Kotlin `var` properties and property
+  assignments;
 - variants as Kotlin `sealed class` declarations with `data class` and
   `data object` cases;
 - literals, variables, `begin`, `let`, `if`, same-module calls, arithmetic,
diff --git a/lib/jerboa/typed/kotlin/lower.ss b/lib/jerboa/typed/kotlin/lower.ss
index a3871fb..7165c1b 100644
--- a/lib/jerboa/typed/kotlin/lower.ss
+++ b/lib/jerboa/typed/kotlin/lower.ss
@@ -235,6 +235,13 @@
            args)]
         [(record-accessor)
          (make-kt-member-get (car args) (info-ref info 'field operator))]
+        [(record-setter)
+         (make-kt-block
+           (list
+             (make-kt-assign
+               (make-kt-member-get (car args) (info-ref info 'field operator))
+               (cadr args)))
+           (make-kt-lit 'Unit '()))]
         [(variant-ctor)
          (let ([variant-name (info-ref info 'variant #f)]
                [case-name (info-ref info 'case operator)])
diff --git a/tests/test-typed-kotlin.ss b/tests/test-typed-kotlin.ss
index 739cc05..afe2dea 100644
--- a/tests/test-typed-kotlin.ss
+++ b/tests/test-typed-kotlin.ss
@@ -99,7 +99,7 @@
 (define data-form
   '(typed-library (sample typed data)
      (export make-Pane Pane? Pane-id Pane-focused? Pane-focused?-set!
-             EditOp? Insert Noop)
+             focus-pane EditOp? Insert Noop)
      (record Pane
        ((id : Nat)
         (mut focused? : Bool)))
@@ -108,6 +108,8 @@
        (Noop))
      (def (pane-id (p : Pane)) : Nat
        (Pane-id p))
+     (def (focus-pane (p : Pane)) : Unit
+       (Pane-focused?-set! p #t))
      (def (make-insert (at : Nat) (text : String)) : EditOp
        (Insert at text))))
 
@@ -123,6 +125,8 @@
   "data object Noop : EditOp")
 (test-contains "record accessor lowering" data-kotlin
   "return p.id")
+(test-contains "record setter lowering" data-kotlin
+  "p.focused_p = true")
 (test-contains "variant constructor lowering" data-kotlin
   "return EditOp.Insert(at, text)")