aboutsummaryrefslogtreecommitdiff
path: root/src/lux/analyser/case.clj
diff options
context:
space:
mode:
authorEduardo Julian2015-03-20 23:52:07 -0400
committerEduardo Julian2015-03-20 23:52:07 -0400
commit25be66a8a58b202284152d5a422d13fb81661abb (patch)
treed122524b87d875560064e463de9c45d26b923415 /src/lux/analyser/case.clj
parentb2f4b64467d49904509fd5e87735536f846121b2 (diff)
[2nd Super Refactoring That Breaks The System: Part 6]
- Corrected more bugs in the system.
Diffstat (limited to 'src/lux/analyser/case.clj')
-rw-r--r--src/lux/analyser/case.clj25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/lux/analyser/case.clj b/src/lux/analyser/case.clj
index 1574218c3..93036daa6 100644
--- a/src/lux/analyser/case.clj
+++ b/src/lux/analyser/case.clj
@@ -1,7 +1,7 @@
(ns lux.analyser.case
(:require [clojure.core.match :as M :refer [match matchv]]
clojure.core.match.array
- (lux [base :as & :refer [exec return fail]]
+ (lux [base :as & :refer [exec return fail |let]]
[parser :as &parser]
[type :as &type])
(lux.analyser [base :as &&]
@@ -22,14 +22,15 @@
[_]
(&/|list)))
-(defn analyse-branch [analyse max-registers [bindings body]]
- ;; (prn 'analyse-branch max-registers bindings body)
- (reduce (fn [body* name]
- (&&/with-var
- (fn [=var]
- (&env/with-local name =var body*))))
- (reduce (fn [body* _]
- (&env/with-local "" &type/+dont-care+ body*))
- (&&/analyse-1 analyse body)
- (range (- max-registers (count bindings))))
- (reverse bindings)))
+(defn analyse-branch [analyse max-registers bindings+body]
+ (|let [[bindings body] bindings+body]
+ (do (prn 'analyse-branch max-registers (&/|length bindings) body)
+ (&/fold (fn [body* name]
+ (&&/with-var
+ (fn [=var]
+ (&env/with-local name =var body*))))
+ (&/fold (fn [body* _]
+ (&env/with-local "" &type/+dont-care+ body*))
+ (&&/analyse-1 analyse body)
+ (&/|range (- max-registers (&/|length bindings))))
+ (&/|reverse bindings)))))