Add typed Kotlin current time and JSON Long put
ober
4e842a4908d69ef7b0e797548bcb6d2600c3962c
--- 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 --- 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 --- 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 --- 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)")