Fast method body hotload (#931)
* 0ms hotload fast path poc when only method bodies change using MonoMod
* Print individual changes during compile, show node paths
* WIP check if all changes are in method bodies
* Add attributes to package assemblies describing changed methods
* SupportsILHotloadAttribute is added if only method bodies change
* MethodBodyChangeAttribute is added for each changed method
* ILHotload looks for SupportsILHotload and MethodBodyChange attributes
* Fixed methods with identical IL not being replaced by ILHotload
* ILHotload should never run with a debugger attached
* Clean up dead code
* Detour using a generated dynamic method copy from the replacing method
* Documentation for Compiler.SyntaxTree.cs
* Added CompilerSettings.SourcePathFilter predicate
* Boilerplate for writing ILHotload tests
* Fixed how file changes are emulated in FastPathTest
* A bit more flexibility in fast path test case code preprocessing
* Added failing fast path hotload test for changing method signatures
* ILHotload: changes must be specifically within a BlockSyntax of a method
* Added Compiler.UpdateParseOptions() for tests to use
* Don't use ILHotload if a preprocessor define changed
* Incremental syntax tree parsing
* Throw when trying to debug an ILHotload swap during a test
* Basic incremental compilation
* Make generated code more deterministic, nicer for incremental compile
* Keep track of which assembly types are actually loaded from
* Re-use compiler options where possible
* Changed fast hotload log to a trace
* Make OnlyMethodBodiesChanged multithreaded, fixed multiple changes in one file
* Failing test for property body changes
* Cleanup ILHotload tests, failing test for overloaded method
* Refactor AST processing for ILHotload
* Fixes after refactor, a bit ugly at the moment
* Support fast hotload for property accessors
* NoticeWidget shows ms if duration < 1s
* Call UISystem.OnHotload after an ILHotload
* ILHotload test for nested blocks
* Fixed ILHotload change detection for nested blocks
* Added hotload_fast engine convar to enable / disable IL hotload
* Added failing test of typeof(T) in method body hotloads
* Failing test for static references
* Fix references to members / types in fast-hotloaded method bodies
* Allow debugging ILHotload in Sandbox.Test
* Test for fast-hotloaded methods with parameter / return types defined in the changed module
* Added failing fast hotload test for compiler-generated type changes
* Don't attempt fast hotload if any compiler-generated type definitions change
* Record event when we ILHotload, matches naming of existing hotloads so we can derive % easily
* Remove defunct code about using cecil as the DMDType, not needed since we fix the references ourselves
---------
Co-authored-by: Matt Stevens <matt@mattstevens.co.uk>