Add typed Kotlin current time and JSON Long put

ober

4e842a4908d69ef7b0e797548bcb6d2600c3962c

diff --git a/lib/jerboa/typed/checker.ss b/lib/jerboa/typed/checker.ss
index 645a18d..c3777ad 100644
--- a/lib/jerboa/typed/checker.ss
+++ b/lib/jerboa/typed/checker.ss
@@ -554,6 +554,9 @@
       (cons 'json-object-put-string!
             (make-typed-call-sig (list 'JSONObject 'String 'String) 'Unit '()
               'jvm-json-object-put-string '()))
+      (cons 'json-object-put-int!
+            (make-typed-call-sig (list 'JSONObject 'String 'Int) 'Unit '()
+              'jvm-json-object-put-int '()))
       (cons 'json-object-put-int32!
             (make-typed-call-sig (list 'JSONObject 'String 'Int32) 'Unit '()
               'jvm-json-object-put-int32 '()))
@@ -596,6 +599,9 @@
       (cons 'system-current-time-millis-string
             (make-typed-call-sig '() 'String '()
               'jvm-system-current-time-millis-string '()))
+      (cons 'system-current-time-millis
+            (make-typed-call-sig '() 'Int '()
+              'jvm-system-current-time-millis '()))
       ;; crypto primitives — FFI to vetted RustCrypto crates, never reimplemented.
       ;; Each carries kind 'crypto-prim and an info `prim` the emitter dispatches
       ;; on; the Rust block they emit references the crate (sha2/hmac/hkdf) that
diff --git a/lib/jerboa/typed/core.ss b/lib/jerboa/typed/core.ss
index c7a4c8f..2d5e2be 100644
--- a/lib/jerboa/typed/core.ss
+++ b/lib/jerboa/typed/core.ss
@@ -162,6 +162,7 @@
       jvm-json-object-empty
       jvm-json-object-copy
       jvm-json-object-put-string
+      jvm-json-object-put-int
       jvm-json-object-put-int32
       jvm-json-object-put-bool
       jvm-json-object-put-float32
@@ -177,6 +178,7 @@
       jvm-json-object-opt-json-object
       jvm-string-compare-to
       jvm-string-substring-before
+      jvm-system-current-time-millis
       jvm-system-current-time-millis-string
       record-ctor
       record-pred
diff --git a/lib/jerboa/typed/kotlin/lower.ss b/lib/jerboa/typed/kotlin/lower.ss
index 0beaf3f..427fbd9 100644
--- a/lib/jerboa/typed/kotlin/lower.ss
+++ b/lib/jerboa/typed/kotlin/lower.ss
@@ -331,6 +331,8 @@
            (make-kt-call (make-kt-name '(java lang System currentTimeMillis)) '())
            'toString
            '())]
+        [(jvm-system-current-time-millis)
+         (make-kt-call (make-kt-name '(java lang System currentTimeMillis)) '())]
         [(jvm-float-array)
          (make-kt-call (kt-name1 'floatArrayOf) args)]
         [(jvm-float-array-ref)
@@ -487,6 +489,15 @@
                  'put
                  (list (cadr args) (caddr args)))))
            (make-kt-lit 'Unit '()))]
+        [(jvm-json-object-put-int)
+         (make-kt-block
+           (list
+             (make-kt-expr-stmt
+               (make-kt-member-call
+                 (car args)
+                 'put
+                 (list (cadr args) (caddr args)))))
+           (make-kt-lit 'Unit '()))]
         [(jvm-json-object-put-int32)
          (make-kt-block
            (list
diff --git a/tests/test-typed-kotlin.ss b/tests/test-typed-kotlin.ss
index 1999b16..b0283c6 100644
--- a/tests/test-typed-kotlin.ss
+++ b/tests/test-typed-kotlin.ss
@@ -361,6 +361,13 @@
        (def (timestamp) : String
          (system-current-time-millis-string))))
   "java.lang.System.currentTimeMillis().toString()")
+(test-contains "Current time millis lowers to JVM System call"
+  (typed-library-form->kotlin-string
+    '(typed-library (sample typed clock)
+       (export timestamp)
+       (def (timestamp) : Int
+         (system-current-time-millis))))
+  "return java.lang.System.currentTimeMillis()")
 
 (define race-form
   '(typed-library (sample typed race)
@@ -822,6 +829,7 @@
                (json-array-put-int32! mean (int32 0))
                (json-object-put-string! json "id" id)
                (json-object-put-float32! json "x" x)
+               (json-object-put-int! json "created_at" (system-current-time-millis))
                (json-object-put-int32! json "count" count)
                (json-object-put-bool! json "active" #t)
                (json-object-put-json-array! json "mean_bgr" mean)
@@ -860,6 +868,9 @@
 (test-contains "JSONObject put Float32 lowers through Double"
   json-object-kotlin
   "json.put(\"x\", x.toDouble())")
+(test-contains "JSONObject put Int lowers directly"
+  json-object-kotlin
+  "json.put(\"created_at\", java.lang.System.currentTimeMillis())")
 (test-contains "JSONObject put Int32 lowers directly"
   json-object-kotlin
   "json.put(\"count\", count)")