I am using some of the ILSpy code to make a decompiler for Game Maker. While I have some great success (Cut and pasting LoopAndConditions more or less fixed ALOT of issues) I am having trouble understanding why you have both types of blocks.
I understand why the optimizing pass breaks them up into ILBasicBlock as it makes it MUCH easyer to figure out diffrent code paterns, whatI don't understand is why you can't just use the ILBlock instead. Wouldn't it be easyer to have just one block type and have the optimizer use that? Heck, you could even have the block's label info in a seperate property so you don't keep having to patern match for it?
Just fair warning I am not asking ot rewrite anything, it all works:P I am just new to graph theory and was wondering if my lack of understanding was more an issue
As a side note, I havn't gone to the ILExpression to Ast part of the code so I don't know what trasforms happen there.