protected virtual void VisitNoOpStatement(BoundNoOpStatement node)
 {
 }
예제 #2
0
        private void EmitNoOpStatement(BoundNoOpStatement statement)
        {
            switch (statement.Flavor)
            {
                case NoOpStatementFlavor.Default:
                    if (this.noOptimizations)
                    {
                        builder.EmitOpCode(ILOpCode.Nop);
                    }
                    break;

                case NoOpStatementFlavor.AwaitYieldPoint:
                    Debug.Assert((this.asyncYieldPoints == null) == (this.asyncResumePoints == null));
                    if (this.asyncYieldPoints == null)
                    {
                        this.asyncYieldPoints = ArrayBuilder<int>.GetInstance();
                        this.asyncResumePoints = ArrayBuilder<int>.GetInstance();
                    }
                    Debug.Assert(this.asyncYieldPoints.Count == this.asyncResumePoints.Count);
                    this.asyncYieldPoints.Add(this.builder.AllocateILMarker());
                    break;

                case NoOpStatementFlavor.AwaitResumePoint:
                    Debug.Assert(this.asyncYieldPoints != null);
                    Debug.Assert(this.asyncYieldPoints != null);
                    this.asyncResumePoints.Add(this.builder.AllocateILMarker());
                    Debug.Assert(this.asyncYieldPoints.Count == this.asyncResumePoints.Count);
                    break;

                case NoOpStatementFlavor.AsyncMethodCatchHandler:
                    Debug.Assert(this.asyncCatchHandlerOffset < 0); // only one expected
                    this.asyncCatchHandlerOffset = this.builder.AllocateILMarker();
                    break;

                default:
                    throw ExceptionUtilities.UnexpectedValue(statement.Flavor);
            }
        }
예제 #3
0
        private void EmitNoOpStatement(BoundNoOpStatement statement)
        {
            switch (statement.Flavor)
            {
                case NoOpStatementFlavor.Default:
                    if (_ilEmitStyle == ILEmitStyle.Debug)
                    {
                        _builder.EmitOpCode(ILOpCode.Nop);
                    }
                    break;

                case NoOpStatementFlavor.AwaitYieldPoint:
                    Debug.Assert((_asyncYieldPoints == null) == (_asyncResumePoints == null));
                    if (_asyncYieldPoints == null)
                    {
                        _asyncYieldPoints = ArrayBuilder<int>.GetInstance();
                        _asyncResumePoints = ArrayBuilder<int>.GetInstance();
                    }
                    Debug.Assert(_asyncYieldPoints.Count == _asyncResumePoints.Count);
                    _asyncYieldPoints.Add(_builder.AllocateILMarker());
                    break;

                case NoOpStatementFlavor.AwaitResumePoint:
                    Debug.Assert(_asyncYieldPoints != null);
                    Debug.Assert(_asyncYieldPoints != null);
                    _asyncResumePoints.Add(_builder.AllocateILMarker());
                    Debug.Assert(_asyncYieldPoints.Count == _asyncResumePoints.Count);
                    break;

                default:
                    throw ExceptionUtilities.UnexpectedValue(statement.Flavor);
            }
        }
예제 #4
0
 public override BoundStatement InstrumentNoOpStatement(BoundNoOpStatement original, BoundStatement rewritten)
 {
     return(AddSequencePoint(base.InstrumentNoOpStatement(original, rewritten)));
 }
예제 #5
0
 public virtual BoundStatement InstrumentNoOpStatement(BoundNoOpStatement original, BoundStatement rewritten)
 {
     return(InstrumentStatement(original, rewritten));
 }
 public override BoundStatement InstrumentNoOpStatement(BoundNoOpStatement original, BoundStatement rewritten)
 {
     return(AddDynamicAnalysis(original, base.InstrumentNoOpStatement(original, rewritten)));
 }
예제 #7
0
 internal void Parse(BoundNoOpStatement boundNoOpStatement)
 {
 }
예제 #8
0
 public override BoundNode VisitNoOpStatement(BoundNoOpStatement node)
 {
     return((node.WasCompilerGenerated || !this.Instrument)
         ? new BoundBlock(node.Syntax, ImmutableArray <LocalSymbol> .Empty, ImmutableArray <BoundStatement> .Empty)
         : _instrumenter.InstrumentNoOpStatement(node, node));
 }
예제 #9
0
 public override BoundStatement InstrumentNoOpStatement(BoundNoOpStatement original, BoundStatement rewritten)
 {
     return(Previous.InstrumentNoOpStatement(original, rewritten));
 }
예제 #10
0
 public override object VisitNoOpStatement(BoundNoOpStatement node, object arg)
 {
     return(null);
 }