//-----------------------------------------------------------------------------------------------------------------------------------------------------

        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));
            }
        }
示例#2
0
        //-------------------------------------------------------------------------------------------------------------------------------------------------

        public OperandCapture(IScopedOperand sourceOperand, StatementBlock sourceOperandHome, IAnonymousMethodOperand consumerMethod)
        {
            this.SourceOperand     = sourceOperand;
            this.SourceOperandHome = sourceOperandHome;

            m_Consumers = new HashSet <IAnonymousMethodOperand>()
            {
                consumerMethod
            };
        }