Browse Source

Add missing unconditional opcodes in ILStructure.IsUnconditionalBranch

pull/1198/head
Siegfried Pammer 8 years ago
parent
commit
f72c48af02
  1. 9
      ICSharpCode.Decompiler/Disassembler/ILStructure.cs

9
ICSharpCode.Decompiler/Disassembler/ILStructure.cs

@ -219,15 +219,15 @@ namespace ICSharpCode.Decompiler.Disassembler
switch (thisOpCode.GetOperandType()) { switch (thisOpCode.GetOperandType()) {
case OperandType.BrTarget: case OperandType.BrTarget:
case OperandType.ShortBrTarget: case OperandType.ShortBrTarget:
endOffset = body.Offset + thisOpCode.GetBranchOperandSize();
target = ILParser.DecodeBranchTarget(ref body, thisOpCode); target = ILParser.DecodeBranchTarget(ref body, thisOpCode);
endOffset = body.Offset;
result.Add(new Branch(offset, endOffset, target)); result.Add(new Branch(offset, endOffset, target));
bitset[endOffset] = IsUnconditionalBranch(thisOpCode); bitset[endOffset] = IsUnconditionalBranch(thisOpCode);
break; break;
case OperandType.Switch: case OperandType.Switch:
var targets = ILParser.DecodeSwitchTargets(ref body); var targets = ILParser.DecodeSwitchTargets(ref body);
foreach (int t in targets) foreach (int t in targets)
result.Add(new Branch(offset, offset + 4 * (targets.Length + 1), t)); result.Add(new Branch(offset, body.Offset, t));
break; break;
default: default:
ILParser.SkipOperand(ref body, thisOpCode); ILParser.SkipOperand(ref body, thisOpCode);
@ -242,6 +242,11 @@ namespace ICSharpCode.Decompiler.Disassembler
switch (opCode) { switch (opCode) {
case ILOpCode.Br: case ILOpCode.Br:
case ILOpCode.Br_s: case ILOpCode.Br_s:
case ILOpCode.Ret:
case ILOpCode.Endfilter:
case ILOpCode.Endfinally:
case ILOpCode.Throw:
case ILOpCode.Rethrow:
return true; return true;
default: default:
return false; return false;

Loading…
Cancel
Save