Hi Ali, I believe I encountered the same issue. And believe it is a bug in cljs compiler related to https://dev.clojure.org/jira/browse/CLJS-365.
https://github.com/binaryage/dirac/blob/5a373e11d5d03d7057769d170f2599117dbae4b0/src/automation/dirac/automation.clj#L27-L39 regards, Antonin On Tuesday, March 20, 2018 at 11:34:29 AM UTC+1, outr...@gmail.com wrote: > > Moe, > > Great news: replacing cond with case got rid of the issue in all the > cases I mentioned. Like you I can't explain it either but it's good to know > there is a workaround. Thank you! > > Cheers, > Ali > > > On Tuesday, March 20, 2018 at 3:25:03 PM UTC+5:30, Moe Aboulkheir wrote: >> >> Ali, >> >> I don't have any colour on the underlying cause of the problem, but I'd >> be interested to know whether you see it with 'case' as well as 'cond', as >> I vaguely remember running into something like this (in cljs, only). >> >> Take care, >> Moe >> >> On Tue, Mar 20, 2018 at 7:33 AM, <outr...@gmail.com> wrote: >> >>> Hello, >>> >>> I'm running into a very strange issue which, having searched the web, no >>> one seems to have reported. >>> >>> In short, I have a go block similar to the following (simplified for >>> posting purposes, however I can post the full code if required): >>> >>> (go >>> (while true >>> (let [[cmd event-args] (<! mouse-chan)]] >>> ... >>> (cond >>> (= cmd :down) >>> (let [ ... ] ...) >>> >>> (= cmd :in) >>> (let [ ... ] ...) >>> >>> (= cmd :hover) >>> (let [ ... ] ...) >>> >>> (= cmd :handle-down) >>> (let [ ... ] ...) >>> >>> >>> ) >>> )) >>> >>> >>> Essentially I have a number of mouse handlers (mousedown, mouseup, >>> mouseover, mouseout, ...) which put! a [cmd event-args] vector onto >>> mouse-chan, which is subsequently taken in the above block. >>> >>> Generally speaking, the block compiles successfully, however under >>> certain conditions it just "breaks", specifically by producing a: >>> >>> java.lang.StackOverflowError >>> >>> during compilation. >>> >>> At present I have 4 branches within the cond block. Within one of those >>> branches I have a loop/recur which takes (via <!) from the same channel as >>> in the outermost block. This works absolutely fine until I try one of the >>> following, which results in the above compilation error: >>> >>> * adding a fifth branch >>> >>> * with just the 4 branches in place, if I add even something as simple >>> as the following expression: >>> >>> (when major-in >>> (major-in event-args)) >>> >>> where major-in is either a function or nil >>> >>> * and the strangest thing of all, if I simply use *map deconstruction* >>> at one point in one of the cond branches, I also get the same compilation >>> error: >>> >>> (let [{:keys [x y w h]} (rect-ent-layout ghost-rect) >>> ;; Even this doesn't work if I uncomment it and comment out >>> the previous >>> ;; {} () >>> >>> ] ...) >>> >>> but doing the following, which doesn't involve deconstruction, is fine: >>> >>> (let [stuff (rect-ent-layout ghost-rect) >>> x (:x stuff) >>> y (:y stuff) >>> w (:w stuff) >>> h (:h stuff)] ...) >>> >>> In terms of limitations on core.async go blocks, I am only aware of the >>> functional boundary limitation, namely that you cannot create anonymous >>> functions within a go block which perform any puts/takes, asynchronous or >>> otherwise. Beyond that I can't find anything in the documentation which >>> would indicate that there are any other limitations. >>> >>> I am also aware that some macros do create functions, e.g. for, but I >>> am not using anything like that. >>> >>> I'm running a CLJS project with the following dependencies: >>> >>> [org.clojure/clojure "1.9.0-beta4"] >>> [org.clojure/clojurescript "1.9.946"] >>> [org.clojure/core.async "0.3.443"] >>> >>> I'm also using Reagent and developing using Figwheel. The Compilation >>> Error in fact is show in a Figwheel overlay. >>> >>> I have tried to isolate the issue but I can't seem to pinpoint what >>> exactly is causing it. >>> >>> Has anyone every come across something like this before when working >>> with core.async, specifically the java.lang.StackOverflowError >>> compilation error? If not, without posting the full code, can anyone >>> see anything with the above code which might cause such an issue? >>> >>> Thank you, >>> >>> Ali >>> >>> -- >>> Note that posts from new members are moderated - please be patient with >>> your first post. >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "ClojureScript" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to clojurescrip...@googlegroups.com. >>> To post to this group, send email to clojur...@googlegroups.com. >>> Visit this group at https://groups.google.com/group/clojurescript. >>> >> >> -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojurescript+unsubscr...@googlegroups.com. To post to this group, send email to clojurescript@googlegroups.com. Visit this group at https://groups.google.com/group/clojurescript.