diff options
Diffstat (limited to 'luxc')
| -rw-r--r-- | luxc/src/lux/analyser.clj | 4 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/lux.clj | 4 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/meta.clj | 1 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/module.clj | 8 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/jvm/lux.clj | 12 | ||||
| -rw-r--r-- | luxc/src/lux/type.clj | 16 | 
6 files changed, 15 insertions, 30 deletions
diff --git a/luxc/src/lux/analyser.clj b/luxc/src/lux/analyser.clj index a6dbeccf2..4d4a2c1a0 100644 --- a/luxc/src/lux/analyser.clj +++ b/luxc/src/lux/analyser.clj @@ -150,9 +150,9 @@                (&&lux/analyse-program analyse optimize compile-program ?program)))            "lux def module" -          (|let [(&/$Cons ?meta (&/$Nil)) parameters] +          (|let [(&/$Cons ?meta (&/$Cons ?imports (&/$Nil))) parameters]              (&/with-cursor cursor -              (&&lux/analyse-module analyse optimize eval! compile-module ?meta))) +              (&&lux/analyse-module analyse optimize eval! compile-module ?meta ?imports)))            "lux in-module"            (|let [(&/$Cons [_ (&/$Text ?module)] (&/$Cons ?expr (&/$Nil))) parameters] diff --git a/luxc/src/lux/analyser/lux.clj b/luxc/src/lux/analyser/lux.clj index 91637033e..149bd4a99 100644 --- a/luxc/src/lux/analyser/lux.clj +++ b/luxc/src/lux/analyser/lux.clj @@ -640,13 +640,13 @@          (return (doto (promise)                    (deliver (&/$Right _compiler)))))))) -(defn analyse-module [analyse optimize eval! compile-module ?meta] +(defn analyse-module [analyse optimize eval! compile-module ?meta ?imports]    (|do [_ &/ensure-statement          =anns (&&/analyse-1 analyse &type/Code ?meta)          ==anns (eval! (optimize =anns))          module-name &/get-module-name          _ (&&module/set-anns ==anns module-name) -        _imports (&&module/fetch-imports ==anns) +        _imports (&&module/fetch-imports ?imports)          current-module &/get-module-name          =asyncs (&/map% (fn [_import]                            (|let [[path alias] _import] diff --git a/luxc/src/lux/analyser/meta.clj b/luxc/src/lux/analyser/meta.clj index ab0de60a4..07ec470f3 100644 --- a/luxc/src/lux/analyser/meta.clj +++ b/luxc/src/lux/analyser/meta.clj @@ -43,5 +43,4 @@    alias-tag   "alias"    export?-tag "export?"    tags-tag    "tags" -  imports-tag "imports"    ) diff --git a/luxc/src/lux/analyser/module.clj b/luxc/src/lux/analyser/module.clj index 5ac6191fa..8bc7a64a1 100644 --- a/luxc/src/lux/analyser/module.clj +++ b/luxc/src/lux/analyser/module.clj @@ -420,9 +420,9 @@                                    (&/T [k "" _def-data])                                    ))))))))) -(defn fetch-imports [meta] -  (|case (&meta/meta-get &meta/imports-tag meta) -    (&/$Some [_ (&/$Tuple _parts)]) +(defn fetch-imports [imports] +  (|case imports +    [_ (&/$Tuple _parts)]      (&/map% (fn [_part]                (|case _part                  [_ (&/$Tuple (&/$Cons [[_ (&/$Text _module)] @@ -435,7 +435,7 @@              _parts)      _ -    (&/fail-with-loc "[Analyser Error] No import meta-data."))) +    (&/fail-with-loc "[Analyser Error] Incorrect import syntax.")))  (def ^{:doc "(Lux (List [Text (List Text)]))"}    tag-groups diff --git a/luxc/src/lux/compiler/jvm/lux.clj b/luxc/src/lux/compiler/jvm/lux.clj index 6f3257d37..0fec62e8e 100644 --- a/luxc/src/lux/compiler/jvm/lux.clj +++ b/luxc/src/lux/compiler/jvm/lux.clj @@ -253,19 +253,18 @@  (defn ^:private install-def! [class-loader current-class module-name ?name ?body ?meta]    (|do [_ (return nil)          :let [def-class (&&/load-class! class-loader (&host-generics/->class-name current-class)) -              def-type (&a/expr-type* ?body) -              def-meta ?meta] +              def-type (&a/expr-type* ?body)]          def-value (try (return (-> def-class (.getField &/value-field) (.get nil)))                      (catch Throwable t                        (&/assert! false                                   (str "Error during value initialization:\n"                                        (throwable->text t)))))          _ (&/without-repl-closure -           (&a-module/define module-name ?name def-type def-meta def-value))] +           (&a-module/define module-name ?name def-type ?meta def-value))]      (|case (&/T [(&type/type= &type/Type def-type) -                 (&a-meta/meta-get &a-meta/tags-tag def-meta)]) +                 (&a-meta/meta-get &a-meta/tags-tag ?meta)])        [true (&/$Some [_ (&/$Tuple tags*)])] -      (|do [:let [was-exported? (|case (&a-meta/meta-get &a-meta/export?-tag def-meta) +      (|do [:let [was-exported? (|case (&a-meta/meta-get &a-meta/export?-tag ?meta)                                    (&/$Some _)                                    true @@ -303,11 +302,10 @@            (if (= 1 (&/|length ?meta*))              (|do [:let [current-class (&host-generics/->class-name (str (&host/->module-class r-module) "/" (&host/def-name r-name)))                          def-class (&&/load-class! class-loader current-class) -                        def-meta ?meta                          def-value (-> def-class (.getField &/value-field) (.get nil))]                    def-type (&a-module/def-type r-module r-name)                    _ (&/without-repl-closure -                     (&a-module/define module-name ?name def-type def-meta def-value))] +                     (&a-module/define module-name ?name def-type ?meta def-value))]                (return nil))              (&/fail-with-loc (str "[Compilation Error] Aliases cannot contain meta-data: " (str module-name &/+name-separator+ ?name))))) diff --git a/luxc/src/lux/type.clj b/luxc/src/lux/type.clj index 20126417f..fc1736a1c 100644 --- a/luxc/src/lux/type.clj +++ b/luxc/src/lux/type.clj @@ -40,20 +40,8 @@  (def Text (&/$Named (&/T ["lux" "Text"]) (&/$Primitive "#Text" &/$Nil)))  (def Ident (&/$Named (&/T ["lux" "Ident"]) (&/$Product Text Text))) -(do-template [<name> <tag>] -  (defn <name> [elemT] -    (&/$Primitive <tag> (&/|list elemT))) - -  Array "#Array" -  Atom  "#Atom" -  ) - -(do-template [<name> <tag>] -  (defn <name> [threadT elemT] -    (&/$Primitive <tag> (&/|list threadT elemT))) - -  Box  "#Box" -  ) +(defn Array [elemT] +  (&/$Primitive "#Array" (&/|list elemT)))  (def Nothing    (&/$Named (&/T ["lux" "Nothing"])  | 
