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(); }
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); }