aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc
diff options
context:
space:
mode:
authorEduardo Julian2017-10-26 21:41:41 -0400
committerEduardo Julian2017-10-26 21:41:41 -0400
commit3439602c2b356eaef3359b6496a0237f1af55e33 (patch)
tree90c3c1d0f97fc30b1a991de50977d8a075564724 /new-luxc/source/luxc
parente2621632653ad1252744eecff6da143faaf90787 (diff)
- Added a new piece of compiler state, just for storing the current-module.
Diffstat (limited to 'new-luxc/source/luxc')
-rw-r--r--new-luxc/source/luxc/base.lux15
-rw-r--r--new-luxc/source/luxc/generator.lux1
-rw-r--r--new-luxc/source/luxc/module.lux3
3 files changed, 17 insertions, 2 deletions
diff --git a/new-luxc/source/luxc/base.lux b/new-luxc/source/luxc/base.lux
index 28b5437e9..bac16fd79 100644
--- a/new-luxc/source/luxc/base.lux
+++ b/new-luxc/source/luxc/base.lux
@@ -145,7 +145,7 @@
(def: fresh-scope
Scope
- {#;name (list "lux")
+ {#;name (list)
#;inner +0
#;locals fresh-bindings
#;captured fresh-bindings})
@@ -166,6 +166,19 @@
(#e;Error error)
(#e;Error error))))
+(def: #export (with-current-module name action)
+ (All [a] (-> Text (Meta a) (Meta a)))
+ (function [compiler]
+ (case (action (set@ #;current-module (#;Some name) compiler))
+ (#e;Success [compiler' output])
+ (#e;Success [(set@ #;current-module
+ (get@ #;current-module compiler)
+ compiler')
+ output])
+
+ (#e;Error error)
+ (#e;Error error))))
+
(def: #export (with-cursor cursor action)
(All [a] (-> Cursor (Meta a) (Meta a)))
(if (text/= "" (product;left cursor))
diff --git a/new-luxc/source/luxc/generator.lux b/new-luxc/source/luxc/generator.lux
index f64ca333e..4ac937402 100644
--- a/new-luxc/source/luxc/generator.lux
+++ b/new-luxc/source/luxc/generator.lux
@@ -158,6 +158,7 @@
{#;info init-info
#;source [init-cursor +0 ""]
#;cursor init-cursor
+ #;current-module #;None
#;modules (list)
#;scopes (list)
#;type-context init-type-context
diff --git a/new-luxc/source/luxc/module.lux b/new-luxc/source/luxc/module.lux
index 39d3679e6..2bb7eedcd 100644
--- a/new-luxc/source/luxc/module.lux
+++ b/new-luxc/source/luxc/module.lux
@@ -56,7 +56,8 @@
(All [a] (-> Nat Text (Meta a) (Meta [Module a])))
(do Monad<Meta>
[_ (create hash name)
- output (&scope;with-scope name action)
+ output (&;with-current-module name
+ (&scope;with-scope name action))
module (meta;find-module name)]
(wrap [module output])))