コード例 #1
0
        public override void OnAwaitExpression(AwaitExpression node)
        {
            var builder     = new BoundSpillSequenceBuilder();
            var replacement = VisitExpression(ref builder, node);

            ReplaceCurrentNode(builder.Update(replacement));
        }
コード例 #2
0
        public override BoundNode VisitAwaitExpression(BoundAwaitExpression node)
        {
            var builder     = new BoundSpillSequenceBuilder();
            var replacement = VisitExpression(ref builder, node);

            return(builder.Update(replacement));
        }
コード例 #3
0
        public override BoundNode VisitSpillSequence(BoundSpillSequence node)
        {
            var builder = new BoundSpillSequenceBuilder();

            // Ensure later errors (e.g. in async rewriting) are associated with the correct node.
            _F.Syntax = node.Syntax;

            builder.AddStatements(VisitList(node.SideEffects));
            builder.AddLocals(node.Locals);
            var value = VisitExpression(ref builder, node.Value);

            return(builder.Update(value));
        }
コード例 #4
0
        private static Expression UpdateExpression(BoundSpillSequenceBuilder builder, Expression expression)
        {
            if (builder == null)
            {
                return(expression);
            }

            Debug.Assert(builder.Value == null);
            if (!builder.HasLocals && !builder.HasStatements)
            {
                return(expression);
            }

            return(builder.Update(expression));
        }