Reloading a defmulti nukes metadata on the var
Reloading a defmulti expression destroys any existing (or new) metadata on that multimethod's var:
This is highly problematic for tools.analyzer, since it relies on such metadata to convey information to the pass scheduler about pass dependencies.
This means that any code that uses core.async cannot be reloaded using `require :reload-all`, since it will cause tools.analyzer to reload and the passes to scheduled in a random order. See for one example.
Cause: defmulti has defonce semantics and the first def does not re-apply meta.
Approach: Re-apply meta before first def.
Screened by: Alex Miller
I had an old version of the patch locally - nvm!
patch doesn't apply with new def spec, needs another look
whoops. Sorry for this, here's the updated (and working) patch
java.lang.RuntimeException: Too many arguments to def, compilingclojure/core.clj:3561:1)
Updated patch fixing the typo & using -U10