aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool/compiler/phase/directive.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase/directive.lux')
-rw-r--r--stdlib/source/lux/tool/compiler/phase/directive.lux30
1 files changed, 13 insertions, 17 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/directive.lux b/stdlib/source/lux/tool/compiler/phase/directive.lux
index f79f2b586..dc4115610 100644
--- a/stdlib/source/lux/tool/compiler/phase/directive.lux
+++ b/stdlib/source/lux/tool/compiler/phase/directive.lux
@@ -36,12 +36,10 @@
(def: #export (phase expander)
(-> Expander Phase)
(let [analyze (analysisP.phase expander)]
- (function (compile code)
+ (function (recur code)
(case code
(^ [_ (#.Form (list& [_ (#.Text name)] inputs))])
- (do //.monad
- [requirements (//extension.apply compile [name inputs])]
- (wrap requirements))
+ (//extension.apply recur [name inputs])
(^ [_ (#.Form (list& macro inputs))])
(do //.monad
@@ -58,22 +56,20 @@
(wrap macro)
#.None
- (//.throw macro-was-not-found macro-name))]
+ (//.throw ..macro-was-not-found macro-name))]
(//extension.lift (//macro.expand expander macro-name macro inputs)))
_
- (//.throw invalid-macro-call code))))
- requirements (case expansion
- (^ (list& <lux_def_module> referrals))
- (do @
- [requirements (compile <lux_def_module>)]
- (wrap (update@ #/.referrals (list;compose referrals) requirements)))
+ (//.throw ..invalid-macro-call code))))]
+ (case expansion
+ (^ (list& <lux_def_module> referrals))
+ (|> (recur <lux_def_module>)
+ (:: @ map (update@ #/.referrals (list;compose referrals))))
- _
- (|> expansion
- (monad.map @ compile)
- (:: @ map (list;fold /.merge-requirements /.no-requirements))))]
- (wrap requirements))
+ _
+ (|> expansion
+ (monad.map @ recur)
+ (:: @ map (list;fold /.merge-requirements /.no-requirements)))))
_
- (//.throw not-a-directive code))))))
+ (//.throw ..not-a-directive code))))))