本文整理汇总了C#中InstructionBlock.AddSuccessors方法的典型用法代码示例。如果您正苦于以下问题:C# InstructionBlock.AddSuccessors方法的具体用法?C# InstructionBlock.AddSuccessors怎么用?C# InstructionBlock.AddSuccessors使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类InstructionBlock
的用法示例。
在下文中一共展示了InstructionBlock.AddSuccessors方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ConnectBlock
private void ConnectBlock(InstructionBlock block)
{
if (block.Last == null)
{
throw new ArgumentException("Undelimited block at offset " + block.First.Offset);
}
Instruction last = block.Last;
switch (last.OpCode.FlowControl)
{
case FlowControl.Branch:
case FlowControl.Cond_Branch:
{
if (!HasMultipleBranches(last))
{
InstructionBlock branchTargetBlock = this.GetBranchTargetBlock(last);
branchTargetBlock.IsBranchTarget = true;
if ((last.OpCode.FlowControl == FlowControl.Cond_Branch) && (last.Next != null))
{
InstructionBlock[] blocks = new InstructionBlock[] { branchTargetBlock, this.GetBlock(last.Next) };
block.AddSuccessors(blocks);
}
else
{
InstructionBlock[] blockArray3 = new InstructionBlock[] { branchTargetBlock };
block.AddSuccessors(blockArray3);
}
return;
}
InstructionBlock[] branchTargetsBlocks = this.GetBranchTargetsBlocks(last);
foreach (InstructionBlock block2 in branchTargetsBlocks)
{
block2.IsBranchTarget = true;
}
if (last.Next != null)
{
branchTargetsBlocks = AddBlock(this.GetBlock(last.Next), branchTargetsBlocks);
}
block.AddSuccessors(branchTargetsBlocks);
return;
}
case FlowControl.Break:
case FlowControl.Call:
case FlowControl.Next:
if (last.Next != null)
{
InstructionBlock[] blockArray4 = new InstructionBlock[] { this.GetBlock(last.Next) };
block.AddSuccessors(blockArray4);
}
return;
case FlowControl.Return:
case FlowControl.Throw:
return;
}
throw new NotSupportedException(string.Format("Unhandled instruction flow behavior {0}: {1}", last.OpCode.FlowControl, Formatter.FormatInstruction(last)));
}