Comment made by: jszakmeister
It's hard to give a concrete case here--it seems to only really come out with advanced compilation. I had a routine that was returning something like this from a server: {"Br": 0, "B": 100, "P": 1000} as JSON. js->clj would trip generate the "no protocol method" error mentioned in the description on this. I found that if I moved this snippet:
`
(identical? (type x) js/Object)
(into {} (for [k (js-keys x)]
[(keyfn k) (thisfn (unchecked-get x k))]))
`
ahead of this snippet:
(coll? x)
(into (empty x) (map thisfn x))
that the error went away--I'm not sure if it's the right thing to do though. I suspect that the keys are somehow colliding again with known things, and something is being treated like a collection when it is not. Then, when (empty x) is called, we fail because we the object doesn't implement the required protocol.
I thought this kind of situation was fixed in the past by CLJS-1658 and 7e15b1f2b894d93ef94ff86d75226f1fd3919580, but maybe something else is going on that we're hitting false positives again.