diff options
author | Eduardo Julian | 2015-03-20 23:52:07 -0400 |
---|---|---|
committer | Eduardo Julian | 2015-03-20 23:52:07 -0400 |
commit | 25be66a8a58b202284152d5a422d13fb81661abb (patch) | |
tree | d122524b87d875560064e463de9c45d26b923415 /src/lux/analyser/case.clj | |
parent | b2f4b64467d49904509fd5e87735536f846121b2 (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.clj | 25 |
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))))) |