Add typed Kotlin FloatArray length helper
ober
c9a0d13eb7cfdff266aaaec6a253c643d016a77b
--- a/lib/jerboa/typed/checker.ss +++ b/lib/jerboa/typed/checker.ss @@ -397,6 +397,9 @@ (cons 'float-array-ref (make-typed-call-sig (list 'FloatArray 'Int32) 'Float32 '() 'jvm-float-array-ref '())) + (cons 'float-array-length + (make-typed-call-sig (list 'FloatArray) 'Int32 '() + 'jvm-float-array-length '())) (cons 'int32->string (make-typed-call-sig (list 'Int32) 'String '() 'jvm-to-string '())) --- a/lib/jerboa/typed/kotlin/lower.ss +++ b/lib/jerboa/typed/kotlin/lower.ss @@ -264,6 +264,8 @@ (make-kt-call (kt-name1 'floatArrayOf) args)] [(jvm-float-array-ref) (make-kt-index-get (car args) (cadr args))] + [(jvm-float-array-length) + (make-kt-member-get (car args) 'size)] [(bytevector-length) (make-kt-member-call (make-kt-member-get (car args) 'size) --- a/tests/test-typed-kotlin.ss +++ b/tests/test-typed-kotlin.ss @@ -173,7 +173,7 @@ (define geometry-form '(typed-library (sample typed geometry) (export make-SsdCell SsdCell? SsdCell-x SsdCell-y SsdCell-w SsdCell-h - ssd-cell-cx ssd-cell-rect rect-overlap-area) + ssd-cell-cx ssd-cell-rect rect-overlap-area rect-complete?) (type Float32) (type FloatArray) (type Int32) @@ -210,7 +210,9 @@ (float-array-ref b (int32 3))))) (if (or (<= right left) (<= bottom top)) (float32 0.0) - (* (- right left) (- bottom top))))))) + (* (- right left) (- bottom top))))) + (def (rect-complete? (rect : FloatArray)) : Bool + (>= (float-array-length rect) (int32 4))))) (define geometry-kotlin (typed-library-form->kotlin-string geometry-form)) @@ -220,6 +222,8 @@ "return floatArrayOf(cell.x, cell.y, (cell.x + cell.w), (cell.y + cell.h))") (test-contains "FloatArray indexing lowers to brackets" geometry-kotlin "val left: Float = if ((a[0] > b[0])) a[0] else b[0]") +(test-contains "FloatArray length lowers to Kotlin size" geometry-kotlin + "rect.size") (define key-form '(typed-library (sample typed keys)