public override void OnAwaitExpression(AwaitExpression node) { var builder = new BoundSpillSequenceBuilder(); var replacement = VisitExpression(ref builder, node); ReplaceCurrentNode(builder.Update(replacement)); }
public override BoundNode VisitAwaitExpression(BoundAwaitExpression node) { var builder = new BoundSpillSequenceBuilder(); var replacement = VisitExpression(ref builder, node); return(builder.Update(replacement)); }
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)); }
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)); }