//----------------------------------------------------------------------------------------------------------------------------------------------------- private void CaptureOperandIfExternal(IScopedOperand operand) { if (operand.HomeStatementBlock != null) { var mustCloseOver = (operand.HomeStatementBlock.OwnerMethod != null); if (!mustCloseOver) { return; } m_MustCloseOverOperands.Add(operand); } else { AddOrUpdateAnonymousMethod(m_CurrentAnonymousMethod, AnonymousMethodScope.Instance); } var existingCapture = m_Captures.FirstOrDefault(c => c.SourceOperand == operand); if (existingCapture != null) { existingCapture.AddConsumer(m_CurrentAnonymousMethod); } else { m_Captures.Add(new OperandCapture(operand, operand.HomeStatementBlock, consumerMethod: m_CurrentAnonymousMethod)); } }
//------------------------------------------------------------------------------------------------------------------------------------------------- public OperandCapture(IScopedOperand sourceOperand, StatementBlock sourceOperandHome, IAnonymousMethodOperand consumerMethod) { this.SourceOperand = sourceOperand; this.SourceOperandHome = sourceOperandHome; m_Consumers = new HashSet <IAnonymousMethodOperand>() { consumerMethod }; }