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 <javascript:>> 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 <javascript:>. >> To post to this group, send email to clojur...@googlegroups.com >> <javascript:>. >> 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.