aboutsummaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/lux.lux42
1 files changed, 24 insertions, 18 deletions
diff --git a/source/lux.lux b/source/lux.lux
index 10abcb88a..07b245a5d 100644
--- a/source/lux.lux
+++ b/source/lux.lux
@@ -245,26 +245,31 @@
(_lux_export LuxVar)
## (deftype (Module Compiler)
-## (& #aliases (List (, Text Text))
-## #defs (List (, Text (, Bool (DefData' (-> (List Syntax) (StateE Compiler (List Syntax)))))))))
+## (& #module-aliases (List (, Text Text))
+## #defs (List (, Text (, Bool (DefData' (-> (List Syntax) (StateE Compiler (List Syntax)))))))
+## #imports (List Text)
+## ))
(_lux_def Module
(#AllT [(#Some #Nil) "lux;Module" "Compiler"
- (#RecordT (#Cons [["lux;aliases" (#AppT [List (#TupleT (#Cons [Text (#Cons [Text #Nil])]))])]
+ (#RecordT (#Cons [["lux;module-aliases" (#AppT [List (#TupleT (#Cons [Text (#Cons [Text #Nil])]))])]
(#Cons [["lux;defs" (#AppT [List (#TupleT (#Cons [Text
(#Cons [(#TupleT (#Cons [Bool (#Cons [(#AppT [DefData' (#LambdaT [SyntaxList
(#AppT [(#AppT [StateE (#BoundT "Compiler")])
SyntaxList])])])
#Nil])]))
#Nil])]))])]
- #Nil])]))]))
+ (#Cons [["lux;imports" (#AppT [List Text])]
+ #Nil])])]))]))
(_lux_export Module)
## (deftype #rec Compiler
-## (& #source Reader
-## #modules (List (, Text (Module Compiler)))
-## #envs (List (Env Text (, LuxVar Type)))
-## #types (Bindings Int Type)
-## #host HostState))
+## (& #source Reader
+## #modules (List (, Text (Module Compiler)))
+## #envs (List (Env Text (, LuxVar Type)))
+## #types (Bindings Int Type)
+## #host HostState
+## #seed Int
+## #seen-sources (List Text)))
(_lux_def Compiler
(#AppT [(#AllT [(#Some #Nil) "lux;Compiler" ""
(#RecordT (#Cons [["lux;source" Reader]
@@ -276,7 +281,8 @@
(#Cons [["lux;types" (#AppT [(#AppT [Bindings Int]) Type])]
(#Cons [["lux;host" HostState]
(#Cons [["lux;seed" Int]
- #Nil])])])])])]))])
+ (#Cons [["lux;seen-sources" (#AppT [List Text])]
+ #Nil])])])])])])]))])
Void]))
(_lux_export Compiler)
@@ -1302,7 +1308,7 @@
(_lux_case state
{#source source #modules modules
#envs envs #types types #host host
- #seed seed}
+ #seed seed #seen-sources seen-sources}
(_lux_case (reverse envs)
#Nil
(#Left "Can't get the module name without a module!")
@@ -1316,7 +1322,7 @@
($' Maybe Macro))
(do Maybe:Monad
[$module (get module modules)
- gdef (let [{#aliases _ #defs bindings} (_lux_: ($' Module Compiler) $module)]
+ gdef (let [{#module-aliases _ #defs bindings #imports _} (_lux_: ($' Module Compiler) $module)]
(get name bindings))]
(_lux_case (_lux_: (, Bool ($' DefData' Macro)) gdef)
[exported? (#MacroD macro')]
@@ -1341,7 +1347,7 @@
(_lux_case state
{#source source #modules modules
#envs envs #types types #host host
- #seed seed}
+ #seed seed #seen-sources seen-sources}
(#Right [state (find-macro' modules current-module module name)]))))))
(def'' (list:join xs)
@@ -1751,10 +1757,10 @@
(case state
{#source source #modules modules
#envs envs #types types #host host
- #seed seed}
+ #seed seed #seen-sources seen-sources}
(#Right [{#source source #modules modules
#envs envs #types types #host host
- #seed (inc seed)}
+ #seed (inc seed) #seen-sources seen-sources}
($symbol ["__gensym__" (int:show seed)])])))
(def #export (macro-expand-1 token)
@@ -1960,7 +1966,7 @@
(case state
{#source source #modules modules
#envs envs #types types #host host
- #seed seed}
+ #seed seed #seen-sources seen-sources}
(case (get "lux" modules)
(#Some lux)
(let [to-alias (map (: (-> (, Text (, Bool (DefData' (-> (List Syntax) (StateE Compiler (List Syntax))))))
@@ -1970,7 +1976,7 @@
(if export?
(list name)
(list)))))
- (let [{#aliases _ #defs defs} lux]
+ (let [{#module-aliases _ #defs defs #imports _} lux]
defs))]
(#Right [state (: (List Syntax)
(map (: (-> Text Syntax)
@@ -2055,7 +2061,7 @@
(case state
{#source source #modules modules
#envs envs #types types #host host
- #seed seed}
+ #seed seed #seen-sources seen-sources}
(let [?struct-type (some (: (-> (Env Text (, LuxVar Type)) (Maybe Type))
(lambda [env]
(case env