diff options
Diffstat (limited to 'stdlib/source/lux/host.jvm.lux')
-rw-r--r-- | stdlib/source/lux/host.jvm.lux | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/stdlib/source/lux/host.jvm.lux b/stdlib/source/lux/host.jvm.lux index 362eed4e5..88ffc16f6 100644 --- a/stdlib/source/lux/host.jvm.lux +++ b/stdlib/source/lux/host.jvm.lux @@ -1358,10 +1358,10 @@ (#.Some value-as-string) #.None))} (with-gensyms [g!_ g!unchecked] - (let [class-name (jvm.signature class) + (let [class-name (reflection.class class) class-type (` (.primitive (~ (code.text class-name)))) check-type (` (.Maybe (~ class-type))) - check-code (` (if ((~ (code.text (format "jvm instanceof" ":" class-name))) (~ g!unchecked)) + check-code (` (if ("jvm object instance?" (~ (code.text class-name)) (~ g!unchecked)) (#.Some (.:coerce (~ class-type) (~ g!unchecked))) #.None))] @@ -1492,10 +1492,20 @@ (-> Var Code) code.local-identifier) -(def: string-class "java.lang.String") - -(def: string-descriptor - (jvm.signature (jvm.class ..string-class (list)))) +(template [<jvm> <class> <descriptor>] + [(def: <class> <jvm>) + (def: <descriptor> (jvm.signature (jvm.class <jvm> (list))))] + + ["java.lang.String" string-class string-descriptor] + [box.boolean boolean-box-class boolean-box-descriptor] + [box.byte byte-box-class byte-box-descriptor] + [box.short short-box-class short-box-descriptor] + [box.int int-box-class int-box-descriptor] + [box.long long-box-class long-box-descriptor] + [box.float float-box-class float-box-descriptor] + [box.double double-box-class double-box-descriptor] + [box.char char-box-class char-box-descriptor] + ) (template [<input?> <name> <unbox/box> <special+>] [(def: (<name> mode [unboxed raw]) @@ -1542,7 +1552,10 @@ [jvm.long-descriptor jvm.long-descriptor (list (` (.: .Int)) (` (.:coerce (.primitive (~ (code.text box.long)))))) []] [jvm.float-descriptor jvm.float-descriptor (list (` (.: .Frac)) (` (.:coerce (.primitive (~ (code.text box.double))))) (` ..double-to-float)) []] [jvm.double-descriptor jvm.double-descriptor (list (` (.: .Frac)) (` (.:coerce (.primitive (~ (code.text box.double)))))) []] - [..string-descriptor ..string-descriptor (list (` (.: .Text)) (` (.:coerce (.primitive (~ (code.text ..string-class)))))) []]]] + [..string-descriptor ..string-descriptor (list (` (.: .Text)) (` (.:coerce (.primitive (~ (code.text ..string-class)))))) []] + [..boolean-box-descriptor ..boolean-box-descriptor (list (` (.: .Bit)) (` (.:coerce (.primitive (~ (code.text ..boolean-box-class)))))) []] + [..long-box-descriptor ..long-box-descriptor (list (` (.: .Int)) (` (.:coerce (.primitive (~ (code.text ..long-box-class)))))) []] + [..double-box-descriptor ..double-box-descriptor (list (` (.: .Frac)) (` (.:coerce (.primitive (~ (code.text ..double-box-class)))))) []]]] [#0 auto-convert-output ..box [[jvm.boolean-descriptor jvm.boolean-descriptor (list) [(` (.: (.primitive (~ (code.text box.boolean))))) (` (.:coerce .Bit))]] [jvm.byte-descriptor jvm.long-descriptor (list (` "jvm conversion byte-to-long")) [(` (.: (.primitive (~ (code.text box.long))))) (` (.:coerce .Int))]] @@ -1551,7 +1564,10 @@ [jvm.long-descriptor jvm.long-descriptor (list) [(` (.: (.primitive (~ (code.text box.long))))) (` (.:coerce .Int))]] [jvm.float-descriptor jvm.double-descriptor (list (` "jvm conversion float-to-double")) [(` (.: (.primitive (~ (code.text box.double))))) (` (.:coerce .Frac))]] [jvm.double-descriptor jvm.double-descriptor (list) [(` (.: (.primitive (~ (code.text box.double))))) (` (.:coerce .Frac))]] - [..string-descriptor ..string-descriptor (list) [(` (.: (.primitive (~ (code.text ..string-class))))) (` (.:coerce .Text))]]]] + [..string-descriptor ..string-descriptor (list) [(` (.: (.primitive (~ (code.text ..string-class))))) (` (.:coerce .Text))]] + [..boolean-box-descriptor ..boolean-box-descriptor (list) [(` (.: (.primitive (~ (code.text ..boolean-box-class))))) (` (.:coerce .Bit))]] + [..long-box-descriptor ..long-box-descriptor (list) [(` (.: (.primitive (~ (code.text ..long-box-class))))) (` (.:coerce .Int))]] + [..double-box-descriptor ..double-box-descriptor (list) [(` (.: (.primitive (~ (code.text ..double-box-class))))) (` (.:coerce .Frac))]]]] ) (def: (un-quote quoted) @@ -1958,7 +1974,7 @@ {type (..type^ imports (list))}) {#.doc (doc "Loads the class as a java.lang.Class object." (class-for java/lang/String))} - (wrap (list (` ("jvm object class" (~ (code.text (jvm.signature type)))))))) + (wrap (list (` ("jvm object class" (~ (code.text (reflection.class type)))))))) (def: get-compiler (Meta Lux) |