コード例 #1
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
            public BasicBlockStub(Variable var, BasicBlock block)
            {
                prev = new ArrayList();
                next = new ArrayList();

                isEmpty = true;
                foreach (ManageVar node in var.UsersArray)
                    isEmpty &= (node.Options[BasicBlock.BASIC_BLOCK_OPTION] as BasicBlock) != block;

                usageArray = new NodeArray();
                if (! isEmpty)
                {
                    foreach (Node node in block.Body)
                        if (node is ManageVar)
                        {
                            ManageVar usage = node as ManageVar;
                            if (usage.Var == var)
                                usageArray.Add(usage);
                        }
                }
            }
コード例 #2
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 private RemoveStackTop newRemoveStackTop(BasicBlock block)
 {
     RemoveStackTop result = new RemoveStackTop();
     result.Options[BasicBlock.BASIC_BLOCK_OPTION] = block;
     return result;
 }
コード例 #3
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
        //Andrew
        private void ReConstruct()
        {
            mbb.RemoveOption(BasicBlock.BASIC_BLOCK_OPTION);
            GraphProcessor processor = new GraphProcessor();
            BasicBlocksBuilder builder = new BasicBlocksBuilder(processor);

            entry = builder.createBasicBlock();
            builder.AddTask(mbb,entry);
            processor.Process();
            blockList = builder.BlockList;
        }
コード例 #4
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
        public BasicBlocksGraph(MethodBodyBlock methodBodyBlock)
        {
            mbb = methodBodyBlock;
            mbb.RemoveOption(BasicBlock.BASIC_BLOCK_OPTION);
            GraphProcessor processor = new GraphProcessor();
            BasicBlocksBuilder builder = new BasicBlocksBuilder(processor);

            entry = builder.createBasicBlock();
            builder.AddTask(methodBodyBlock,entry);
            processor.Process();
            blockList = builder.BlockList;
        }
コード例 #5
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 private DuplicateStackTop newDuplicateStackTop(BasicBlock block)
 {
     DuplicateStackTop result = new DuplicateStackTop();
     result.Options[BasicBlock.BASIC_BLOCK_OPTION] = block;
     return result;
 }
コード例 #6
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 public void Remove(BasicBlock block)
 {
     blocks.Remove(block);
 }
コード例 #7
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 private void AddPrevBasicBlock(BasicBlock prevBasicBlock)
 {
     if (prev.blocks.IndexOf(prevBasicBlock) == -1)
         prev.blocks.Add(prevBasicBlock);
 }
コード例 #8
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 internal BasicBlock createBasicBlock()
 {
     BasicBlock result = new BasicBlock();
     result.index = blockList.Count;
     blockList.blocks.Add(result);
     return result;
 }
コード例 #9
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 internal void AddNextBasicBlock(BasicBlock nextBasicBlock)
 {
     if (next.blocks.IndexOf(nextBasicBlock) == -1)
     {
         next.blocks.Add(nextBasicBlock);
         nextBasicBlock.AddPrevBasicBlock(this);
     }
 }
コード例 #10
0
ファイル: BasicBlocks.cs プロジェクト: DragonXYZ/cilpe
 internal void AddLink(BasicBlock link)
 {
     if (links.blocks.IndexOf(link) == -1)
         links.blocks.Add(link);
 }