Parenthesize complex Kotlin member targets
ober
d224eee40fd188015e2425bef919e4b04c6ab6cf
--- a/lib/jerboa/typed/kotlin/print.ss +++ b/lib/jerboa/typed/kotlin/print.ss @@ -203,6 +203,20 @@ (def (parenthesize text) (string-append "(" text ")")) + (def (complex-member-target? expr) + (or (kt-binary? expr) + (kt-unary? expr) + (kt-if? expr) + (kt-block? expr) + (kt-when? expr) + (kt-lambda? expr))) + + (def (kotlin-member-target->string expr) + (let ([text (kotlin-expr->string expr)]) + (if (complex-member-target? expr) + (parenthesize text) + text))) + (def (kotlin-expr->string expr) (cond [(kt-lit? expr) (kotlin-lit->string expr)] @@ -215,7 +229,7 @@ ")")] [(kt-member-call? expr) (string-append - (kotlin-expr->string (kt-member-call-target expr)) + (kotlin-member-target->string (kt-member-call-target expr)) "." (kotlin-symbol-name (kt-member-call-name expr)) "(" @@ -223,12 +237,12 @@ ")")] [(kt-member-get? expr) (string-append - (kotlin-expr->string (kt-member-get-target expr)) + (kotlin-member-target->string (kt-member-get-target expr)) "." (kotlin-symbol-name (kt-member-get-name expr)))] [(kt-index-get? expr) (string-append - (kotlin-expr->string (kt-index-get-target expr)) + (kotlin-member-target->string (kt-index-get-target expr)) "[" (kotlin-expr->string (kt-index-get-index expr)) "]")] --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -385,6 +385,24 @@ (test-contains "mod lowers to Kotlin remainder operator" duration-kotlin "((safe / 100L) % 10L)") +(define conversion-target-form + '(typed-library (sample typed conversion-target) + (export safeFloat) + (type Int32) + (type Float32) + (def (safeFloat (value : Int32)) : Float32 + (float32 + (if (> value (int32 1)) + value + (int32 1)))))) + +(define conversion-target-kotlin + (typed-library-form->kotlin-string conversion-target-form)) + +(test-contains "member call on if target is parenthesized" + conversion-target-kotlin + "(if ((value > 1)) value else 1).toFloat()") + (define float32-math-form '(typed-library (sample typed floatmath) (export near)