コード例 #1
0
            public override void VisitBlock(Block block)
            {
                // Get stack
                if (block.Method.StartBlock == block || !block.Sources.Any())
                {
                    _nextStack = 0;
                }
                else
                {
                    var key   = block.Sources.First(source => _stacks.ContainsKey(source));
                    var stack = _stacks[key];
                    _nextStack = stack;
                }

                // Run visitor
                var visitor = new BlockVisitor(_nextStack);

                visitor.Visit(block);

                // Add to stack list
                _stacks[block] = visitor.GetNextStack();
            }
コード例 #2
0
            public override void VisitBlock(Block block)
            {
                // Get variables
                Variables currentVariables;

                if (block.Method.StartBlock == block || !block.Sources.Any())
                {
                    currentVariables = new Variables(_method);
                }
                else
                {
                    var key       = block.Sources.First(source => _variables.ContainsKey(source));
                    var variables = _variables[key];
                    currentVariables = variables.Copy();
                }

                // Add to stack list
                _variables[block] = currentVariables;

                // Run visitor
                var visitor = new BlockVisitor(currentVariables);

                visitor.Visit(block);
            }