I still can't tell you how the closure become corrupted but I now know how to get rid of it. I'm also pretty sure that closures work fine (as you say) and that I probably mistook the same corrupt instance for different instances.
Cheers, Max
How does that happen? It doesn't happen in normal use. I can see how Fuel does it. I can't see how non-Fuel use would do it (other than deliberate construction). A closure is created by evaluating the push-closure bytecode in a specific method, and when this closure is created, it refers, through its outer context to the method object containing the evaluated push-closure bytecode. Since the closure's startpc is derived from the pc of the push-closure bytecode, there is always a match.
However, when Fuel serializes (IIRC) it serializes a *reference* to a method in the form of a class-name,selector pair, and this approach can obviously yield an invalid method.
therefore I think it much more likely that what you;re seeing is a result of a bug in Fuel than some systemic problem with closures.