Today I fixed it and now I have a 62 line GC (7 lines whitespace/comments) which is *slightly* less efficient than it could be due to every object being temporarily copied to a temporary heap object before the new space.
The original design *could* be made to work if I write my own implementation of Vec, which would be easy but annoying. The problem is I need to push to the end of a Vec while a mutable ref is held to one of its members, which *is* Rust invariant-safe, but not borrow-check-legal