748137bd1d
This is far from perfect and contains a lot of guessing. It showed good results based on our tests cases, fixing several issues and not introducing any more issues (admittedly, after working around a subtle one regarding D static ifs). Closes #845.