diff options
author | Eduardo Julian | 2019-07-31 21:54:53 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-07-31 21:54:53 -0400 |
commit | d0c938888b3dd00cfdb27bb9444401b9e5913490 (patch) | |
tree | 925c81616a87b0998d66fa0664923be491cfacba | |
parent | a0889b2ee76c1ae7a9a5bbe2eec9f051b4f341e4 (diff) |
Ported JVM reference generation to the new JVM bytecode machinery.
Diffstat (limited to '')
34 files changed, 168 insertions, 51 deletions
diff --git a/documentation/research/Optimization.md b/documentation/research/Optimization.md index f46215cdd..32f8e0b18 100644 --- a/documentation/research/Optimization.md +++ b/documentation/research/Optimization.md @@ -1,3 +1,7 @@ +# For the compiler + +1. [Self Hosting a Million-Lines-Per-Second Parser](https://bjou-lang.org/blog/7-10-2019-self-hosting-a-million-lines-per-second-parser/7-10-2019-self-hosting-a-million-lines-per-second-parser.html) + # Reference 1. https://docs.google.com/presentation/d/1tpeJZFObkeick4CF-mx0L3CeCgvT15B96aJeRpxEPcE/preview?slide=id.p diff --git a/documentation/research/Security.md b/documentation/research/Security.md index 2990c7243..6ee526434 100644 --- a/documentation/research/Security.md +++ b/documentation/research/Security.md @@ -28,6 +28,7 @@ # Reference +1. [Good Practices for Capability URLs](https://www.w3.org/TR/capability-urls/) 1. [Secure Socket API](https://securesocketapi.org/) 1. [Mind your Language(s): A discussion about languages and security](https://www.ssi.gouv.fr/uploads/IMG/pdf/Mind_Your_Languages_-_version_longue.pdf) 1. https://www.microsoft.com/en-us/research/blog/scaling-the-everest-of-software-security-with-dr-jonathan-protzenko/ diff --git a/documentation/research/cryptography.md b/documentation/research/cryptography.md index 8176bbcf7..bd3ec0d87 100644 --- a/documentation/research/cryptography.md +++ b/documentation/research/cryptography.md @@ -1,5 +1,7 @@ # Constant-time programming +1. [Verifying Constant-Time Implementations](https://michael-emmi.github.io/papers/conf-uss-AlmeidaBBDE16.pdf) +1. https://www.bearssl.org/ctmul.html 1. [FaCT: A Flexible, Constant-Time Programming Language](https://cseweb.ucsd.edu/~dstefan/pubs/cauligi:2017:fact.pdf) 1. [FaCT: A DSL for Timing-Sensitive Computation](https://ranjitjhala.github.io/static/fact_dsl.pdf) 1. ["FaCT: A New Language for Constant-Time Programming" by Sunjay Cauligi](https://www.youtube.com/watch?v=kbn9UCRK2Qg) diff --git a/documentation/research/database.md b/documentation/research/database.md index de99fde3f..65f42f3c8 100644 --- a/documentation/research/database.md +++ b/documentation/research/database.md @@ -38,9 +38,8 @@ # Optimization -1. Relaxed Operator Fusion for In-Memory Databases: Making Compilation, Vectorization, and Prefetching Work Together At Last - - https://db.cs.cmu.edu/papers/2017/p1-menon.pdf +1. [Hera - High Efficiency Reliable Access to data stores](https://github.com/paypal/hera) +1. [Relaxed Operator Fusion for In-Memory Databases: Making Compilation, Vectorization, and Prefetching Work Together At Last](https://db.cs.cmu.edu/papers/2017/p1-menon.pdf) 1. https://medium.com/connect-the-dots/optimizing-queries-in-rethinkdb-584d7f660cb 1. https://blog.acolyer.org/2019/01/18/towards-a-hands-free-query-optimizer-through-deep-learning/ 1. http://blog.felipe.rs/2019/01/29/demystifying-join-algorithms/ @@ -107,6 +106,7 @@ ## General +1. https://github.com/Workiva/eva/ 1. https://learndb.net/ 1. http://orientdb.com/ 1. https://ignite.apache.org/ diff --git a/documentation/research/debugging.md b/documentation/research/debugging.md index 39fa3b51f..6b9671d47 100644 --- a/documentation/research/debugging.md +++ b/documentation/research/debugging.md @@ -14,6 +14,8 @@ # Reference +1. [Multiverse Debugging: Non-Deterministic Debugging for Non-Deterministic Programs](https://stefan-marr.de/2019/07/what-if-we-could-see-all-concurrency-bugs-in-the-debugger/) +1. [Writing a Debugger](http://system.joekain.com/debugger/) 1. https://en.wikipedia.org/wiki/Jinx_Debugger 1. http://www.mattzeunert.com/2017/12/07/better-types-of-debuggers.html 1. https://www.youtube.com/watch?v=ipDhvd1NsmE diff --git a/documentation/research/distributed_programming.md b/documentation/research/distributed_programming.md index 018357958..991edf8b0 100644 --- a/documentation/research/distributed_programming.md +++ b/documentation/research/distributed_programming.md @@ -1,5 +1,6 @@ # Reference +1. [DDD and Messaging Architectures: An overview of my different series on patterns in distributed systems.](http://verraes.net/2019/05/ddd-msg-arch/) 1. https://replicated.cc/ 1. http://www.the-paper-trail.org/post/2014-08-09-distributed-systems-theory-for-the-distributed-systems-engineer/ 1. https://courses.engr.illinois.edu/cs525/sp2018/index.html diff --git a/documentation/research/documentation.md b/documentation/research/documentation.md index 55cc7e02a..3219348b9 100644 --- a/documentation/research/documentation.md +++ b/documentation/research/documentation.md @@ -45,6 +45,7 @@ # Reference +1. [Seamless API Specification](https://github.com/seamlessapis/seamless/tree/master/domain) 1. https://docs.racket-lang.org/pollen/ 1. [Documenting the Clojure/Script Ecosystem – Martin Klepsch](https://www.youtube.com/watch?v=mWrvd6SE7Vg) 1. http://apistylebook.com/ diff --git a/documentation/research/game_programming.md b/documentation/research/game_programming.md index 3ff01be0a..5034eda93 100644 --- a/documentation/research/game_programming.md +++ b/documentation/research/game_programming.md @@ -59,6 +59,8 @@ # Rendering +1. [WebGL2 Fundamentals](https://webgl2fundamentals.org/) +1. [Tiles to Curves: Fun With Voronoi Graphs (part 1)](https://www.gamedev.net/articles/programming/general-and-gameplay-programming/tiles-to-curves-fun-with-voronoi-graphs-part-1-r5150/) 1. [Lazy Incremental Computation for Efficient Scene Graph Rendering](https://www.cg.tuwien.ac.at/courses/RendEng/2015/RendEng-2015-11-16-paper2.pdf) 1. [3D Wireframes in SVG](https://prideout.net/blog/svg_wireframes/) 1. https://zzz.dog/ diff --git a/documentation/research/math.md b/documentation/research/math.md index 5c8db787c..0299293b3 100644 --- a/documentation/research/math.md +++ b/documentation/research/math.md @@ -1,3 +1,7 @@ +# Prime number + +1. [The History of the Primality of One: A Selection of Sources](https://cs.uwaterloo.ca/journals/JIS/VOL15/Caldwell2/cald6.pdf) + # Trigonometry 1. [Approximating the Sine Function](http://datagenetics.com/blog/july12019/index.html) @@ -17,6 +21,7 @@ # Topology +1. [Pointless topology](https://en.wikipedia.org/wiki/Pointless_topology) 1. [ELEMENTARY APPLIED TOPOLOGY](https://www.math.upenn.edu/~ghrist/notes.html) # Library diff --git a/documentation/research/operating_system.md b/documentation/research/operating_system.md index 74d5f33f6..2e26a3976 100644 --- a/documentation/research/operating_system.md +++ b/documentation/research/operating_system.md @@ -189,6 +189,7 @@ # System Calls +1. [1001 Ways of Implementing a System Call](https://x86.lol/generic/2019/07/04/kernel-entry.html) 1. https://eli.thegreenplace.net/2018/basics-of-futexes/ 1. [FlexSC: Flexible System Call Scheduling with Exception-Less System Calls](https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Soares.pdf) diff --git a/new-luxc/source/luxc/lang/translation/jvm/function.lux b/new-luxc/source/luxc/lang/translation/jvm/function.lux index d0764796f..cc618ca0d 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/function.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/function.lux @@ -17,7 +17,7 @@ [compiler [analysis (#+ Arity Environment)] [synthesis (#+ Synthesis Abstraction Apply)] - ["_." reference (#+ Register Variable)] + [reference (#+ Register)] ["." phase ["." generation]]]]] [luxc diff --git a/new-luxc/source/luxc/lang/translation/jvm/reference.lux b/new-luxc/source/luxc/lang/translation/jvm/reference.lux index 63fd0685a..886f461ce 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/reference.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/reference.lux @@ -37,14 +37,14 @@ //.$Object))))) (def: local - (-> Register (Operation Inst)) - (|>> _.ALOAD operation@wrap)) + (-> Register Inst) + (|>> _.ALOAD)) (def: #export (variable variable) (-> Variable (Operation Inst)) (case variable (#reference.Local variable) - (local variable) + (operation@wrap (local variable)) (#reference.Foreign variable) (foreign variable))) @@ -53,4 +53,4 @@ (-> Name (Operation Inst)) (do phase.monad [bytecode-name (generation.remember name)] - (operation@wrap (_.GETSTATIC bytecode-name //.value-field //.$Object)))) + (wrap (_.GETSTATIC bytecode-name //.value-field //.$Object)))) diff --git a/stdlib/source/lux/data/number/i16.lux b/stdlib/source/lux/data/number/i16.lux index 23f64afc5..44fe0e988 100644 --- a/stdlib/source/lux/data/number/i16.lux +++ b/stdlib/source/lux/data/number/i16.lux @@ -12,9 +12,9 @@ (def: #export I16 (:by-example [size] {(Sub size) - sub} + ..sub} (I64 size))) -(def: #export i16 (-> I64 I16) (get@ #i64.narrow sub)) -(def: #export i64 (-> I16 I64) (get@ #i64.wide sub)) -(def: #export equivalence (Equivalence I16) (get@ #i64.equivalence sub)) +(def: #export i16 (-> I64 I16) (get@ #i64.narrow ..sub)) +(def: #export i64 (-> I16 I64) (get@ #i64.wide ..sub)) +(def: #export equivalence (Equivalence I16) (get@ #i64.equivalence ..sub)) diff --git a/stdlib/source/lux/data/number/i32.lux b/stdlib/source/lux/data/number/i32.lux index 7f4452880..560168f6f 100644 --- a/stdlib/source/lux/data/number/i32.lux +++ b/stdlib/source/lux/data/number/i32.lux @@ -12,9 +12,9 @@ (def: #export I32 (:by-example [size] {(Sub size) - sub} + ..sub} (I64 size))) -(def: #export i32 (-> I64 I32) (get@ #i64.narrow sub)) -(def: #export i64 (-> I32 I64) (get@ #i64.wide sub)) -(def: #export equivalence (Equivalence I32) (get@ #i64.equivalence sub)) +(def: #export i32 (-> I64 I32) (get@ #i64.narrow ..sub)) +(def: #export i64 (-> I32 I64) (get@ #i64.wide ..sub)) +(def: #export equivalence (Equivalence I32) (get@ #i64.equivalence ..sub)) diff --git a/stdlib/source/lux/data/number/i8.lux b/stdlib/source/lux/data/number/i8.lux index 483f6a6a1..a6475eb15 100644 --- a/stdlib/source/lux/data/number/i8.lux +++ b/stdlib/source/lux/data/number/i8.lux @@ -12,9 +12,9 @@ (def: #export I8 (:by-example [size] {(Sub size) - sub} + ..sub} (I64 size))) -(def: #export i8 (-> I64 I8) (get@ #i64.narrow sub)) -(def: #export i64 (-> I8 I64) (get@ #i64.wide sub)) -(def: #export equivalence (Equivalence I8) (get@ #i64.equivalence sub)) +(def: #export i8 (-> I64 I8) (get@ #i64.narrow ..sub)) +(def: #export i64 (-> I8 I64) (get@ #i64.wide ..sub)) +(def: #export equivalence (Equivalence I8) (get@ #i64.equivalence ..sub)) diff --git a/stdlib/source/lux/target/jvm/descriptor.lux b/stdlib/source/lux/target/jvm/descriptor.lux index 1ca625bd6..267835e1b 100644 --- a/stdlib/source/lux/target/jvm/descriptor.lux +++ b/stdlib/source/lux/target/jvm/descriptor.lux @@ -70,9 +70,9 @@ (format "[") :abstraction)) - (def: #export (method inputs output) - (-> (List (Descriptor (Value Any))) - (Descriptor (Return Any)) + (def: #export (method [inputs output]) + (-> [(List (Descriptor (Value Any))) + (Descriptor (Return Any))] (Descriptor Method)) (:abstraction (format (|> inputs diff --git a/stdlib/source/lux/target/jvm/instruction.lux b/stdlib/source/lux/target/jvm/instruction.lux index 02057202b..25b10cc9e 100644 --- a/stdlib/source/lux/target/jvm/instruction.lux +++ b/stdlib/source/lux/target/jvm/instruction.lux @@ -36,9 +36,9 @@ (type: #export Address Nat) -(type: Resolver (Dictionary Label Address)) +(type: #export Resolver (Dictionary Label Address)) -(type: Tracker +(type: #export Tracker {#program-counter Address #next-label Label #known-labels Resolver}) @@ -470,23 +470,21 @@ (cond (is? //descriptor.void descriptor) 0 - (is? //descriptor.long descriptor) + (or (is? //descriptor.long descriptor) + (is? //descriptor.double descriptor)) 2 - (is? //descriptor.double descriptor) - 2 - ## else 1))) (template [<static?> <name> <bytecode>] - [(def: #export (<name> class method inputs output) - (-> External Text (List (Descriptor (Value Any))) (Descriptor (Return Any)) (Instruction Any)) + [(def: #export (<name> class method [inputs output]) + (-> External Text [(List (Descriptor (Value Any))) (Descriptor (Return Any))] (Instruction Any)) (do ..monad [index (<| ..lift (//constant/pool.method class) {#//constant/pool.name method - #//constant/pool.descriptor (//descriptor.method inputs output)})] + #//constant/pool.descriptor (//descriptor.method [inputs output])})] (..nullary (<bytecode> index (|> inputs @@ -522,3 +520,10 @@ [getfield /bytecode.getfield/1 /bytecode.getfield/2] [putfield /bytecode.putfield/1 /bytecode.putfield/2] ) + +(def: #export (compose pre post) + (All [pre post] + (-> (Instruction pre) (Instruction post) (Instruction post))) + (do ..monad + [_ pre] + post)) diff --git a/stdlib/source/lux/tool/compiler/analysis.lux b/stdlib/source/lux/tool/compiler/analysis.lux index 33973f979..ffefb48f7 100644 --- a/stdlib/source/lux/tool/compiler/analysis.lux +++ b/stdlib/source/lux/tool/compiler/analysis.lux @@ -16,6 +16,7 @@ [collection ["." list ("#@." functor fold)]]]] [// + [arity (#+ Arity)] ["." reference (#+ Register Variable Reference)] ["." phase ["." extension (#+ Extension)]]]) @@ -91,8 +92,6 @@ [text Text #..Text] ) -(type: #export Arity Nat) - (type: #export (Abstraction c) [Environment Arity c]) (type: #export (Application c) [c (List c)]) diff --git a/stdlib/source/lux/tool/compiler/arity.lux b/stdlib/source/lux/tool/compiler/arity.lux new file mode 100644 index 000000000..2e6b07490 --- /dev/null +++ b/stdlib/source/lux/tool/compiler/arity.lux @@ -0,0 +1,14 @@ +(.module: + [lux #* + [data + [number + ["n" nat]]]]) + +(type: #export Arity Nat) + +(template [<name> <comparison>] + [(def: #export <name> (-> Arity Bit) (<comparison> 1))] + + [mono? n.=] + [poly? n.>] + ) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/function.lux index c8edd4e46..3dcc24448 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/common-lisp/function.lux @@ -19,7 +19,8 @@ ["#/" // ["." // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/js/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/js/function.lux index a0418b839..ec48162c5 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/js/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/js/function.lux @@ -19,7 +19,8 @@ ["#/" // ("#@." monad) ["." // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/jvm/primitive.lux b/stdlib/source/lux/tool/compiler/phase/generation/jvm/primitive.lux index 2807487ae..27a02d7b4 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/jvm/primitive.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/jvm/primitive.lux @@ -24,11 +24,11 @@ (do _.monad [_ (`` (|> value (~~ (template.splice <ldc>))))] (_.invokestatic <class> "valueOf" - (list <inputD>) - (|.object <class>))))] + [(list <inputD>) + (|.object <class>)])))] [i64 (I64 Any) [.int constant.long _.ldc/long] "java.lang.Long" |.long] - [f64 Frac [constant.double _.ldc/double] "java.lang.Double" |.double] + [f64 Frac [constant.double _.ldc/double] "java.lang.Double" |.double] ) (def: #export text _.ldc/string) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/jvm/reference.lux b/stdlib/source/lux/tool/compiler/phase/generation/jvm/reference.lux new file mode 100644 index 000000000..3e6738df0 --- /dev/null +++ b/stdlib/source/lux/tool/compiler/phase/generation/jvm/reference.lux @@ -0,0 +1,61 @@ +(.module: + [lux #* + [abstract + [monad (#+ do)]] + [data + [text + ["%" format (#+ format)]]] + [tool + [compiler + ["." reference (#+ Register Variable)] + ["." phase ("operation@." monad) + ["." generation]]]] + [target + [jvm + ["_" instruction (#+ Instruction)] + [encoding + ["." unsigned]]]]] + ["." // #_ + [runtime (#+ Operation)] + ["#." value]]) + +(def: #export this + (Instruction Any) + (_.aload (unsigned.u1 0))) + +(template [<name> <prefix>] + [(def: #export <name> + (-> Register Text) + (|>> %.nat (format <prefix>)))] + + [foreign-name "f"] + [partial-name "p"] + ) + +(def: (foreign variable) + (-> Register (Operation (Instruction Any))) + (do phase.monad + [function-class generation.context] + (wrap ($_ _.compose + ..this + (_.getfield function-class (..foreign-name variable) + //value.type))))) + +(def: local + (-> Register (Instruction Any)) + (|>> unsigned.u1 _.aload)) + +(def: #export (variable variable) + (-> Variable (Operation (Instruction Any))) + (case variable + (#reference.Local variable) + (operation@wrap (..local variable)) + + (#reference.Foreign variable) + (..foreign variable))) + +(def: #export (constant name) + (-> Name (Operation (Instruction Any))) + (do phase.monad + [bytecode-name (generation.remember name)] + (wrap (_.getstatic bytecode-name //value.field //value.type)))) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/jvm/structure.lux b/stdlib/source/lux/tool/compiler/phase/generation/jvm/structure.lux index 1282ac245..8b2c6c270 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/jvm/structure.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/jvm/structure.lux @@ -70,5 +70,5 @@ _ (flagG right?) _ valueI] (_.invokestatic //runtime.class "variant" - (list |.int $Object $Object) - (|.array $Object)))))) + [(list |.int $Object $Object) + (|.array $Object)]))))) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/jvm/value.lux b/stdlib/source/lux/tool/compiler/phase/generation/jvm/value.lux new file mode 100644 index 000000000..a598b9997 --- /dev/null +++ b/stdlib/source/lux/tool/compiler/phase/generation/jvm/value.lux @@ -0,0 +1,9 @@ +(.module: + [lux (#- type) + [target + [jvm + ["." descriptor (#+ Descriptor Value)]]]]) + +(def: #export field "_value") + +(def: #export type (Descriptor (Value Any)) (descriptor.object "java.lang.Object")) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/lua/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/lua/function.lux index eb0a5e71b..7bac2e107 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/lua/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/lua/function.lux @@ -19,7 +19,8 @@ ["#/" // ["." // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/php/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/php/function.lux index 8dfb9668e..6e75f37bc 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/php/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/php/function.lux @@ -20,7 +20,8 @@ ["#/" // ["." // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/python/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/python/function.lux index c70ca9c37..ed6e53274 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/python/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/python/function.lux @@ -19,7 +19,8 @@ ["#/" // ["." // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/ruby/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/ruby/function.lux index ef3920d23..02e221894 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/ruby/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/ruby/function.lux @@ -19,7 +19,8 @@ ["#/" // ["." // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/generation/scheme/function.lux b/stdlib/source/lux/tool/compiler/phase/generation/scheme/function.lux index 41a2e6b17..797e31e1d 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation/scheme/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation/scheme/function.lux @@ -21,7 +21,8 @@ ["#/" // ("#;." monad) ["#/" // #_ [reference (#+ Register Variable)] - [analysis (#+ Variant Tuple Environment Arity Abstraction Application Analysis)] + [arity (#+ Arity)] + [analysis (#+ Variant Tuple Environment Abstraction Application Analysis)] [synthesis (#+ Synthesis)]]]]]) (def: #export (apply generate [functionS argsS+]) diff --git a/stdlib/source/lux/tool/compiler/phase/synthesis/function.lux b/stdlib/source/lux/tool/compiler/phase/synthesis/function.lux index dbcc56e38..4e09f08e9 100644 --- a/stdlib/source/lux/tool/compiler/phase/synthesis/function.lux +++ b/stdlib/source/lux/tool/compiler/phase/synthesis/function.lux @@ -15,8 +15,9 @@ ["#." loop (#+ Transform)] ["#/" // ("#;." monad) ["#/" // #_ + [arity (#+ Arity)] ["#." reference (#+ Register Variable)] - ["#." analysis (#+ Environment Arity Analysis)] + ["#." analysis (#+ Environment Analysis)] ["/" synthesis (#+ Path Synthesis Operation Phase)]]]]) (exception: #export (cannot-find-foreign-variable-in-environment {foreign Register} {environment Environment}) diff --git a/stdlib/source/lux/tool/compiler/synthesis.lux b/stdlib/source/lux/tool/compiler/synthesis.lux index 4c8959b26..e44432bcb 100644 --- a/stdlib/source/lux/tool/compiler/synthesis.lux +++ b/stdlib/source/lux/tool/compiler/synthesis.lux @@ -17,8 +17,9 @@ ["." list ("#;." functor)] ["." dictionary (#+ Dictionary)]]]] ["." // #_ + [arity (#+ Arity)] ["#." reference (#+ Register Variable Reference)] - ["#." analysis (#+ Environment Arity Composite Analysis)] + ["#." analysis (#+ Environment Composite Analysis)] ["#." phase ["." extension (#+ Extension)]]]) diff --git a/stdlib/source/test/lux/target/jvm.lux b/stdlib/source/test/lux/target/jvm.lux index 47ed621d8..18469e74e 100644 --- a/stdlib/source/test/lux/target/jvm.lux +++ b/stdlib/source/test/lux/target/jvm.lux @@ -136,8 +136,8 @@ (do /instruction.monad [_ (/instruction.ldc/long (/constant.long expected)) _ (/instruction.invokestatic "java.lang.Long" "valueOf" - (list /descriptor.long) - (/descriptor.object "java.lang.Long"))] + [(list /descriptor.long) + (/descriptor.object "java.lang.Long")])] /instruction.areturn))) (row.row)) (binaryF.run /class.writer)) diff --git a/stdlib/source/test/lux/tool/compiler/phase/synthesis/function.lux b/stdlib/source/test/lux/tool/compiler/phase/synthesis/function.lux index db6c38eca..32044f5dc 100644 --- a/stdlib/source/test/lux/tool/compiler/phase/synthesis/function.lux +++ b/stdlib/source/test/lux/tool/compiler/phase/synthesis/function.lux @@ -26,8 +26,9 @@ [extension ["#." bundle]] ["/#" // + [arity (#+ Arity)] ["#." reference (#+ Variable) ("variable@." equivalence)] - ["#." analysis (#+ Arity Analysis)] + ["#." analysis (#+ Analysis)] ["#." synthesis (#+ Synthesis)]]]]]}) (def: constant-function |