From 46955edbe6cea9f367562b9fb17cef526109d9e0 Mon Sep 17 00:00:00 2001
From: Eduardo Julian
Date: Sat, 2 Dec 2017 01:10:12 -0400
Subject: - Added new "lux in-module" procedure for changing the module while
analysing an expression.
---
.../source/luxc/lang/analysis/procedure/common.lux | 28 ++++++++++++++++++----
1 file changed, 23 insertions(+), 5 deletions(-)
(limited to 'new-luxc/source/luxc/lang/analysis/procedure/common.lux')
diff --git a/new-luxc/source/luxc/lang/analysis/procedure/common.lux b/new-luxc/source/luxc/lang/analysis/procedure/common.lux
index b003edfa7..ecdcd0bfd 100644
--- a/new-luxc/source/luxc/lang/analysis/procedure/common.lux
+++ b/new-luxc/source/luxc/lang/analysis/procedure/common.lux
@@ -20,6 +20,7 @@
[".A" type]))))
(exception: #export Incorrect-Procedure-Arity)
+(exception: #export Invalid-Syntax)
## [Utils]
(type: #export Proc
@@ -80,7 +81,7 @@
## [Analysers]
## "lux is" represents reference/pointer equality.
-(def: (lux-is proc)
+(def: (lux//is proc)
(-> Text Proc)
(function [analyse eval args]
(do macro.Monad
@@ -90,7 +91,7 @@
## "lux try" provides a simple way to interact with the host platform's
## error-handling facilities.
-(def: (lux-try proc)
+(def: (lux//try proc)
(-> Text Proc)
(function [analyse eval args]
(case args
@@ -127,6 +128,22 @@
_
(&.throw Incorrect-Procedure-Arity (wrong-arity proc +2 (list.size args))))))
+(def: (lux//in-module proc)
+ (-> Text Proc)
+ (function [analyse eval argsC+]
+ (case argsC+
+ (^ (list [_ (#.Text module-name)] exprC))
+ (&.with-current-module module-name
+ (analyse exprC))
+
+ _
+ (&.throw Invalid-Syntax (format "Procedure: " proc "\n"
+ " Inputs:" (|> argsC+
+ list.enumerate
+ (list/map (function [[idx argC]]
+ (format "\n " (%n idx) " " (%code argC))))
+ (text.join-with "")) "\n")))))
+
(do-template [ ]
[(def: ( proc)
(-> Text Proc)
@@ -158,13 +175,14 @@
(def: lux-procs
Bundle
(|> (dict.new text.Hash)
- (install "is" lux-is)
- (install "try" lux-try)
+ (install "is" lux//is)
+ (install "try" lux//try)
(install "function" lux//function)
(install "case" lux//case)
(install "check" lux//check)
(install "coerce" lux//coerce)
- (install "check type" lux//check//type)))
+ (install "check type" lux//check//type)
+ (install "in-module" lux//in-module)))
(def: io-procs
Bundle
--
cgit v1.2.3