aboutsummaryrefslogtreecommitdiff
path: root/lux-bootstrapper/src
diff options
context:
space:
mode:
Diffstat (limited to 'lux-bootstrapper/src')
-rw-r--r--lux-bootstrapper/src/lux/analyser/base.clj2
-rw-r--r--lux-bootstrapper/src/lux/base.clj5
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm.clj4
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm/base.clj8
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm/case.clj16
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm/lux.clj13
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm/proc/common.clj13
-rw-r--r--lux-bootstrapper/src/lux/compiler/jvm/rt.clj28
-rw-r--r--lux-bootstrapper/src/lux/host.clj13
-rw-r--r--lux-bootstrapper/src/lux/repl.clj2
-rw-r--r--lux-bootstrapper/src/lux/type.clj42
-rw-r--r--lux-bootstrapper/src/lux/type/host.clj2
12 files changed, 87 insertions, 61 deletions
diff --git a/lux-bootstrapper/src/lux/analyser/base.clj b/lux-bootstrapper/src/lux/analyser/base.clj
index d6787280f..e5f47f977 100644
--- a/lux-bootstrapper/src/lux/analyser/base.clj
+++ b/lux-bootstrapper/src/lux/analyser/base.clj
@@ -77,7 +77,7 @@
(let [tag-names #{"Primitive" "Sum" "Product" "Function" "Parameter" "Var" "Ex" "UnivQ" "ExQ" "Apply" "Named"}]
(defn type-tag? [module name]
- (and (= "lux" module)
+ (and (= &/prelude module)
(contains? tag-names name))))
(defn |meta [type location analysis]
diff --git a/lux-bootstrapper/src/lux/base.clj b/lux-bootstrapper/src/lux/base.clj
index 5ef710a03..648b3341c 100644
--- a/lux-bootstrapper/src/lux/base.clj
+++ b/lux-bootstrapper/src/lux/base.clj
@@ -5,7 +5,7 @@
clojure.core.match.array))
(def prelude
- "lux")
+ "library/lux")
(def !log! (atom false))
(defn flag-prn! [& args]
@@ -13,7 +13,8 @@
(apply prn args)))
;; [Tags]
-(def unit-tag (.intern ""))
+(def unit-tag
+ (.intern ""))
(defn T [elems]
(case (count elems)
diff --git a/lux-bootstrapper/src/lux/compiler/jvm.clj b/lux-bootstrapper/src/lux/compiler/jvm.clj
index bacf2cb9c..e2521fec7 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm.clj
@@ -188,7 +188,7 @@
(.visit &host/bytecode-version (+ Opcodes/ACC_PUBLIC Opcodes/ACC_SUPER)
module-class-name nil "java/lang/Object" nil)
(.visitSource file-name nil))]
- _ (if (= "lux" name)
+ _ (if (= &/prelude name)
(|do [_ &&rt/compile-Function-class
_ &&rt/compile-LuxRT-class]
(return nil))
@@ -242,7 +242,7 @@
&&jvm-cache/load-def-value
&&jvm-cache/install-all-defs-in-module
&&jvm-cache/uninstall-all-defs-in-module)
- _ (compile-module source-dirs "lux")]
+ _ (compile-module source-dirs &/prelude)]
(compile-module source-dirs program-module))]
(|case (m-action (&/init-state "{old}" mode (jvm-host)))
(&/$Right ?state _)
diff --git a/lux-bootstrapper/src/lux/compiler/jvm/base.clj b/lux-bootstrapper/src/lux/compiler/jvm/base.clj
index b5e520de5..47566a626 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm/base.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm/base.clj
@@ -21,8 +21,12 @@
(java.lang.reflect Field)))
;; [Constants]
-(def ^:const ^String function-class "lux/Function")
-(def ^:const ^String lux-utils-class "lux/LuxRT")
+(def ^:const ^String function-class
+ (&host/internal &host/function-class))
+
+(def ^:const ^String lux-utils-class
+ (&host/internal &host/lux-utils-class))
+
(def ^:const ^String unit-tag-field "unit_tag")
;; Formats
diff --git a/lux-bootstrapper/src/lux/compiler/jvm/case.clj b/lux-bootstrapper/src/lux/compiler/jvm/case.clj
index b7cdb7571..8a41db0b3 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm/case.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm/case.clj
@@ -114,21 +114,21 @@
#(doto ^MethodVisitor %
(.visitInsn Opcodes/AALOAD))
#(doto ^MethodVisitor %
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "tuple_left" "([Ljava/lang/Object;I)Ljava/lang/Object;")))]
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "tuple_left" "([Ljava/lang/Object;I)Ljava/lang/Object;")))]
(doto writer
stack-peek
(.visitTypeInsn Opcodes/CHECKCAST "[Ljava/lang/Object;")
(.visitLdcInsn (int lefts))
accessI
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")))
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")))
(&o/$TuplePM (&/$Right _idx))
(doto writer
stack-peek
(.visitTypeInsn Opcodes/CHECKCAST "[Ljava/lang/Object;")
(.visitLdcInsn (int (dec _idx)))
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "tuple_right" "([Ljava/lang/Object;I)Ljava/lang/Object;")
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;"))
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "tuple_right" "([Ljava/lang/Object;I)Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;"))
(&o/$VariantPM _idx+)
(|let [$success (new Label)
@@ -147,7 +147,7 @@
(.visitLdcInsn writer "")
(.visitInsn writer Opcodes/ACONST_NULL))]
(doto writer
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_get" "([Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "sum_get" "([Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;")
(.visitInsn Opcodes/DUP)
(.visitJumpInsn Opcodes/IFNULL $fail)
(.visitJumpInsn Opcodes/GOTO $success)
@@ -155,7 +155,7 @@
(.visitInsn Opcodes/POP)
(.visitJumpInsn Opcodes/GOTO $else)
(.visitLabel $success)
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")))
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")))
(&o/$SeqPM _left-pm _right-pm)
(doto writer
@@ -178,7 +178,7 @@
(compile-pattern* bodies 1 $else pm)
(.visitLabel $else)
(.visitInsn Opcodes/POP)
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "pm_fail" "()V")
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "pm_fail" "()V")
(.visitInsn Opcodes/ACONST_NULL)
(.visitJumpInsn Opcodes/GOTO $end))))
@@ -200,7 +200,7 @@
(.visitInsn Opcodes/ACONST_NULL))]
_ (compile ?value)
:let [_ (doto *writer*
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;"))
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "pm_stack_push" "([Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;"))
_ (compile-pattern *writer* bodies-labels ?pm $end)]
_ (compile-bodies *writer* compile bodies-labels ?bodies $end)
:let [_ (.visitLabel *writer* $end)]]
diff --git a/lux-bootstrapper/src/lux/compiler/jvm/lux.clj b/lux-bootstrapper/src/lux/compiler/jvm/lux.clj
index 515bd8db5..f5fa88e02 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm/lux.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm/lux.clj
@@ -15,7 +15,8 @@
(lux.analyser [base :as &a]
[module :as &a-module])
(lux.compiler.jvm [base :as &&]
- [function :as &&function]))
+ [function :as &&function]
+ [rt :as &rt]))
(:import (org.objectweb.asm Opcodes
Label
ClassWriter
@@ -79,7 +80,7 @@
(.visitLdcInsn *writer* "")
(.visitInsn *writer* Opcodes/ACONST_NULL))]
_ (compile value)
- :let [_ (.visitMethodInsn *writer* Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")]]
+ :let [_ (.visitMethodInsn *writer* Opcodes/INVOKESTATIC &rt/rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")]]
(return nil)))
(defn compile-local [compile ?idx]
@@ -120,7 +121,7 @@
class-loader &/loader
:let [func-class (class func-obj)
func-arity (.get ^Field (.getDeclaredField func-class &&/arity-field) nil)
- func-partials (.get ^Field (.getDeclaredField (Class/forName "lux.Function" true class-loader) &&/partials-field) func-obj)
+ func-partials (.get ^Field (.getDeclaredField (Class/forName &host/function-class true class-loader) &&/partials-field) func-obj)
num-args (&/|length ?args)
func-class-name (->> func-class .getName &host-generics/->bytecode-class-name)]]
(if (and (= 0 func-partials)
@@ -208,7 +209,7 @@
(.visitLdcInsn (int (if tail?
(dec idx)
idx)))
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT"
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class
(if tail? "tuple_right" "tuple_left")
"([Ljava/lang/Object;I)Ljava/lang/Object;"))))
_path)]]
@@ -339,7 +340,7 @@
(.visitLdcInsn (->> #'&/$Nil meta ::&/idx int)) ;; I
(.visitInsn Opcodes/ACONST_NULL) ;; I?
(.visitLdcInsn &/unit-tag) ;; I?U
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;") ;; V
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;") ;; V
;; Tail: End
;; Size: Begin
(.visitVarInsn Opcodes/ALOAD 0) ;; VA
@@ -379,7 +380,7 @@
(.visitLdcInsn "") ;; I2I?
(.visitInsn Opcodes/DUP2_X1) ;; II?2I?
(.visitInsn Opcodes/POP2) ;; II?2
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;") ;; IV
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;") ;; IV
;; Cons: End
(.visitInsn Opcodes/SWAP) ;; VI
(.visitJumpInsn Opcodes/GOTO $loop)
diff --git a/lux-bootstrapper/src/lux/compiler/jvm/proc/common.clj b/lux-bootstrapper/src/lux/compiler/jvm/proc/common.clj
index f21557e88..cd1b77dee 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm/proc/common.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm/proc/common.clj
@@ -14,7 +14,8 @@
[lux.type.host :as &host-type]
[lux.host.generics :as &host-generics]
[lux.analyser.base :as &a]
- [lux.compiler.jvm.base :as &&])
+ (lux.compiler.jvm [base :as &&]
+ [rt :as &rt]))
(:import (org.objectweb.asm Opcodes
Label
ClassWriter
@@ -81,8 +82,8 @@
^MethodVisitor *writer* &/get-writer
_ (compile ?op)
:let [_ (doto *writer*
- (.visitTypeInsn Opcodes/CHECKCAST "lux/Function")
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "runTry" "(Llux/Function;)[Ljava/lang/Object;"))]]
+ (.visitTypeInsn Opcodes/CHECKCAST &rt/function-class)
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "runTry" (str "(L" &rt/function-class ";)[Ljava/lang/Object;")))]]
(return nil)))
(do-template [<name> <opcode> <unwrap> <wrap>]
@@ -160,7 +161,7 @@
_ (compile ?input)
:let [_ (doto *writer*
(.visitTypeInsn Opcodes/CHECKCAST "java/lang/String")
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "decode_frac" "(Ljava/lang/String;)[Ljava/lang/Object;"))]]
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "decode_frac" "(Ljava/lang/String;)[Ljava/lang/Object;"))]]
(return nil)))
(defn ^:private compile-int-char [compile ?values special-args]
@@ -276,11 +277,11 @@
(.visitJumpInsn Opcodes/IF_ICMPEQ $not-found)
(.visitInsn Opcodes/I2L)
&&/wrap-long
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "make_some" "(Ljava/lang/Object;)[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "make_some" "(Ljava/lang/Object;)[Ljava/lang/Object;")
(.visitJumpInsn Opcodes/GOTO $end)
(.visitLabel $not-found)
(.visitInsn Opcodes/POP)
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "make_none" "()[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC &rt/rt-class "make_none" "()[Ljava/lang/Object;")
(.visitLabel $end))]]
(return nil)))
diff --git a/lux-bootstrapper/src/lux/compiler/jvm/rt.clj b/lux-bootstrapper/src/lux/compiler/jvm/rt.clj
index 7fabd27ed..73812ef8f 100644
--- a/lux-bootstrapper/src/lux/compiler/jvm/rt.clj
+++ b/lux-bootstrapper/src/lux/compiler/jvm/rt.clj
@@ -21,6 +21,12 @@
MethodVisitor
AnnotationVisitor)))
+(def ^:const ^String rt-class
+ &&/lux-utils-class)
+
+(def ^:const ^String function-class
+ &&/function-class)
+
;; [Utils]
(def init-method "<init>")
@@ -63,7 +69,7 @@
(.visitInsn Opcodes/ARETURN)
(.visitMaxs 0 0)
(.visitEnd)))))]]
- (&&/save-class! (second (string/split &&/function-class #"/"))
+ (&&/save-class! (-> &&/function-class (string/split #"/") (nth 2))
(.toByteArray (doto =class .visitEnd)))))
(defmacro <bytecode> [& instructions]
@@ -170,7 +176,7 @@
super-nested (<bytecode> super-nested-tag ;; super-tag
!variant <>last? ;; super-tag, super-last
!variant <>value ;; super-tag, super-last, super-value
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;"))
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;"))
update-!variant (<bytecode> !variant <>value
(.visitTypeInsn Opcodes/CHECKCAST "[Ljava/lang/Object;")
@@ -249,11 +255,11 @@
(.visitVarInsn Opcodes/ALOAD 0)
(.visitMethodInsn Opcodes/INVOKESTATIC <class> <parse-method> <signature>)
<wrapper>
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "make_some" "(Ljava/lang/Object;)[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "make_some" "(Ljava/lang/Object;)[Ljava/lang/Object;")
(.visitInsn Opcodes/ARETURN)
(.visitLabel $to)
(.visitLabel $handler)
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "make_none" "()[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "make_none" "()[Ljava/lang/Object;")
(.visitInsn Opcodes/ARETURN)
(.visitMaxs 0 0)
(.visitEnd)))
@@ -335,7 +341,7 @@
(.visitLdcInsn (->> #'&/$None meta ::&/idx int)) ;; I
(.visitInsn Opcodes/ACONST_NULL) ;; I?
(.visitLdcInsn &/unit-tag) ;; I?U
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")
(.visitInsn Opcodes/ARETURN)
(.visitMaxs 0 0)
(.visitEnd))
@@ -344,7 +350,7 @@
(.visitLdcInsn (->> #'&/$Some meta ::&/idx int)) ;; I
(.visitLdcInsn "") ;; I?
(.visitVarInsn Opcodes/ALOAD 0) ;; I?O
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")
(.visitInsn Opcodes/ARETURN)
(.visitMaxs 0 0)
(.visitEnd))
@@ -377,14 +383,14 @@
(.visitMethodInsn Opcodes/INVOKESPECIAL "java/io/PrintWriter" "<init>" "(Ljava/io/Writer;Z)V")
;; P
))]
- (doto (.visitMethod =class (+ Opcodes/ACC_PUBLIC Opcodes/ACC_STATIC) "runTry" "(Llux/Function;)[Ljava/lang/Object;" nil nil)
+ (doto (.visitMethod =class (+ Opcodes/ACC_PUBLIC Opcodes/ACC_STATIC) "runTry" (str "(L" function-class ";)[Ljava/lang/Object;") nil nil)
(.visitCode)
(.visitTryCatchBlock $from $to $handler "java/lang/Throwable")
(.visitLabel $from)
(.visitVarInsn Opcodes/ALOAD 0)
(.visitInsn Opcodes/ACONST_NULL)
- (.visitMethodInsn Opcodes/INVOKEVIRTUAL "lux/Function" &&/apply-method (&&/apply-signature 1))
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "make_some" "(Ljava/lang/Object;)[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKEVIRTUAL function-class &&/apply-method (&&/apply-signature 1))
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "make_some" "(Ljava/lang/Object;)[Ljava/lang/Object;")
(.visitInsn Opcodes/ARETURN)
(.visitLabel $to)
(.visitLabel $handler) ;; T
@@ -397,7 +403,7 @@
(.visitLdcInsn (->> #'&/$Left meta ::&/idx int)) ;; SI
(.visitInsn Opcodes/ACONST_NULL) ;; SI?
swap2x1 ;; I?S
- (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")
+ (.visitMethodInsn Opcodes/INVOKESTATIC rt-class "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;")
(.visitInsn Opcodes/ARETURN)
(.visitMaxs 0 0)
(.visitEnd)))
@@ -406,5 +412,5 @@
(compile-LuxRT-adt-methods)
(compile-LuxRT-int-methods)
(compile-LuxRT-frac-methods))]]
- (&&/save-class! (second (string/split &&/lux-utils-class #"/"))
+ (&&/save-class! (-> &&/lux-utils-class (string/split #"/") (nth 2))
(.toByteArray (doto =class .visitEnd)))))
diff --git a/lux-bootstrapper/src/lux/host.clj b/lux-bootstrapper/src/lux/host.clj
index 4da818db2..eb1bcb41c 100644
--- a/lux-bootstrapper/src/lux/host.clj
+++ b/lux-bootstrapper/src/lux/host.clj
@@ -15,12 +15,23 @@
MethodVisitor)))
;; [Constants]
-(def function-class "lux.Function")
(def module-separator "/")
(def class-name-separator ".")
(def class-separator "/")
(def bytecode-version Opcodes/V1_6)
+(defn ^String external [^String internal]
+ (.replace internal class-separator class-name-separator))
+
+(defn ^String internal [^String external]
+ (.replace external class-name-separator class-separator))
+
+(def ^:const ^String function-class
+ (str (external &/prelude) class-name-separator "Function"))
+
+(def ^:const ^String lux-utils-class
+ (str (external &/prelude) class-name-separator "LuxRT"))
+
;; [Resources]
(defn ^String ->module-class [old]
old)
diff --git a/lux-bootstrapper/src/lux/repl.clj b/lux-bootstrapper/src/lux/repl.clj
index d980ac9ec..ff5c108c5 100644
--- a/lux-bootstrapper/src/lux/repl.clj
+++ b/lux-bootstrapper/src/lux/repl.clj
@@ -21,7 +21,7 @@
(defn ^:private init [source-dirs]
(do (&compiler/init!)
- (|case ((|do [_ (&compiler/compile-module source-dirs "lux")
+ (|case ((|do [_ (&compiler/compile-module source-dirs &/prelude)
_ (&cache/delete repl-module)
_ (&module/create-module repl-module 0)
_ (fn [?state]
diff --git a/lux-bootstrapper/src/lux/type.clj b/lux-bootstrapper/src/lux/type.clj
index 8853224b5..267b6d67b 100644
--- a/lux-bootstrapper/src/lux/type.clj
+++ b/lux-bootstrapper/src/lux/type.clj
@@ -25,41 +25,43 @@
(def empty-env &/$Nil)
-(def I64 (&/$Named (&/T ["lux" "I64"])
+(def I64 (&/$Named (&/T [&/prelude "I64"])
(&/$UnivQ empty-env
(&/$Primitive "#I64" (&/|list (&/$Parameter 1))))))
(def Nat* (&/$Primitive &&host/nat-data-tag &/$Nil))
(def Rev* (&/$Primitive &&host/rev-data-tag &/$Nil))
(def Int* (&/$Primitive &&host/int-data-tag &/$Nil))
-(def Bit (&/$Named (&/T ["lux" "Bit"]) (&/$Primitive "#Bit" &/$Nil)))
-(def Nat (&/$Named (&/T ["lux" "Nat"]) (&/$Apply Nat* I64)))
-(def Rev (&/$Named (&/T ["lux" "Rev"]) (&/$Apply Rev* I64)))
-(def Int (&/$Named (&/T ["lux" "Int"]) (&/$Apply Int* I64)))
-(def Frac (&/$Named (&/T ["lux" "Frac"]) (&/$Primitive "#Frac" &/$Nil)))
-(def Text (&/$Named (&/T ["lux" "Text"]) (&/$Primitive "#Text" &/$Nil)))
-(def Ident (&/$Named (&/T ["lux" "Ident"]) (&/$Product Text Text)))
+(def Bit (&/$Named (&/T [&/prelude "Bit"]) (&/$Primitive "#Bit" &/$Nil)))
+(def Nat (&/$Named (&/T [&/prelude "Nat"]) (&/$Apply Nat* I64)))
+(def Rev (&/$Named (&/T [&/prelude "Rev"]) (&/$Apply Rev* I64)))
+(def Int (&/$Named (&/T [&/prelude "Int"]) (&/$Apply Int* I64)))
+(def Frac (&/$Named (&/T [&/prelude "Frac"]) (&/$Primitive "#Frac" &/$Nil)))
+(def Text (&/$Named (&/T [&/prelude "Text"]) (&/$Primitive "#Text" &/$Nil)))
+(def Ident (&/$Named (&/T [&/prelude "Ident"]) (&/$Product Text Text)))
(defn Array [elemT]
(&/$Primitive "#Array" (&/|list elemT)))
(def Nothing
- (&/$Named (&/T ["lux" "Nothing"])
+ (&/$Named (&/T [&/prelude "Nothing"])
(&/$UnivQ empty-env
(&/$Parameter 1))))
(def Any
- (&/$Named (&/T ["lux" "Any"])
+ (&/$Named (&/T [&/prelude "Any"])
(&/$ExQ empty-env
(&/$Parameter 1))))
(def IO
- (&/$Named (&/T ["lux/control/io" "IO"])
+ (&/$Named (&/T [(str &/prelude "/control/io") "IO"])
(&/$UnivQ empty-env
- (&/$Primitive "lux/type/abstract.Abstraction lux/control/io.IO" (&/|list (&/$Parameter 1))))))
+ (&/$Primitive (str &/prelude "/type/abstract.Abstraction "
+ &/prelude "/control/io.IO")
+ (&/|list (&/$Parameter 1))))))
(def List
- (&/$Named (&/T ["lux" "List"])
+ (&/$Named (&/T [&/prelude "List"])
(&/$UnivQ empty-env
(&/$Sum
;; lux;Nil
@@ -70,7 +72,7 @@
(&/$Parameter 0)))))))
(def Maybe
- (&/$Named (&/T ["lux" "Maybe"])
+ (&/$Named (&/T [&/prelude "Maybe"])
(&/$UnivQ empty-env
(&/$Sum
;; lux;None
@@ -80,7 +82,7 @@
)))
(def Type
- (&/$Named (&/T ["lux" "Type"])
+ (&/$Named (&/T [&/prelude "Type"])
(let [Type (&/$Apply (&/$Parameter 1) (&/$Parameter 0))
TypeList (&/$Apply Type List)
TypePair (&/$Product Type Type)]
@@ -121,18 +123,18 @@
)))))
(def Location
- (&/$Named (&/T ["lux" "Location"])
+ (&/$Named (&/T [&/prelude "Location"])
(&/$Product Text (&/$Product Nat Nat))))
(def Meta
- (&/$Named (&/T ["lux" "Meta"])
+ (&/$Named (&/T [&/prelude "Meta"])
(&/$UnivQ empty-env
(&/$UnivQ empty-env
(&/$Product (&/$Parameter 3)
(&/$Parameter 1))))))
(def Code*
- (&/$Named (&/T ["lux" "Code'"])
+ (&/$Named (&/T [&/prelude "Code'"])
(let [Code (&/$Apply (&/$Apply (&/$Parameter 1)
(&/$Parameter 0))
(&/$Parameter 1))
@@ -164,12 +166,12 @@
))))
(def Code
- (&/$Named (&/T ["lux" "Code"])
+ (&/$Named (&/T [&/prelude "Code"])
(let [w (&/$Apply Location Meta)]
(&/$Apply (&/$Apply w Code*) w))))
(def Macro
- (&/$Named (&/T ["lux" "Macro"])
+ (&/$Named (&/T [&/prelude "Macro"])
(&/$Primitive "#Macro" &/$Nil)))
(defn bound? [id]
diff --git a/lux-bootstrapper/src/lux/type/host.clj b/lux-bootstrapper/src/lux/type/host.clj
index 36e969046..dbf780a84 100644
--- a/lux-bootstrapper/src/lux/type/host.clj
+++ b/lux-bootstrapper/src/lux/type/host.clj
@@ -59,7 +59,7 @@
output)))
(def ^:private Any
- (&/$Named (&/T ["lux" "Any"])
+ (&/$Named (&/T [&/prelude "Any"])
(&/$ExQ (&/|list)
(&/$Parameter 1))))