diff options
author | Eduardo Julian | 2021-11-08 03:21:42 -0400 |
---|---|---|
committer | Eduardo Julian | 2021-11-08 03:21:42 -0400 |
commit | 651c7afff45f7f6c6b16d873d699ef0f7c890246 (patch) | |
tree | 3c7fd419c58ab0aa276c017614c2b9fbf305b62e /lux-jvm | |
parent | df6cf0d3c980e3d7240eec6cb38d86af61037725 (diff) |
Used new Function interface to fix directives bug in JVM compiler.
Diffstat (limited to '')
-rw-r--r-- | lux-jvm-function/dependency.jar | bin | 951 -> 951 bytes | |||
-rw-r--r-- | lux-jvm/project.clj | 2 | ||||
-rw-r--r-- | lux-jvm/source/program.lux | 188 |
3 files changed, 97 insertions, 93 deletions
diff --git a/lux-jvm-function/dependency.jar b/lux-jvm-function/dependency.jar Binary files differindex 500384906..3a8d5a4cd 100644 --- a/lux-jvm-function/dependency.jar +++ b/lux-jvm-function/dependency.jar diff --git a/lux-jvm/project.clj b/lux-jvm/project.clj index 5d9ae53d2..decc82785 100644 --- a/lux-jvm/project.clj +++ b/lux-jvm/project.clj @@ -21,8 +21,8 @@ :dependencies [[com.github.luxlang/lux-bootstrapper ~version] [com.github.luxlang/lux-jvm-function ~version] - ;; [com.github.luxlang/stdlib ~version] + ;; JVM Bytecode (TODO: Remove ASAP) [org.ow2.asm/asm "7.3.1"] [org.ow2.asm/asm-commons "7.3.1"] diff --git a/lux-jvm/source/program.lux b/lux-jvm/source/program.lux index b4710d116..61593c215 100644 --- a/lux-jvm/source/program.lux +++ b/lux-jvm/source/program.lux @@ -127,104 +127,108 @@ (ffi.write! 1 (:as java/lang/Object lux))) apply_method)))) -(def: how_to_wrap_a_phase - Synthesis - (let [java/lang/String (jvm/type.class "java.lang.String" (list)) - <java/lang/Class> (jvm/type.array (jvm/type.class "java.lang.Class" (list))) - java/lang/Object (jvm/type.class "java.lang.Object" (list)) - <java/lang/Object> (jvm/type.array java/lang/Object) +... DEPRECATED +... (def: how_to_wrap_a_phase +... Synthesis +... (let [java/lang/String (jvm/type.class "java.lang.String" (list)) +... <java/lang/Class> (jvm/type.array (jvm/type.class "java.lang.Class" (list))) +... java/lang/Object (jvm/type.class "java.lang.Object" (list)) +... <java/lang/Object> (jvm/type.array java/lang/Object) - jvm_type (: (All (_ c) (-> (jvm/type.Type c) Synthesis)) - (|>> jvm/type.format - $.text)) - class_type (: (-> Text Synthesis) - (function (_ name) - (|> (jvm/type.class name (list)) - jvm_type))) - unwrap_long (: (-> Synthesis Synthesis) - (|>> (list ($.text jvm/type/box.long) - ($.text "long")) - {$.#Extension "jvm object cast"})) - long_to_int (: (-> Synthesis Synthesis) - (|>> (list) - {$.#Extension "jvm conversion long-to-int"})) - literal_nat (: (-> Nat Synthesis) - (|>> .i64 $.i64 unwrap_long long_to_int)) - write! (: (-> Text Nat Synthesis Synthesis Synthesis) - (function (_ element_class index value array) - {$.#Extension "jvm array write object" - (list (jvm_type (jvm/type.array (jvm/type.class element_class (list)))) - (literal_nat index) - value - array)})) - object_array (: (-> Text Nat Synthesis) - (function (_ class_name size) - {$.#Extension "jvm array new object" - (list (class_type class_name) - (literal_nat size))})) - class_of (: (-> Synthesis Synthesis) - (function (_ object) - {$.#Extension "jvm member invoke virtual" - (list& (class_type "java.lang.Object") - ($.text "getClass") - (class_type "java.lang.Class") - object - (list))})) - input (: (All (_ c) (-> (jvm/type.Type c) Synthesis Synthesis)) - (function (_ value_type value) - ($.tuple (list (jvm_type value_type) value)))) +... jvm_type (: (All (_ c) (-> (jvm/type.Type c) Synthesis)) +... (|>> jvm/type.format +... $.text)) +... class_type (: (-> Text Synthesis) +... (function (_ name) +... (|> (jvm/type.class name (list)) +... jvm_type))) +... unwrap_long (: (-> Synthesis Synthesis) +... (|>> (list ($.text jvm/type/box.long) +... ($.text "long")) +... {$.#Extension "jvm object cast"})) +... long_to_int (: (-> Synthesis Synthesis) +... (|>> (list) +... {$.#Extension "jvm conversion long-to-int"})) +... literal_nat (: (-> Nat Synthesis) +... (|>> .i64 $.i64 unwrap_long long_to_int)) +... write! (: (-> Text Nat Synthesis Synthesis Synthesis) +... (function (_ element_class index value array) +... {$.#Extension "jvm array write object" +... (list (jvm_type (jvm/type.array (jvm/type.class element_class (list)))) +... (literal_nat index) +... value +... array)})) +... object_array (: (-> Text Nat Synthesis) +... (function (_ class_name size) +... {$.#Extension "jvm array new object" +... (list (class_type class_name) +... (literal_nat size))})) +... class_of (: (-> Synthesis Synthesis) +... (function (_ object) +... {$.#Extension "jvm member invoke virtual" +... (list& (class_type "java.lang.Object") +... ($.text "getClass") +... (class_type "java.lang.Class") +... object +... (list))})) +... input (: (All (_ c) (-> (jvm/type.Type c) Synthesis Synthesis)) +... (function (_ value_type value) +... ($.tuple (list (jvm_type value_type) value)))) - example_object {$.#Extension "jvm member invoke constructor" - (list& (class_type "java.lang.Object") - (list))} - phase_arity 3 - $phase ($.variable/local 1) - $archive ($.variable/local 2) - $input ($.variable/local 3) - $state ($.variable/local 4) - apply_method {$.#Extension "jvm member invoke virtual" - (list& (class_type "java.lang.Class") - ($.text "getMethod") - (class_type "java.lang.reflect.Method") - (class_of $phase) - (list (input java/lang/String - ($.text runtime.apply_method)) - (input <java/lang/Class> - (|> (object_array "java.lang.Class" phase_arity) - (write! "java.lang.Class" 0 (class_of example_object)) - (write! "java.lang.Class" 1 (class_of example_object)) - (write! "java.lang.Class" 2 (class_of example_object))))))}] - {$.#Extension "jvm member invoke virtual" - (list& (class_type "java.lang.reflect.Method") - ($.text "invoke") - (class_type "java.lang.Object") - apply_method - (list (input java/lang/Object - $phase) - (input <java/lang/Object> - (|> (object_array "java.lang.Object" phase_arity) - (write! "java.lang.Object" 0 $archive) - (write! "java.lang.Object" 1 $input) - (write! "java.lang.Object" 2 $state)))))})) +... example_object {$.#Extension "jvm member invoke constructor" +... (list& (class_type "java.lang.Object") +... (list))} +... phase_arity 3 +... $phase ($.variable/local 1) +... $archive ($.variable/local 2) +... $input ($.variable/local 3) +... $state ($.variable/local 4) +... apply_method {$.#Extension "jvm member invoke virtual" +... (list& (class_type "java.lang.Class") +... ($.text "getMethod") +... (class_type "java.lang.reflect.Method") +... (class_of $phase) +... (list (input java/lang/String +... ($.text runtime.apply_method)) +... (input <java/lang/Class> +... (|> (object_array "java.lang.Class" phase_arity) +... (write! "java.lang.Class" 0 (class_of example_object)) +... (write! "java.lang.Class" 1 (class_of example_object)) +... (write! "java.lang.Class" 2 (class_of example_object))))))}] +... {$.#Extension "jvm member invoke virtual" +... (list& (class_type "java.lang.reflect.Method") +... ($.text "invoke") +... (class_type "java.lang.Object") +... apply_method +... (list (input java/lang/Object +... $phase) +... (input <java/lang/Object> +... (|> (object_array "java.lang.Object" phase_arity) +... (write! "java.lang.Object" 0 $archive) +... (write! "java.lang.Object" 1 $input) +... (write! "java.lang.Object" 2 $state)))))})) (def: (phase_wrapper archive) (-> Archive (generation.Operation _.Anchor _.Inst _.Definition phase.Wrapper)) (do phase.monad - [instanceG (function.function' {.#Some [0 (.nat -1)]} expression.translate archive [(list) 4 ..how_to_wrap_a_phase]) - phase_wrapper (generation.evaluate! [0 (.nat -2)] instanceG)] - (in (function (_ phase) - (<| try.trusted - (: (Try java/lang/Object)) - (do try.monad - [apply_method (|> phase_wrapper - (:as java/lang/Object) - (java/lang/Object::getClass) - (java/lang/Class::getMethod runtime.apply_method _apply1_args))] - (java/lang/reflect/Method::invoke - (:as java/lang/Object phase_wrapper) - (|> (ffi.array java/lang/Object 1) - (ffi.write! 0 (:as java/lang/Object phase))) - apply_method))))))) + [... instanceG (function.function' {.#Some [0 (.nat -1)]} expression.translate archive [(list) 4 ..how_to_wrap_a_phase]) + ... phase_wrapper (generation.evaluate! [0 (.nat -2)] instanceG) + ] + (in (|>>) + ... (function (_ phase) + ... (<| try.trusted + ... (: (Try java/lang/Object)) + ... (do try.monad + ... [apply_method (|> phase_wrapper + ... (:as java/lang/Object) + ... (java/lang/Object::getClass) + ... (java/lang/Class::getMethod runtime.apply_method _apply1_args))] + ... (java/lang/reflect/Method::invoke + ... (:as java/lang/Object phase_wrapper) + ... (|> (ffi.array java/lang/Object 1) + ... (ffi.write! 0 (:as java/lang/Object phase))) + ... apply_method)))) + ))) (def: .public platform ... (IO (Platform Anchor (Bytecode Any) Definition)) |