Emit typed Kotlin Unit setters as statements
ober
fa2350ecff591ba95f827a4e865e8e394a056888
--- 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) --- 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)")