Emit typed Kotlin Unit setters as statements

ober

fa2350ecff591ba95f827a4e865e8e394a056888

diff --git a/lib/jerboa/typed/kotlin/lower.ss b/lib/jerboa/typed/kotlin/lower.ss
index 7165c1b..d7db9f4 100644
--- a/lib/jerboa/typed/kotlin/lower.ss
+++ b/lib/jerboa/typed/kotlin/lower.ss
@@ -323,6 +323,26 @@
        (lower-call ir)]
       [else (error 'lower-expr "unsupported typed IR node for Kotlin" ir)]))
 
+  (def (lower-record-setter-statement ir)
+    (let* ([args (map lower-expr (typed-ir-call-args ir))]
+           [info (typed-ir-call-info ir)])
+      (make-kt-assign
+        (make-kt-member-get (car args) (info-ref info 'field (typed-ir-call-operator ir)))
+        (cadr args))))
+
+  (def (lower-unit-statements ir)
+    (cond
+      [(typed-ir-begin? ir)
+       (append-map lower-unit-statements (typed-ir-begin-exprs ir))]
+      [(and (typed-ir-call? ir)
+            (eq? (typed-ir-call-kind ir) 'record-setter))
+       (list (lower-record-setter-statement ir))]
+      [(and (typed-ir-lit? ir)
+            (eq? (typed-ir-lit-type ir) 'Unit))
+       '()]
+      [else
+       (list (make-kt-expr-stmt (lower-expr ir)))]))
+
   (def (lower-field-param field)
     (make-kt-param
       (typed-field-name field)
@@ -392,7 +412,9 @@
         (typed-def-name def)
         (map lower-param (typed-def-params def))
         (typed-type->kotlin-type (typed-def-return-type def))
-        (list (make-kt-return (lower-expr (cdr ir-entry))))
+        (if (eq? (typed-def-return-type def) 'Unit)
+          (lower-unit-statements (cdr ir-entry))
+          (list (make-kt-return (lower-expr (cdr ir-entry)))))
         '())))
 
   (def (lower-declaration decl)
diff --git a/tests/test-typed-kotlin.ss b/tests/test-typed-kotlin.ss
index afe2dea..9276ea7 100644
--- a/tests/test-typed-kotlin.ss
+++ b/tests/test-typed-kotlin.ss
@@ -126,7 +126,7 @@
 (test-contains "record accessor lowering" data-kotlin
   "return p.id")
 (test-contains "record setter lowering" data-kotlin
-  "p.focused_p = true")
+  "fun focus_pane(p: Pane): Unit {\n    p.focused_p = true\n}")
 (test-contains "variant constructor lowering" data-kotlin
   "return EditOp.Insert(at, text)")