Lower typed Kotlin record setters
ober
52db8d222eb362c690c7692c714c9d56a51c8778
--- 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, --- 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)]) --- 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)")