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.

Reply via email to