20 Commits
Author SHA1 Message Date
Siegfried Pammer 07d5a01d2b Add license headers to source files that lacked them
Backfills the standard MIT X11 header on hand-written files that never
got one, attributing each to its first-commit author and year from git
history. Code vendored from dotnet/runtime and Humanizr/Humanizer gets
its origin's license lines and a provenance note instead. Generated
files (Resources.Designer.cs, the version-info template), tool-managed
suppression files, and BAML test-case fixtures intentionally stay
header-less.

Assisted-by: Claude:claude-fable-5:Claude Code
2026-07-05 21:09:46 +02:00
Siegfried Pammer 77d9ee73e9 Fix IDE2000 globally 2025-12-29 19:24:31 +01:00
Peter Crabtree e1e16b64f5 dev: Strip BOM mark from text files 2025-08-28 20:56:19 -04:00
Daniel Grunwald d58576f409 Fix #3075: eliminate recursion in TopologicalSort and BlockTransform. 2023-10-21 16:38:21 +02:00
Siegfried Pammer 0a2037ae1f #3075: Avoid processing already-transformed blocks by introducing BlockTransformContext.IndexOfFirstAlreadyTransformedInstruction, which allows us to track already transformed instructions after a block has been merged into another by ConditionDetection. 2023-10-09 00:23:16 +02:00
dotnet format 0d9f871a4f #2128: Reformat the whole code base. 2020-08-28 01:05:38 +02:00
Daniel Grunwald 8117dfff4a Fix #1242: Discard unreachable code.
Unreachable code is not part of the dominator tree, which most of our transforms are based on.

In particular, dominance-based loop detection runs into the problem where unreachable code might have jumps into two independent loops. In that case, it's impossible to place the unreachable code in a way that avoids assertions / generating invalid C#.

We establish the invariant that all blocks in a BlockContainer must be statically reachable from the entry point (-> every block is part of the dominator tree). This means transforms no longer have to deal with special cases for unreachable code.

The "Remove dead and side effect free code" option still has an effect on dead stores, but unreachable code is now always removed (previously this also was dependent on this option).
2019-07-26 17:14:12 +02:00
Siegfried Pammer eed690a0fc Fix #1449: Fix error message typo. 2019-03-15 15:10:28 +01:00
Daniel Grunwald 7017c6f6e6 Replace LoopingBlockTransform with StatementTransform.
This transform interleaves statement-combining transforms so that nested structures can be detected better.
2017-09-27 21:42:17 +02:00
Daniel Grunwald 133ddac256 [nullables] Add support for lifted conversions. 2017-09-17 19:57:46 +02:00
Daniel Grunwald 4c77022988 Improve decompiler performance. 2017-08-26 16:47:53 +02:00
Daniel Grunwald 6343ab7c15 Improve debug UI 2016-11-27 18:32:05 +01:00
Daniel Grunwald e871f7c05a Convert LoopDetection into a block transform. 2016-11-27 18:00:54 +01:00
Daniel Grunwald ed3d4aba9d Run IntroduceExitPoints before loop detection, and let loop detection introduce its own exit points.
Warning: this commit creates broken branches that enter blocks.
2016-11-27 15:25:22 +01:00
Daniel Grunwald 5530f7ec2e Distinguish between PreOrderTransforms and PostOrderTransforms in BlockILTransform. 2016-11-26 16:35:45 +01:00
Siegfried Pammer 840ec04fde Namespace adjustments for Syntax classes 2016-11-26 12:06:58 +01:00
Daniel Grunwald d50695c218 more step groups 2016-11-25 14:41:39 +01:00
Daniel Grunwald 51a9786243 Change some transforms to block transforms. 2016-11-25 13:47:31 +01:00
Siegfried Pammer b2ef367c77 Added UI for debug steps 2016-11-25 12:43:08 +01:00
Daniel Grunwald 7273fe58fd Add BlockTransform concept and apply a bunch of refactoring essentials suggestions. 2016-11-24 23:17:12 +01:00