(case-let) is a macro to handle messages of the form [:message-tag, arg1, arg2, ...] with the arguments bound to local variables. It fails to work correctly when used within a go block. Note that a simple macro with a case, e.g. (defmacro my-case [expr & cases] `(case ~expr ~@cases)) does work.
(Sample project attached)
(case-let) definition:
ClojureScript test code:
Browser console output:
[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-2234"]
[org.clojure/core.async "0.1.303.0-886421-alpha"]
Comment made by: tslocke
More discussion here: https://groups.google.com/forum/#!topic/clojurescript/w21nNWkKR-c
Comment made by: tslocke
I've discovered an easy workaround for this problem. During macro-expansion core names like case become fully qualified, i.e. cljs.core/case, and it seems that the go macro then fails to recognise the case as such. Replacing case with ~'case in the definition of let-case fixes the problem.
I would hope this leads to an easy fix for someone who knows the core.async codebase.
The working macro is: