From 651594c6b3dd291b0b3e058ec8c19dbed9b6b263 Mon Sep 17 00:00:00 2001 From: ztellman Date: Thu, 17 May 2018 15:51:37 -0700 Subject: [PATCH] make let-flow wait on all bound values, fix #118 --- src/manifold/deferred.clj | 2 ++ test/manifold/deferred_test.clj | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/manifold/deferred.clj b/src/manifold/deferred.clj index a667caaf..f384a438 100644 --- a/src/manifold/deferred.clj +++ b/src/manifold/deferred.clj @@ -1306,12 +1306,14 @@ (back-references marker form))) (range)))) binding-dep? (->> gensym->deps vals (apply concat) set) + body-dep? (->> `(let [~@(interleave vars' (repeat nil))] ~@body) (back-references marker) (map (zipmap vars' gensyms)) + (concat (drop (count vars) gensyms)) set) dep? (set/union binding-dep? body-dep?)] `(let [executor# (manifold.executor/executor)] diff --git a/test/manifold/deferred_test.clj b/test/manifold/deferred_test.clj index 4c97e205..c2401e3c 100644 --- a/test/manifold/deferred_test.clj +++ b/test/manifold/deferred_test.clj @@ -73,6 +73,15 @@ (d/catch ArithmeticException (constantly :foo)))))) (deftest test-let-flow + + (let [flag (atom false)] + @(let [z (clojure.core/future 1)] + (d/let-flow [x (d/future (clojure.core/future z)) + _ (d/future (Thread/sleep 1000) (reset! flag true)) + y (d/future (+ z x))] + (d/future (+ x x y z)))) + (is (= true @flag))) + (is (= 5 @(let [z (clojure.core/future 1)] (d/let-flow [x (d/future (clojure.core/future z))