From 3439602c2b356eaef3359b6496a0237f1af55e33 Mon Sep 17 00:00:00 2001
From: Eduardo Julian
Date: Thu, 26 Oct 2017 21:41:41 -0400
Subject: - Added a new piece of compiler state, just for storing the
current-module.
---
new-luxc/source/luxc/base.lux | 15 ++++++++++++++-
new-luxc/source/luxc/generator.lux | 1 +
new-luxc/source/luxc/module.lux | 3 ++-
new-luxc/test/test/luxc/common.lux | 35 ++++-------------------------------
4 files changed, 21 insertions(+), 33 deletions(-)
(limited to 'new-luxc')
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
[_ (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])))
diff --git a/new-luxc/test/test/luxc/common.lux b/new-luxc/test/test/luxc/common.lux
index 2e725be5d..5b6fed8ec 100644
--- a/new-luxc/test/test/luxc/common.lux
+++ b/new-luxc/test/test/luxc/common.lux
@@ -1,36 +1,9 @@
(;module:
lux
- (lux (control pipe)
- ["r" math/random "r/" Monad]
- (data ["R" error])
- [meta]
- (meta [code])
- [io])
- (luxc ["&" base]
- [analyser]
- ["&;" host]))
-
-(def: init-info
- Info
- {#;target "JVM"
- #;version &;version
- #;mode #;Build})
-
-(def: init-type-context
- Type-Context
- {#;ex-counter +0
- #;var-counter +0
- #;var-bindings (list)})
+ (lux [io])
+ (luxc ["&;" host]
+ [";G" generator]))
(def: #export (init-compiler _)
(-> Top Compiler)
- {#;info init-info
- #;source [dummy-cursor +0 ""]
- #;cursor dummy-cursor
- #;modules (list)
- #;scopes (list)
- #;type-context init-type-context
- #;expected #;None
- #;seed +0
- #;scope-type-vars (list)
- #;host (:! Void (io;run &host;init-host))})
+ (generatorG;init-compiler (io;run &host;init-host)))
--
cgit v1.2.3