aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--stdlib/source/library/lux/meta/compiler/default/platform.lux66
-rw-r--r--stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux20
-rw-r--r--stdlib/source/test/lux/meta.lux4
-rw-r--r--stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function.lux10
-rw-r--r--stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux38
-rw-r--r--stdlib/source/test/lux/meta/compiler/target.lux3
-rw-r--r--stdlib/source/test/lux/meta/type/nominal.lux3
7 files changed, 111 insertions, 33 deletions
diff --git a/stdlib/source/library/lux/meta/compiler/default/platform.lux b/stdlib/source/library/lux/meta/compiler/default/platform.lux
index 61115fb32..488e04e79 100644
--- a/stdlib/source/library/lux/meta/compiler/default/platform.lux
+++ b/stdlib/source/library/lux/meta/compiler/default/platform.lux
@@ -115,7 +115,8 @@
(-> context.Context <Platform> module.ID (Key document) (Format document) (archive.Entry document)
(Async (Try Any))))
(let [system (the #file_system platform)
- write_artifact! (is (-> [artifact.ID (Maybe Text) Binary] (Action Any))
+ write_artifact! (is (-> [artifact.ID (Maybe Text) Binary]
+ (Action Any))
(function (_ [artifact_id custom content])
(is (Async (Try Any))
(cache/artifact.cache! system context @module artifact_id content))))]
@@ -152,7 +153,8 @@
... TODO: Inline ASAP
(def (compile_runtime! platform)
(All (_ <type_vars>)
- (-> <Platform> (///translation.Operation <type_vars> [Registry Output])))
+ (-> <Platform>
+ (///translation.Operation <type_vars> [Registry Output])))
(do phase.monad
[_ ..initialize_buffer!]
(the #runtime platform)))
@@ -201,7 +203,8 @@
(//init.with_defaults .prelude all_extensions)))
(def (with_extended_prelude state archive)
- (-> Lux Archive Archive)
+ (-> Lux Archive
+ Archive)
(|> (do try.monad
[prelude (meta.result state (meta.module .prelude))
entry (archive.find .prelude archive)
@@ -238,13 +241,14 @@
[archive analysis_state] (ioW.thaw (list) compilation_configuration (the #host platform) (the #file_system platform) context import compilation_sources)
.let [with_missing_extensions
(is (All (_ <type_vars>)
- (-> (//init.Extensions <type_vars>) <State> (Async (Try <State>))))
+ (-> (//init.Extensions <type_vars>) <State>
+ (Async (Try <State>))))
(function (_ all_extensions state)
(|> (initialize_state analysis_state all_extensions)
(phase.result' state)
(try#each product.left)
async#in)))]]
- (if (archive.archived? archive .prelude)
+ (if (archive.archived? archive descriptor.runtime)
(do !
[state (with_missing_extensions all_extensions state)
.let [archive (with_extended_prelude (the [///declaration.#analysis ///declaration.#state] state) archive)]]
@@ -261,7 +265,8 @@
(def (module_compilation_log module)
(All (_ <type_vars>)
- (-> descriptor.Module <State> Text))
+ (-> descriptor.Module <State>
+ Text))
(|>> (the [///declaration.#translation
///declaration.#state
///translation.#log])
@@ -271,7 +276,8 @@
(def with_reset_log
(All (_ <type_vars>)
- (-> <State> <State>))
+ (-> <State>
+ <State>))
(has [///declaration.#translation
///declaration.#state
///translation.#log]
@@ -296,8 +302,10 @@
#depended_by empty]))
(def (depend module import dependence)
- (-> descriptor.Module descriptor.Module Dependence Dependence)
- (let [transitive_dependency (is (-> (-> Dependence Mapping) descriptor.Module (Set descriptor.Module))
+ (-> descriptor.Module descriptor.Module Dependence
+ Dependence)
+ (let [transitive_dependency (is (-> (-> Dependence Mapping) descriptor.Module
+ (Set descriptor.Module))
(function (_ lens module)
(|> dependence
lens
@@ -328,8 +336,10 @@
[import transitive_depended_by])))))
(def (circular_dependency? module import dependence)
- (-> descriptor.Module descriptor.Module Dependence Bit)
- (let [dependence? (is (-> descriptor.Module (-> Dependence Mapping) descriptor.Module Bit)
+ (-> descriptor.Module descriptor.Module Dependence
+ Bit)
+ (let [dependence? (is (-> descriptor.Module (-> Dependence Mapping) descriptor.Module
+ Bit)
(function (_ from relationship to)
(let [targets (|> dependence
relationship
@@ -357,7 +367,8 @@
["Duplicates" (%.list %.text (set.list duplicates))])))
(def (verify_dependencies importer importee dependence)
- (-> descriptor.Module descriptor.Module Dependence (Try Any))
+ (-> descriptor.Module descriptor.Module Dependence
+ (Try Any))
(cond (text#= importer importee)
(exception.except ..module_cannot_import_itself [importer])
@@ -384,10 +395,12 @@
(Signal state)])
(type (Importer state)
- (-> (List ///.Custom) descriptor.Module descriptor.Module (Return state)))
+ (-> (List ///.Custom) descriptor.Module descriptor.Module
+ (Return state)))
(type (Compiler state)
- (-> (List ///.Custom) descriptor.Module (Importer state) module.ID (Context state) descriptor.Module (Return state)))
+ (-> (List ///.Custom) descriptor.Module (Importer state) module.ID (Context state) descriptor.Module
+ (Return state)))
(with_expansions [Lux_Context (..Context <State>)
Lux_Return (..Return <State>)
@@ -398,7 +411,8 @@
(def (parallel initial)
(All (_ <type_vars>)
(-> Lux_Context
- (-> Lux_Compiler Lux_Importer)))
+ (-> Lux_Compiler
+ Lux_Importer)))
(let [current (stm.var initial)
pending (sharing [<type_vars>]
(is Lux_Context
@@ -489,7 +503,8 @@
... TODO: Find a better way, as this only works for the Lux compiler.
(def (updated_state archive extended_states state)
(All (_ <type_vars>)
- (-> Archive (List <State>) <State> (Try <State>)))
+ (-> Archive (List <State>) <State>
+ (Try <State>)))
(do [! try.monad]
[modules (monad.each ! (function (_ module)
(do !
@@ -503,10 +518,13 @@
(list#each product.left)
(set.of_list text.hash))
with_modules (is (All (_ <type_vars>)
- (-> <State> <State>))
+ (-> <State>
+ <State>))
(revised [///declaration.#analysis
///declaration.#state]
- (is (All (_ a) (-> a a))
+ (is (All (_ a)
+ (-> a
+ a))
(function (_ analysis_state)
(|> analysis_state
(as .Lux)
@@ -521,7 +539,8 @@
(def (set_current_module module state)
(All (_ <type_vars>)
- (-> descriptor.Module <State> <State>))
+ (-> descriptor.Module <State>
+ <State>))
(|> (///declaration.set_current_module module)
(phase.result' state)
try.trusted
@@ -531,7 +550,8 @@
... This currently assumes that all imports will be specified once in a single .require form.
... This might not be the case in the future.
(def (with_new_dependencies new_dependencies all_dependencies)
- (-> (List descriptor.Module) (Set descriptor.Module) [(Set descriptor.Module) (Set descriptor.Module)])
+ (-> (List descriptor.Module) (Set descriptor.Module)
+ [(Set descriptor.Module) (Set descriptor.Module)])
(let [[all_dependencies duplicates _] (is [(Set descriptor.Module) (Set descriptor.Module) Bit]
(list#mix (function (_ new [all duplicates seen_prelude?])
(if (set.member? all new)
@@ -620,7 +640,8 @@
state document)
(-> Import context.Context <Platform> (List _io.Context) Configuration (///.Compiler <State> .Module)
(Key document) (Format document) (///.Compilation state document)
- (-> (List ///.Custom) descriptor.Module Lux_Importer module.ID (..Context state) descriptor.Module (..Return state))))
+ (-> (List ///.Custom) descriptor.Module Lux_Importer module.ID (..Context state) descriptor.Module
+ (..Return state))))
(function (_ customs importer import! @module [archive state] module)
(loop (again [[archive state] [archive state]
compilation custom_compilation
@@ -776,7 +797,8 @@
(def (custom import! it)
(All (_ <type_vars>)
- (-> Lux_Importer compiler.Compiler (Async (Try [Lux_Context (List Text) Any]))))
+ (-> Lux_Importer compiler.Compiler
+ (Async (Try [Lux_Context (List Text) Any]))))
(let [/#definition (the compiler.#definition it)
[/#module /#name] /#definition]
(do ..monad
diff --git a/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux b/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux
index c798ee0c3..d379a48b3 100644
--- a/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux
+++ b/stdlib/source/library/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux
@@ -4,18 +4,26 @@
(.require
[library
[lux (.except type)
+ [math
+ [number
+ ["[0]" i64]]]
[meta
[compiler
[target
[jvm
- ["[0]" type]
- [constant
- [pool (.only Resource)]]]]]]]]
+ ["[0]" type]]]]]]]
["[0]" //
[/////////
[arity (.only Arity)]]])
-(def .public minimum Arity 1)
-(def .public maximum Arity 8)
+(with_template [<power> <name>]
+ [(def .public <name>
+ Arity
+ (i64.left_shifted <power> 1))]
-(def .public type type.int)
+ [0 minimum]
+ [3 maximum]
+ )
+
+(def .public type
+ type.int)
diff --git a/stdlib/source/test/lux/meta.lux b/stdlib/source/test/lux/meta.lux
index 1b037cb8a..b13f9097c 100644
--- a/stdlib/source/test/lux/meta.lux
+++ b/stdlib/source/test/lux/meta.lux
@@ -828,8 +828,8 @@
(random.and (in head))))))]
tags_0 (random_labels 5)
tags_1 (random_labels 6)
- .let [type_0 {.#Nominal name_0 (list)}
- type_1 {.#Nominal name_1 (list)}
+ .let [type_0 {.#Named [label_module name_1] {.#Nominal name_0 (list)}}
+ type_1 {.#Named [label_module name_1] {.#Nominal name_1 (list)}}
expected_lux
(is Lux
diff --git a/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function.lux b/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function.lux
index a2bdb6ce2..4571d75d3 100644
--- a/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function.lux
+++ b/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function.lux
@@ -37,8 +37,12 @@
["[0]" phase]
["[0]" synthesis]
["[0]" translation]]]]]]
- [//
- ["[0]T" complex]])
+ [/
+ [field
+ [constant
+ ["[0]T" arity]]]
+ [//
+ ["[0]T" complex]]])
(def .public test
Test
@@ -137,4 +141,6 @@
(try.else false))]
(and exact_arity!
multiple_applications!)))
+
+ arityT.test
)))
diff --git a/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux b/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux
new file mode 100644
index 000000000..35dfd07e6
--- /dev/null
+++ b/stdlib/source/test/lux/meta/compiler/language/lux/phase/translation/jvm/function/field/constant/arity.lux
@@ -0,0 +1,38 @@
+... This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
+... If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+(.require
+ [library
+ [lux (.except)
+ [abstract
+ [monad (.only do)]]
+ [math
+ ["[0]" random (.only Random)]
+ [number
+ ["n" nat]]]
+ [meta
+ [compiler
+ [target
+ [jvm
+ [type
+ ["[0]" parser]]]]]]
+ [test
+ ["_" property (.only Test)]]]]
+ [\\library
+ ["[0]" /]])
+
+(def .public test
+ Test
+ (<| (_.covering /._)
+ (do [! random.monad]
+ [])
+ (all _.and
+ (_.coverage [/.minimum /.maximum]
+ (and (n.< /.maximum /.minimum)
+ (n.> 0 /.maximum)
+ (n.> 0 /.minimum)))
+ (_.coverage [/.type]
+ (when (parser.primitive? /.type)
+ {.#Some _} true
+ {.#None} false))
+ )))
diff --git a/stdlib/source/test/lux/meta/compiler/target.lux b/stdlib/source/test/lux/meta/compiler/target.lux
index 6f0987b9f..3c4a88281 100644
--- a/stdlib/source/test/lux/meta/compiler/target.lux
+++ b/stdlib/source/test/lux/meta/compiler/target.lux
@@ -18,11 +18,14 @@
["[0]" /]])
(with_expansions [<targets> (these /.old
+
+ /.c++
/.js
/.jvm
/.lua
/.python
/.ruby
+
/.common_lisp
/.php
/.r
diff --git a/stdlib/source/test/lux/meta/type/nominal.lux b/stdlib/source/test/lux/meta/type/nominal.lux
index beea5c495..d2b0a14fa 100644
--- a/stdlib/source/test/lux/meta/type/nominal.lux
+++ b/stdlib/source/test/lux/meta/type/nominal.lux
@@ -81,7 +81,8 @@
/.transmutation
(is (g!Bar .Lux)))
true)))
- (_.for [/.Frame]
+ (_.for [/.Frame
+ /.#name /.#type_vars /.#abstraction /.#representation]
(all _.and
(_.coverage [/.current]
(text#= (template.text [g!Bar])