From 9b59f66c8d8115a67d6eee1e7a38aa39823db222 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Thu, 16 May 2019 23:17:07 -0400 Subject: Some type casting/coercion automation. --- documentation/research/database.md | 1 + .../luxc/lang/translation/jvm/procedure/host.lux | 144 ++++++++++----------- stdlib/source/lux/host.jvm.lux | 122 ++++++++--------- stdlib/source/lux/target/jvm/type.lux | 13 ++ .../tool/compiler/phase/extension/analysis/jvm.lux | 59 ++++----- 5 files changed, 169 insertions(+), 170 deletions(-) diff --git a/documentation/research/database.md b/documentation/research/database.md index 17a201ef5..4d3be85a6 100644 --- a/documentation/research/database.md +++ b/documentation/research/database.md @@ -168,6 +168,7 @@ 1. https://www.slideshare.net/RoiLipman/graph-algebra 1. https://juxt.pro/crux/docs/index.html 1. https://github.com/juxt/crux +1. [The Crux of Bitemporality - Jon Pither](https://www.youtube.com/watch?v=3Stja6YUB94) ## Column diff --git a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux index be2a0bace..e1e6b3c47 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux @@ -181,7 +181,7 @@ [double::% _.DREM] ) -(def: boolean-class (jvm.class "java.lang.Boolean" (list))) +(def: boolean-class (jvm.class jvm.boolean-box (list))) (def: falseI (_.GETSTATIC "java.lang.Boolean" "FALSE" boolean-class)) (def: trueI (_.GETSTATIC "java.lang.Boolean" "TRUE" boolean-class)) @@ -234,7 +234,7 @@ (def: int Bundle - (<| (bundle.prefix "int") + (<| (bundle.prefix jvm.int-reflection) (|> (: Bundle bundle.empty) (bundle.install "+" (binary int::+)) (bundle.install "-" (binary int::-)) @@ -253,7 +253,7 @@ (def: long Bundle - (<| (bundle.prefix "long") + (<| (bundle.prefix jvm.long-reflection) (|> (: Bundle bundle.empty) (bundle.install "+" (binary long::+)) (bundle.install "-" (binary long::-)) @@ -272,7 +272,7 @@ (def: float Bundle - (<| (bundle.prefix "float") + (<| (bundle.prefix jvm.float-reflection) (|> (: Bundle bundle.empty) (bundle.install "+" (binary float::+)) (bundle.install "-" (binary float::-)) @@ -285,7 +285,7 @@ (def: double Bundle - (<| (bundle.prefix "double") + (<| (bundle.prefix jvm.double-reflection) (|> (: Bundle bundle.empty) (bundle.install "+" (binary double::+)) (bundle.install "-" (binary double::-)) @@ -298,7 +298,7 @@ (def: char Bundle - (<| (bundle.prefix "char") + (<| (bundle.prefix jvm.char-reflection) (|> (: Bundle bundle.empty) (bundle.install "=" (binary char::=)) (bundle.install "<" (binary char::<)) @@ -308,14 +308,14 @@ (-> Nat Text Type) (jvm.array nesting (case elem-class - "boolean" jvm.boolean - "byte" jvm.byte - "short" jvm.short - "int" jvm.int - "long" jvm.long - "float" jvm.float - "double" jvm.double - "char" jvm.char + (^ (static jvm.boolean-reflection)) jvm.boolean + (^ (static jvm.byte-reflection)) jvm.byte + (^ (static jvm.short-reflection)) jvm.short + (^ (static jvm.int-reflection)) jvm.int + (^ (static jvm.long-reflection)) jvm.long + (^ (static jvm.float-reflection)) jvm.float + (^ (static jvm.double-reflection)) jvm.double + (^ (static jvm.char-reflection)) jvm.char _ (jvm.class elem-class (list))))) (def: (primitive-array-length-handler jvm-primitive) @@ -451,47 +451,47 @@ (|> bundle.empty (dictionary.merge (<| (bundle.prefix "length") (|> bundle.empty - (bundle.install "boolean" (primitive-array-length-handler jvm.boolean)) - (bundle.install "byte" (primitive-array-length-handler jvm.byte)) - (bundle.install "short" (primitive-array-length-handler jvm.short)) - (bundle.install "int" (primitive-array-length-handler jvm.int)) - (bundle.install "long" (primitive-array-length-handler jvm.long)) - (bundle.install "float" (primitive-array-length-handler jvm.float)) - (bundle.install "double" (primitive-array-length-handler jvm.double)) - (bundle.install "char" (primitive-array-length-handler jvm.char)) + (bundle.install jvm.boolean-reflection (primitive-array-length-handler jvm.boolean)) + (bundle.install jvm.byte-reflection (primitive-array-length-handler jvm.byte)) + (bundle.install jvm.short-reflection (primitive-array-length-handler jvm.short)) + (bundle.install jvm.int-reflection (primitive-array-length-handler jvm.int)) + (bundle.install jvm.long-reflection (primitive-array-length-handler jvm.long)) + (bundle.install jvm.float-reflection (primitive-array-length-handler jvm.float)) + (bundle.install jvm.double-reflection (primitive-array-length-handler jvm.double)) + (bundle.install jvm.char-reflection (primitive-array-length-handler jvm.char)) (bundle.install "object" array::length::object)))) (dictionary.merge (<| (bundle.prefix "new") (|> bundle.empty - (bundle.install "boolean" (new-primitive-array-handler jvm.boolean)) - (bundle.install "byte" (new-primitive-array-handler jvm.byte)) - (bundle.install "short" (new-primitive-array-handler jvm.short)) - (bundle.install "int" (new-primitive-array-handler jvm.int)) - (bundle.install "long" (new-primitive-array-handler jvm.long)) - (bundle.install "float" (new-primitive-array-handler jvm.float)) - (bundle.install "double" (new-primitive-array-handler jvm.double)) - (bundle.install "char" (new-primitive-array-handler jvm.char)) + (bundle.install jvm.boolean-reflection (new-primitive-array-handler jvm.boolean)) + (bundle.install jvm.byte-reflection (new-primitive-array-handler jvm.byte)) + (bundle.install jvm.short-reflection (new-primitive-array-handler jvm.short)) + (bundle.install jvm.int-reflection (new-primitive-array-handler jvm.int)) + (bundle.install jvm.long-reflection (new-primitive-array-handler jvm.long)) + (bundle.install jvm.float-reflection (new-primitive-array-handler jvm.float)) + (bundle.install jvm.double-reflection (new-primitive-array-handler jvm.double)) + (bundle.install jvm.char-reflection (new-primitive-array-handler jvm.char)) (bundle.install "object" array::new::object)))) (dictionary.merge (<| (bundle.prefix "read") (|> bundle.empty - (bundle.install "boolean" (read-primitive-array-handler jvm.boolean _.BALOAD)) - (bundle.install "byte" (read-primitive-array-handler jvm.byte _.BALOAD)) - (bundle.install "short" (read-primitive-array-handler jvm.short _.SALOAD)) - (bundle.install "int" (read-primitive-array-handler jvm.int _.IALOAD)) - (bundle.install "long" (read-primitive-array-handler jvm.long _.LALOAD)) - (bundle.install "float" (read-primitive-array-handler jvm.float _.FALOAD)) - (bundle.install "double" (read-primitive-array-handler jvm.double _.DALOAD)) - (bundle.install "char" (read-primitive-array-handler jvm.char _.CALOAD)) + (bundle.install jvm.boolean-reflection (read-primitive-array-handler jvm.boolean _.BALOAD)) + (bundle.install jvm.byte-reflection (read-primitive-array-handler jvm.byte _.BALOAD)) + (bundle.install jvm.short-reflection (read-primitive-array-handler jvm.short _.SALOAD)) + (bundle.install jvm.int-reflection (read-primitive-array-handler jvm.int _.IALOAD)) + (bundle.install jvm.long-reflection (read-primitive-array-handler jvm.long _.LALOAD)) + (bundle.install jvm.float-reflection (read-primitive-array-handler jvm.float _.FALOAD)) + (bundle.install jvm.double-reflection (read-primitive-array-handler jvm.double _.DALOAD)) + (bundle.install jvm.char-reflection (read-primitive-array-handler jvm.char _.CALOAD)) (bundle.install "object" array::read::object)))) (dictionary.merge (<| (bundle.prefix "write") (|> bundle.empty - (bundle.install "boolean" (write-primitive-array-handler jvm.boolean _.BASTORE)) - (bundle.install "byte" (write-primitive-array-handler jvm.byte _.BASTORE)) - (bundle.install "short" (write-primitive-array-handler jvm.short _.SASTORE)) - (bundle.install "int" (write-primitive-array-handler jvm.int _.IASTORE)) - (bundle.install "long" (write-primitive-array-handler jvm.long _.LASTORE)) - (bundle.install "float" (write-primitive-array-handler jvm.float _.FASTORE)) - (bundle.install "double" (write-primitive-array-handler jvm.double _.DASTORE)) - (bundle.install "char" (write-primitive-array-handler jvm.char _.CASTORE)) + (bundle.install jvm.boolean-reflection (write-primitive-array-handler jvm.boolean _.BASTORE)) + (bundle.install jvm.byte-reflection (write-primitive-array-handler jvm.byte _.BASTORE)) + (bundle.install jvm.short-reflection (write-primitive-array-handler jvm.short _.SASTORE)) + (bundle.install jvm.int-reflection (write-primitive-array-handler jvm.int _.IASTORE)) + (bundle.install jvm.long-reflection (write-primitive-array-handler jvm.long _.LASTORE)) + (bundle.install jvm.float-reflection (write-primitive-array-handler jvm.float _.FASTORE)) + (bundle.install jvm.double-reflection (write-primitive-array-handler jvm.double _.DASTORE)) + (bundle.install jvm.char-reflection (write-primitive-array-handler jvm.char _.CASTORE)) (bundle.install "object" array::write::object)))) ))) @@ -563,19 +563,19 @@ (case [from to] ## Wrap (^template [ ] - [ ] + (^ [(static ) (static )]) (wrap (|>> valueI (_.wrap ))) - [ ] + (^ [(static ) (static )]) (wrap (|>> valueI (_.unwrap )))) - (["boolean" "java.lang.Boolean" #jvm.Boolean] - ["byte" "java.lang.Byte" #jvm.Byte] - ["short" "java.lang.Short" #jvm.Short] - ["int" "java.lang.Integer" #jvm.Int] - ["long" "java.lang.Long" #jvm.Long] - ["float" "java.lang.Float" #jvm.Float] - ["double" "java.lang.Double" #jvm.Double] - ["char" "java.lang.Character" #jvm.Char]) + ([jvm.boolean-reflection jvm.boolean-box #jvm.Boolean] + [jvm.byte-reflection jvm.byte-box #jvm.Byte] + [jvm.short-reflection jvm.short-box #jvm.Short] + [jvm.int-reflection jvm.int-box #jvm.Int] + [jvm.long-reflection jvm.long-box #jvm.Long] + [jvm.float-reflection jvm.float-box #jvm.Float] + [jvm.double-reflection jvm.double-box #jvm.Double] + [jvm.char-reflection jvm.char-box #jvm.Char]) _ (wrap valueI))) @@ -598,14 +598,14 @@ (def: primitives (Dictionary Text Primitive) - (|> (list ["boolean" #jvm.Boolean] - ["byte" #jvm.Byte] - ["short" #jvm.Short] - ["int" #jvm.Int] - ["long" #jvm.Long] - ["float" #jvm.Float] - ["double" #jvm.Double] - ["char" #jvm.Char]) + (|> (list [jvm.boolean-reflection #jvm.Boolean] + [jvm.byte-reflection #jvm.Byte] + [jvm.short-reflection #jvm.Short] + [jvm.int-reflection #jvm.Int] + [jvm.long-reflection #jvm.Long] + [jvm.float-reflection #jvm.Float] + [jvm.double-reflection #jvm.Double] + [jvm.char-reflection #jvm.Char]) (dictionary.from-list text.hash))) (def: (static::get extension-name generate inputs) @@ -841,14 +841,14 @@ (def: primitive (.Parser Primitive) ($_ <>.or - (.constant! ["" "boolean"]) - (.constant! ["" "byte"]) - (.constant! ["" "short"]) - (.constant! ["" "int"]) - (.constant! ["" "long"]) - (.constant! ["" "float"]) - (.constant! ["" "double"]) - (.constant! ["" "char"]) + (.constant! ["" jvm.boolean-reflection]) + (.constant! ["" jvm.byte-reflection]) + (.constant! ["" jvm.short-reflection]) + (.constant! ["" jvm.int-reflection]) + (.constant! ["" jvm.long-reflection]) + (.constant! ["" jvm.float-reflection]) + (.constant! ["" jvm.double-reflection]) + (.constant! ["" jvm.char-reflection]) )) (def: jvm-type diff --git a/stdlib/source/lux/host.jvm.lux b/stdlib/source/lux/host.jvm.lux index 495d8a7ce..c8d413421 100644 --- a/stdlib/source/lux/host.jvm.lux +++ b/stdlib/source/lux/host.jvm.lux @@ -22,8 +22,9 @@ ["." list ("#@." monad fold monoid)] ["." dictionary (#+ Dictionary)]]] ["." macro (#+ with-gensyms) + [syntax (#+ syntax:)] ["." code] - [syntax (#+ syntax:)]] + ["." template]] [target ["." jvm #_ ["#" type (#+ Primitive Var Bound Class Generic Type Argument Return Typed)]]]]) @@ -1490,80 +1491,64 @@ (-> Var Code) code.local-identifier) -(template [ - - - - ] +(template [ ] [(def: ( mode [unboxed raw]) (-> Primitive-Mode [Text Code] Code) - (let [[unboxed refined] (case mode - #ManualPrM - [unboxed raw] - - #AutoPrM - (case unboxed - (^ (static jvm.byte-descriptor)) - [ (` ( (~ raw)))] - - (^ (static jvm.short-descriptor)) - [ (` ( (~ raw)))] - - (^ (static jvm.int-descriptor)) - [ (` ( (~ raw)))] - - (^ (static jvm.float-descriptor)) - [ (` ( (~ raw)))] - - _ - [unboxed raw]))] - (case (dictionary.get unboxed boxes) - (#.Some boxed) - ( unboxed boxed refined) - - #.None - refined)))] - - [auto-convert-input ..unbox - jvm.byte-descriptor ..long-to-byte - jvm.short-descriptor ..long-to-short - jvm.int-descriptor ..long-to-int - jvm.float-descriptor ..double-to-float] - [auto-convert-output ..box - jvm.long-descriptor "jvm conversion byte-to-long" - jvm.long-descriptor "jvm conversion short-to-long" - jvm.long-descriptor "jvm conversion int-to-long" - jvm.double-descriptor "jvm conversion float-to-double"] + (let [[unboxed refined post] (: [Text Code (List Code)] + (case mode + #ManualPrM + [unboxed raw (list)] + + #AutoPrM + (`` (case unboxed + (^template [
 ]
+                                               (^ (static ))
+                                               (with-expansions [' (template.splice )]
+                                                 [
+                                                  (` (.|> (~ raw) (~+ 
)))
+                                                  (list ')]))
+                                             ((~~ (template.splice )))
+                                             
+                                             _
+                                             [unboxed
+                                              (if 
+                                                (` ("jvm object cast" (~ raw)))
+                                                raw)
+                                              (list)]))))
+           unboxed/boxed (case (dictionary.get unboxed boxes)
+                           (#.Some boxed)
+                           ( unboxed boxed refined)
+                           
+                           #.None
+                           refined)
+           post-processed (case post
+                            #.Nil
+                            unboxed/boxed
+
+                            _
+                            (` (.|> (~ unboxed/boxed) (~+ post))))]
+       post-processed))]
+
+  [#1 auto-convert-input ..unbox
+   [[jvm.byte-descriptor jvm.byte-descriptor (list (` (.: .Int)) (` (.:coerce (.primitive "java.lang.Long"))) (` ..long-to-byte)) []]
+    [jvm.short-descriptor jvm.short-descriptor (list (` (.: .Int)) (` (.:coerce (.primitive "java.lang.Long"))) (` ..long-to-short)) []]
+    [jvm.int-descriptor jvm.int-descriptor (list (` (.: .Int)) (` (.:coerce (.primitive "java.lang.Long"))) (` ..long-to-int)) []]
+    [jvm.long-descriptor jvm.long-descriptor (list (` (.: .Int)) (` (.:coerce (.primitive "java.lang.Long")))) []]
+    [jvm.float-descriptor jvm.float-descriptor (list (` (.: .Frac)) (` (.:coerce (.primitive "java.lang.Double"))) (` ..double-to-float)) []]
+    [jvm.double-descriptor jvm.double-descriptor (list (` (.: .Frac)) (` (.:coerce (.primitive "java.lang.Double")))) []]]]
+  [#0 auto-convert-output ..box
+   [[jvm.byte-descriptor jvm.long-descriptor (list (` "jvm conversion byte-to-long")) [(` (.: (.primitive "java.lang.Long"))) (` (.:coerce .Int))]]
+    [jvm.short-descriptor jvm.long-descriptor (list (` "jvm conversion short-to-long")) [(` (.: (.primitive "java.lang.Long"))) (` (.:coerce .Int))]]
+    [jvm.int-descriptor jvm.long-descriptor (list (` "jvm conversion int-to-long")) [(` (.: (.primitive "java.lang.Long"))) (` (.:coerce .Int))]]
+    [jvm.long-descriptor jvm.long-descriptor (list) [(` (.: (.primitive "java.lang.Long"))) (` (.:coerce .Int))]]
+    [jvm.float-descriptor jvm.double-descriptor (list (` "jvm conversion float-to-double")) [(` (.: (.primitive "java.lang.Double"))) (` (.:coerce .Frac))]]
+    [jvm.double-descriptor jvm.double-descriptor (list) [(` (.: (.primitive "java.lang.Double"))) (` (.:coerce .Frac))]]]]
   )
 
 (def: (un-quote quoted)
   (-> Code Code)
   (` ((~' ~) (~ quoted))))
 
-(def: (jvm-input [unboxed raw])
-  (-> [Text Code] [Text Code])
-  [unboxed (case unboxed
-             (^ (static jvm.byte-descriptor))
-             (` (.:coerce (.primitive "java.lang.Long") (.: .Int (~ raw))))
-             
-             (^ (static jvm.short-descriptor))
-             (` (.:coerce (.primitive "java.lang.Long") (.: .Int (~ raw))))
-             
-             (^ (static jvm.int-descriptor))
-             (` (.:coerce (.primitive "java.lang.Long") (.: .Int (~ raw))))
-             
-             (^ (static jvm.long-descriptor))
-             (` (.:coerce (.primitive "java.lang.Long") (.: .Int (~ raw))))
-             
-             (^ (static jvm.float-descriptor))
-             (` (.:coerce (.primitive "java.lang.Double") (.: .Frac (~ raw))))
-             
-             (^ (static jvm.double-descriptor))
-             (` (.:coerce (.primitive "java.lang.Double") (.: .Frac (~ raw))))
-             
-             _
-             (` ("jvm object cast" (~ raw))))])
-
 (def: (jvm-invoke-inputs mode classes inputs)
   (-> Primitive-Mode (List Text) (List [Bit Code]) (List Code))
   (|> inputs
@@ -1572,7 +1557,7 @@
                     (` ((~! !!!) (~ (un-quote input))))
                     (un-quote input))))
       (list.zip2 classes)
-      (list@map (|>> jvm-input (auto-convert-input mode)))))
+      (list@map (auto-convert-input mode))))
 
 (def: (with-class-type class expression)
   (-> Text Code Code)
@@ -1695,7 +1680,6 @@
                                                    (` ((~ setter-name) (~ g!value)))
                                                    (` ((~ setter-name) (~ g!value) (~ g!obj))))
                                      setter-value (|> [(jvm.signature import-field-type) (un-quote g!value)]
-                                                      ..jvm-input
                                                       (auto-convert-input import-field-mode))
                                      setter-value (if import-field-maybe?
                                                     (` ((~! !!!) (~ setter-value)))
diff --git a/stdlib/source/lux/target/jvm/type.lux b/stdlib/source/lux/target/jvm/type.lux
index d8851d978..6e3269df5 100644
--- a/stdlib/source/lux/target/jvm/type.lux
+++ b/stdlib/source/lux/target/jvm/type.lux
@@ -39,6 +39,19 @@
   [char-reflection "char"]
   )
 
+(template [ ]
+  [(def: #export  )]
+
+  [boolean-box "java.lang.Boolean"]
+  [byte-box    "java.lang.Byte"]
+  [short-box   "java.lang.Short"]
+  [int-box     "java.lang.Integer"]
+  [long-box    "java.lang.Long"]
+  [float-box   "java.lang.Float"]
+  [double-box  "java.lang.Double"]
+  [char-box    "java.lang.Character"]
+  )
+
 (def: #export array-prefix "[")
 (def: object-prefix "L")
 (def: var-prefix "T")
diff --git a/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux b/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux
index 947bbc69f..358c666c7 100644
--- a/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux
+++ b/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux
@@ -60,14 +60,14 @@
   [(def: #export  .Type (#.Primitive  #.Nil))]
 
   ## Boxes
-  [Boolean   "java.lang.Boolean"]
-  [Byte      "java.lang.Byte"]
-  [Short     "java.lang.Short"]
-  [Integer   "java.lang.Integer"]
-  [Long      "java.lang.Long"]
-  [Float     "java.lang.Float"]
-  [Double    "java.lang.Double"]
-  [Character "java.lang.Character"]
+  [Boolean   jvm.boolean-box]
+  [Byte      jvm.byte-box]
+  [Short     jvm.short-box]
+  [Integer   jvm.int-box]
+  [Long      jvm.long-box]
+  [Float     jvm.float-box]
+  [Double    jvm.double-box]
+  [Character jvm.char-box]
   [String    "java.lang.String"]
 
   ## Primitives
@@ -354,14 +354,14 @@
 
 (def: #export boxes
   (Dictionary Text Text)
-  (|> (list [jvm.boolean-reflection "java.lang.Boolean"]
-            [jvm.byte-reflection    "java.lang.Byte"]
-            [jvm.short-reflection   "java.lang.Short"]
-            [jvm.int-reflection     "java.lang.Integer"]
-            [jvm.long-reflection    "java.lang.Long"]
-            [jvm.float-reflection   "java.lang.Float"]
-            [jvm.double-reflection  "java.lang.Double"]
-            [jvm.char-reflection    "java.lang.Character"])
+  (|> (list [jvm.boolean-reflection jvm.boolean-box]
+            [jvm.byte-reflection    jvm.byte-box]
+            [jvm.short-reflection   jvm.short-box]
+            [jvm.int-reflection     jvm.int-box]
+            [jvm.long-reflection    jvm.long-box]
+            [jvm.float-reflection   jvm.float-box]
+            [jvm.double-reflection  jvm.double-box]
+            [jvm.char-reflection    jvm.char-box])
       (dictionary.from-list text.hash)))
 
 (def: (array-type-info allow-primitives? arrayT)
@@ -518,10 +518,10 @@
       (check-jvm outputT)
 
       #.None
-      (/////analysis.throw non-object objectT))
+      (/////analysis.throw ..non-object objectT))
 
     _
-    (/////analysis.throw non-object objectT)))
+    (/////analysis.throw ..non-object objectT)))
 
 (def: (check-object objectT)
   (-> .Type (Operation Text))
@@ -1032,17 +1032,18 @@
          can-cast? (: (Operation Bit)
                       (case [from-name to-name]
                         (^template [ ]
-                          (^or (^ [(static ) ])
-                               (^ [ (static )]))
+                          (^or (^ [(static ) (static )])
+                               (^ [(static ) (static )])
+                               (^ [(static ) (static )]))
                           (wrap #1))
-                        ([jvm.boolean-reflection "java.lang.Boolean"]
-                         [jvm.byte-reflection    "java.lang.Byte"]
-                         [jvm.short-reflection   "java.lang.Short"]
-                         [jvm.int-reflection     "java.lang.Integer"]
-                         [jvm.long-reflection    "java.lang.Long"]
-                         [jvm.float-reflection   "java.lang.Float"]
-                         [jvm.double-reflection  "java.lang.Double"]
-                         [jvm.char-reflection    "java.lang.Character"])
+                        ([jvm.boolean-reflection jvm.boolean-box]
+                         [jvm.byte-reflection    jvm.byte-box]
+                         [jvm.short-reflection   jvm.short-box]
+                         [jvm.int-reflection     jvm.int-box]
+                         [jvm.long-reflection    jvm.long-box]
+                         [jvm.float-reflection   jvm.float-box]
+                         [jvm.double-reflection  jvm.double-box]
+                         [jvm.char-reflection    jvm.char-box])
 
                         _
                         (do @
@@ -1188,7 +1189,7 @@
                                   (dictionary.from-list text.hash))))
 
                       _
-                      (/////analysis.throw non-object objectT)))
+                      (/////analysis.throw ..non-object objectT)))
          fieldT (java-type-to-lux-type mapping fieldJT)]
         (wrap [fieldT (Modifier::isFinal modifiers)]))
       (/////analysis.throw not-a-virtual-field [class-name field-name]))))
-- 
cgit v1.2.3