aboutsummaryrefslogtreecommitdiff
path: root/lux-bootstrapper/src/lux/compiler/jvm
diff options
context:
space:
mode:
authorEduardo Julian2021-08-29 14:57:15 -0400
committerEduardo Julian2021-08-29 14:57:15 -0400
commit1680d4d8bc4046ed4728413f1e7cfd77aa7e84b7 (patch)
tree7e79997206c0102e4cd63f34e4da2a4336df52f4 /lux-bootstrapper/src/lux/compiler/jvm
parentc5b61d2f46ac19bf511197f3a537c4be0f47df33 (diff)
Made labels (tags & slots) into a form of global binding.
Diffstat (limited to 'lux-bootstrapper/src/lux/compiler/jvm')
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm/lux.clj15
1 files changed, 10 insertions, 5 deletions
diff --git a/lux-bootstrapper/src/lux/compiler/jvm/lux.clj b/lux-bootstrapper/src/lux/compiler/jvm/lux.clj
index 973d0e8c6..a93c87ae8 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm/lux.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm/lux.clj
@@ -250,7 +250,7 @@
(str base "\n\n" "Caused by: " (throwable->text cause))
base)))
-(defn ^:private install-def! [class-loader current-class module-name ?name ?body ?meta exported?]
+(defn ^:private install-def! [class-loader current-class module-name ?name ?body ?meta exported? type?]
(|do [_ (return nil)
:let [def-class (&&/load-class! class-loader (&host-generics/->class-name current-class))
def-type (&a/expr-type* ?body)]
@@ -260,12 +260,17 @@
(str "Error during value initialization:\n"
(throwable->text t)))))
_ (&/without-repl-closure
- (&a-module/define module-name ?name exported? def-type ?meta def-value))]
+ (|case type?
+ (&/$Some [record? labels])
+ (&a-module/define-type module-name ?name exported? ?meta def-value record? labels)
+
+ (&/$None)
+ (&a-module/define module-name ?name exported? def-type ?meta def-value)))]
(return def-value)))
(let [class-flags (+ Opcodes/ACC_PUBLIC Opcodes/ACC_FINAL Opcodes/ACC_SUPER)
field-flags (+ Opcodes/ACC_PUBLIC Opcodes/ACC_FINAL Opcodes/ACC_STATIC)]
- (defn compile-def [compile ?name ?body ?meta exported?]
+ (defn compile-def [compile ?name ?body ?meta exported? type?]
(|do [module-name &/get-module-name
class-loader &/loader]
(|case (de-ann ?body)
@@ -296,7 +301,7 @@
(return nil)))
:let [_ (.visitEnd =class)]
_ (&&/save-class! def-name (.toByteArray =class))
- def-value (install-def! class-loader current-class module-name ?name ?body ?meta exported?)]
+ def-value (install-def! class-loader current-class module-name ?name ?body ?meta exported? type?)]
(return def-value)))
_
@@ -322,7 +327,7 @@
(return nil)))
:let [_ (.visitEnd =class)]
_ (&&/save-class! def-name (.toByteArray =class))
- def-value (install-def! class-loader current-class module-name ?name ?body ?meta exported?)]
+ def-value (install-def! class-loader current-class module-name ?name ?body ?meta exported? type?)]
(return def-value))))))
(defn compile-program [compile ?program]