Parenthesize complex Kotlin member targets

ober

d224eee40fd188015e2425bef919e4b04c6ab6cf

diff --git a/lib/jerboa/typed/kotlin/print.ss b/lib/jerboa/typed/kotlin/print.ss
index 9dbab51..45342ae 100644
--- 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))
          "]")]
diff --git a/tests/test-typed-kotlin.ss b/tests/test-typed-kotlin.ss
index 287a645..da8dc71 100644
--- 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)